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

Vite迁移后Jest测试报错:Cannot use import statement outside a module

解决从Create React App迁移到Vite后Jest测试的"Cannot use import statement outside a module"错误

你的问题核心是内部UI库的组件代码使用了ES模块语法(如import),但Jest没有对该库进行转译,导致运行测试时抛出语法错误。以下是针对性的修复方案:

1. 将内部UI库加入Jest转译白名单

默认情况下,Jest会跳过node_modules目录下文件的转译。如果你的内部UI库是发布在node_modules中的私有包,需要修改jest.config.js的transformIgnorePatterns,把UI库排除在忽略列表外:

transformIgnorePatterns: [
  '/node_modules/(?!d3|d3-array|internmap|delaunator|robust-predicates|@your-ui-library-name)',
],

替换@your-ui-library-name为你的UI库实际包名;如果是本地目录(如src/ui),则无需此步骤,但要确保moduleDirectories包含该目录

2. 扩展ES模块处理的文件类型

当前extensionsToTreatAsEsm只包含.ts,需要补充UI库可能用到的.js、.jsx类型,确保Jest正确识别这些文件为ES模块:

extensionsToTreatAsEsm: ['.ts', '.tsx', '.js', '.jsx'],

3. 强化Babel对JSX的转译配置

你的.babelrc已包含@babel/preset-react,显式设置runtime: 'automatic'可确保它正确转译react/jsx-runtime的导入:

{
  "presets": [
    ["@babel/preset-env", { "targets": { "node": "current" } }],
    "@babel/preset-typescript",
    ["@babel/preset-react", { "runtime": "automatic" }]
  ],
  // ...其他插件
}

4. 针对本地UI库源码的转译配置

如果你的UI库是本地未编译的源码(而非发布的包),直接让Jest转译该目录:
在jest.config.js的transform中添加UI库目录的匹配规则:

transform: {
  '^.+\\.(js|jsx)$': 'babel-jest',
  '^.+\\.(ts|tsx)$': 'ts-jest',
  '^src/ui/.+\\.(js|jsx|ts|tsx)$': 'babel-jest', // 替换为你的UI库本地路径
},

完成以上调整后,重新运行Jest测试,即可解决Cannot use import statement outside a module的错误。

内容的提问来源于stack exchange,提问作者Monkey D. Teach

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:23:36