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

Jest测试TS代码导入副作用polyfill报Cannot use import statement错误

问题根因

该报错和import "z"这种副作用导入语法无关,本质原因是:

  • 你导入的promise-polyfill/src/polyfill是包内未编译的ESM源码,使用了import ES模块语法
  • Jest默认配置下不会转译node_modules目录下的所有文件,因此无法识别ES模块语法
  • 其他import x from "y"导入的依赖能正常运行,是因为这些依赖发布时已经将产物编译为兼容的CommonJS格式,不需要额外转译

解决方法

方案1(推荐):更换为编译后的polyfill导入路径

绝大多数polyfill包都会提供预编译的通用版本,你只需要将导入语句从源码路径改为产物路径即可:

// 替换前
import "promise-polyfill/src/polyfill";
// 替换后
import "promise-polyfill/dist/polyfill.min.js";

该方案无需修改Jest配置,同时不会影响浏览器端的polyfill注入效果,兼容性最好。

方案2:修改Jest配置,允许转译指定node_modules依赖

如果你必须使用源码版本的polyfill,可以修改jest.config.js,调整transformIgnorePatterns配置,将promise-polyfill从默认忽略转译的名单中排除:

module.exports = {
    transform: { '^.+\\.ts?$': 'ts-jest' },
    testEnvironment: 'node',
    testRegex: '/test/.*\\.(test|spec)?\\.(ts|tsx)$',
    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
    // 新增以下配置
    transformIgnorePatterns: [
      "/node_modules/(?!promise-polyfill)"
    ]
};

该配置的含义是:node_modules目录下除了promise-polyfill之外的所有包都不做转译,Jest会自动对promise-polyfill的源码做语法转换,即可识别import语句。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:54:03