升级Node.js至v20后Jest测试报SyntaxError: Unexpected token 'export'错误
解决Node.js v20下NestJS Jest测试报错
SyntaxError: Unexpected token 'export' 问题根源
Node.js v20对ES模块的解析规则更严格,而@aws-sdk/client-ssm已升级为纯ES模块发布。你的Jest配置中transformIgnorePatterns未包含@aws-sdk相关包,导致这些ES模块代码未被ts-jest转换,Jest尝试以CommonJS规则解析时触发语法错误。
解决方案
1. 更新Jest的transformIgnorePatterns配置
修改jest.config.js,将@aws-sdk加入需要转换的node_modules白名单:
export default { // ... 其他原有配置 transformIgnorePatterns: ['/node_modules/(?!@aws-sdk|@smithy|uuid)'], // ... 其他原有配置 };
2. 确保测试用TypeScript配置为CommonJS
检查tsconfig.spec.json,确保compilerOptions.module设置为CommonJS(Jest在Node环境下默认兼容该模块系统):
{ "extends": "./tsconfig.json", "compilerOptions": { "module": "CommonJS", "outDir": "../../dist/out-tsc/spec", "types": ["jest", "node"] }, "include": ["**/*.spec.ts", "**/*.d.ts"] }
3. 升级Jest及相关依赖版本
Node.js v20需要兼容的Jest版本(推荐29.x+),执行以下命令更新依赖:
npm install jest@latest ts-jest@latest @types/jest@latest --save-dev
4. 额外兼容配置(若上述步骤无效)
如果仍存在ES模块解析问题,在jest.config.js中添加以下配置:
export default { // ... 其他原有配置 extensionsToTreatAsEsm: ['.ts'], moduleNameMapper: { '^(\\.{1,2}/.*)\\.js$': '$1', }, // ... 其他原有配置 };
内容的提问来源于stack exchange,提问作者Eden Hason
相关产品推荐
相关产品推荐

