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

Jest测试ANTLR4解析器遇导入错误:Cannot use import statement outside a module

解决Jest导入antlr4时的"Cannot use import statement outside a module"错误

我使用ANTLR4在TypeScript/JavaScript中实现了解析器,编写单元测试时导入antlr4遇到以下错误:

....\node_modules\antlr4\dist\antlr4.node.mjs:1
SyntaxError: Cannot use import statement outside a module

1 | import antlr4 from 'antlr4';
| ^

测试文件最简示例:

import antlr4 from 'antlr4';

test('test_case', () => {
   const chars = new antlr4.InputStream("test");
});

使用的是最新版本的Jest和antlr4,以下是解决该问题的Jest配置步骤:

步骤1:设置项目为ES模块类型

在项目根目录的package.json中添加或修改type字段:

{
  "type": "module"
}

步骤2:配置Jest支持ES模块

创建或修改项目根目录的jest.config.mjs文件(注意后缀为.mjs,适配ES模块语法),添加以下配置:

export default {
  // 禁用默认的CommonJS转换,避免干扰ES模块处理
  transform: {},
  // 指定将.ts和.mjs文件当作ES模块处理
  extensionsToTreatAsEsm: ['.ts', '.mjs'],
  // 处理导入路径中的.js后缀问题,适配ES模块导入规则
  moduleNameMapper: {
    '^(\\.{1,2}/.*)\\.js$': '$1'
  }
};

步骤3:TypeScript项目额外配置

如果项目基于TypeScript,先安装依赖:

npm install --save-dev ts-jest @types/jest

然后修改jest.config.mjs为:

export default {
  preset: 'ts-jest/presets/default-esm',
  extensionsToTreatAsEsm: ['.ts'],
  moduleNameMapper: {
    '^(\\.{1,2}/.*)\\.js$': '$1'
  },
  globals: {
    'ts-jest': {
      useESM: true
    }
  }
};

步骤4:调整测试运行命令

在package.json的scripts中更新测试命令,添加Node.js的ES模块支持flag:

{
  "scripts": {
    "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
  }
}

完成以上配置后,Jest就能正确处理antlr4的ES模块导入,解决语法错误问题。

内容的提问来源于stack exchange,提问作者F.J.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:10:11