使用ts-jest运行测试遇SyntaxError: Unexpected token 'export'错误求助
解决Jest+ts-jest中ssr-window的ESM语法错误问题
问题背景
使用Jest搭配ts-jest运行测试时,触发SyntaxError: Unexpected token 'export'错误,根源是依赖库ssr-window采用ESM模块语法,但Jest默认忽略node_modules目录下的文件转换,即便配置了transformIgnorePatterns也未生效。
核心原因
- 现有
jest.config.js的transform配置仅处理静态资源,未指定TS/JS文件的转换规则,导致ts-jest无法对ssr-window的ESM代码进行转译 transformIgnorePatterns的正则匹配规则存在偏差,未能正确让ssr-window跳出转换黑名单
解决步骤
- 补充TS/JS文件的转换规则:在
transform中添加ts-jest对TS/JS文件的处理逻辑,确保白名单内的node_modules模块能被转译 - 修正
transformIgnorePatterns正则:调整正则表达式,精准排除ssr-window,避免其被Jest忽略转换 - 可选:调整TS模块配置:若项目无需ESM输出,可将
tsconfig.json的module字段改为CommonJS,减少模块兼容冲突
修改后的配置示例
jest.config.js
const { pathsToModuleNameMapper } = require("ts-jest"); const { compilerOptions } = require("./tsconfig.json"); module.exports = { resetMocks: false, preset: "ts-jest", testEnvironment: "jsdom", moduleDirectories: [ "node_modules", "src" ], resolver: "./jest.resolver", globals: { google: {}, }, transform: { // 新增TS/JS文件的转译规则,让ts-jest处理这类文件 "^.+\\.(ts|tsx|js|jsx)$": "ts-jest", "\\.(jpeg|png|mp4|svg|gif)$": "<rootDir>/config/jest/fileTransform.js", }, setupFilesAfterEnv: [ "<rootDir>/src/setupTests.ts", ], moduleNameMapper: { "\\.(css|scss)$": "identity-obj-proxy", ...pathsToModuleNameMapper(compilerOptions.paths, { prefix: '<rootDir>/src/', }), }, transformIgnorePatterns: [ // 修正正则,确保ssr-window不被忽略转译 "/node_modules/(?!(ssr-window)/)", ] };
可选:调整tsconfig.json的module配置
{ "compilerOptions": { // ...其他原有配置 "module": "CommonJS", // ...其他原有配置 } }
验证方式
重新执行测试命令,检查ssr-window的ESM代码是否被正确转译,确认Unexpected token 'export'错误是否消失。
内容的提问来源于stack exchange,提问作者Code Spirit
相关产品推荐
相关产品推荐

