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

Programmatic Webpack+Jest(ESM)环境下无.js后缀模块无法解析问题

解决方案
  • 调整Webpack ESM导入严格校验配置
    你遇到的报错是Webpack 5默认对符合ESM规范的模块要求导入路径必须携带完整后缀,可在Webpack配置的resolve字段下添加fullySpecified: false关闭严格后缀校验,允许Webpack自动匹配extensions列表中的后缀补全路径。
    修改后的resolve配置示例:
resolve: {
  fullySpecified: false, // 新增这一行
  extensions: [
    '.ts',
    '.tsx',
    '.js',
    '.jsx',
    '.ttf',
    '.eot',
    '.otf',
    '.svg',
    '.png',
    '.woff',
    '.woff2',
    '.css',
    '.scss',
    '.sass',
  ],
}
  • 修正Babel配置的错误参数
    你当前的Babel配置中corejs的版本号多了多余的逗号,会导致依赖解析异常,把corejs: '3.0.0,'修改为corejs: '3.0.0'即可。

  • 匹配TypeScript ESM编译规则
    在项目的tsconfig.json中添加/修改以下配置,保证TS编译后的导入路径符合ESM规范:

{
  "compilerOptions": {
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true
  }
}

如果你的导入语句用的是.ts后缀,可新增allowImportingTsExtensions: true配置允许直接导入TS文件。

  • 调整Jest测试环境的ESM适配
    由于你是在Jest测试中编程式调用Webpack,需要在jest.config.js中添加以下配置适配ESM包解析:
export default {
  transformIgnorePatterns: [
    // 替换为你用到的带"type": "module"的报错模块名,避免Jest默认不转换第三方ESM包
    "node_modules/(?!(你的报错模块名)/)"
  ],
  extensionsToTreatAsEsm: ['.ts', '.tsx', '.jsx'],
}

如果以上配置都修改完成后仍然报错,可以尝试在编程式调用Webpack时,手动指定context参数为项目根目录,保证模块解析的根路径正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:15:03