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

如何让cucumber-js编译TypeScript文件并解决import语句报错问题

问题根因

该报错是ESM模块规范与ts-node默认加载模式不匹配导致的:你在package.json中添加"type": "module"后,Node.js会按ESM规则加载所有.js文件,但ts-node默认以CommonJS模式处理TypeScript文件,二者模块加载逻辑冲突,所以识别不了ESM的import语法。

修复方案(ESM模式适配)

按照以下步骤调整配置即可解决:

  • 调整tsconfig.json配置,新增ts-node专属的ESM开启配置:
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "esModuleInterop": true,
    "skipLibCheck": true
  },
  "ts-node": {
    "esm": true,
    "experimentalSpecifierResolution": "node"
  }
}
  • 修改cucumber-js运行命令,替换ts-node加载器,同时给glob路径加引号避免shell提前解析:
node_modules\.bin\cucumber-js --loader ts-node/esm --require "step-definitions/**/*.ts" --format progress-bar --require "tests/page/*.ts" "features/**/*.feature"
  • 检查代码中的相对导入语句,ESM规范要求必须补全导入文件后缀,例如把import { TestSupportPage } from './test-support.page'改为import { TestSupportPage } from './test-support.page.js'(注意填编译后的.js后缀,不是.ts后缀)。
备选方案(回退CommonJS模式,操作更简单)

如果没有强制使用ESM的需求,可以直接回退到CommonJS模式,无需调整代码导入逻辑:

  • 删除package.json中新增的"type": "module"配置
  • 将tsconfig.json的module配置改为CommonJS
  • 直接使用你原本的运行命令即可正常执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:57:02