升级Sinon至v18后Jest无法识别export default语法求助
解决Sinon v18升级后Jest无法识别ES模块的问题
问题根源
Sinon升级到v18后,默认提供的ES模块版本(sinon-esm.js)使用了export default这类ES语法,但Jest默认不会转译node_modules目录下的文件,导致解析失败。
具体解决步骤
1. 调整Jest配置,强制转译Sinon
在你的Jest配置文件(jest.config.js或package.json的jest字段)中添加transformIgnorePatterns规则,指定除了Sinon之外,其他node_modules文件不转译:
// jest.config.js module.exports = { // 保留原有配置 transformIgnorePatterns: [ 'node_modules/(?!sinon/)' ] };
如果是在package.json中配置:
{ "jest": { "transformIgnorePatterns": ["node_modules/(?!sinon/)"] } }
2. 确保Babel能处理ES模块转译
检查你的Babel配置文件(.babelrc或babel.config.js),需包含适配Node环境的预设,保证将ES语法转译为Jest可识别的CommonJS:
// babel.config.js module.exports = { presets: [ ['@babel/preset-env', { targets: { node: 'current' } }], '@babel/preset-react' ] };
3. 直接导入Sinon的CommonJS版本(备选方案)
若上述配置仍未解决问题,可以跳过ES模块版本,直接导入Sinon的CommonJS版本:
// 替换原有import语句 import sinon from 'sinon/pkg/sinon';
或使用CommonJS语法:
const sinon = require('sinon/pkg/sinon');
验证修改
配置完成后重新运行测试命令:
npm test
确认Jest不再抛出export default相关语法错误,所有测试用例正常执行。
内容的提问来源于stack exchange,提问作者مالك الدسوقي
相关产品推荐
相关产品推荐

