You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue3+Jest环境引入@microsoft/signalr报Unexpected token 'export'错误如何解决

问题根因

该报错的核心原因是:@microsoft/signalr 包的ESM构建产物使用了标准ES模块的export语法,而Jest默认运行在CommonJS环境下,你当前配置的transformIgnorePatterns设置为忽略全部node_modules下的文件,导致该包的ES语法没有被转译为Jest可识别的CommonJS语法。
同时你当前配置的transform规则存在优先级冲突:先声明的.ts文件用ts-jest处理的规则,会被后声明的.ts/.js文件用babel-jest处理的规则覆盖,也可能引发TS语法转译异常。

修复步骤
  • 第一步:调整transformIgnorePatterns配置,排除@microsoft/signalr包,让转译器处理该包的代码
    将jest.config.js中对应的配置改为:
transformIgnorePatterns: ['node_modules/(?!(@microsoft/signalr)/)'],

该正则的含义为:忽略node_modules下除了@microsoft/signalr之外的所有文件,不对其做转译处理。

  • 第二步:修正transform规则优先级,避免规则覆盖
    根据你的项目技术栈二选一即可:

    1. 如果你需要保留ts-jest做类型校验,调整规则顺序:
    transform: {
      '.*\\.(vue)$': 'vue3-jest',
      '^.+\\.scss$': 'jest-scss-transform',
      '^.+\\.tsx?$': 'ts-jest',
      '^.+\\.jsx?$': 'babel-jest',
    },
    
    1. 如果你不需要ts-jest做类型校验,直接合并规则:
    transform: {
      '.*\\.(vue)$': 'vue3-jest',
      '^.+\\.scss$': 'jest-scss-transform',
      '^.+\\.[tj]sx?$': ['babel-jest', { presets: ['@babel/preset-typescript'] }]
    },
    
  • 第三步:确认Babel配置支持ES模块转译
    在项目根目录的.babelrc或babel.config.json中添加以下配置,用来把ES模块转译为CommonJS:

{
  "presets": [
    ["@babel/preset-env", { "targets": { "node": "current" } }],
    "@babel/preset-typescript"
  ]
}

如果缺少对应依赖,执行以下命令安装:
npm install @babel/preset-env @babel/preset-typescript --save-dev

  • 备选快速方案
    如果不想调整转译规则,可直接修改signalr的导入路径,使用已经编译为UMD格式的兼容产物,无需额外转译即可运行:
    把原导入语句替换为:
import * as signalR from '@microsoft/signalr/dist/browser/signalr.min.js';

内容的提问来源于stack exchange,提问作者Nelu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:00:00