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

ES2022模块配置下Cucumber+Playwright无法识别.ts文件求助

解决Cucumber + Playwright集成中ES模块与CommonJS冲突问题(无需修改tsconfig)

问题核心

你的TS配置指定了target: ES2022和module: ES2022,且项目package.json中设置了"type": "module",导致所有TS文件被识别为ES模块。但Cucumber默认用require(CommonJS语法)加载模块,触发了ES模块无法被require()加载的错误。

解决方案(无需修改tsconfig)

核心是调整Cucumber配置,改用ES模块的加载方式:

  1. 修改cucumber.cjs配置
    将原配置中的require替换为import,并改用支持ES模块的TS加载器:
const config = {
    paths: ['tests/acceptance/features/**/*.feature'],
    import: ['tests/acceptance/step_definitions/**/*.ts'], // 替换require为import
    requireModule: ['ts-node/esm'], // 使用ES模块版本的ts-node加载器
    format: [
      'summary',
      'progress-bar',
    ],
    formatOptions: { snippetInterface: 'async-await' },
    publishQuiet: true,
};

module.exports = {
   default: config
};
  1. 添加ts-node的ES模块配置(可选但推荐)
    在tsconfig.json中加入ts-node的ES模块支持配置,避免加载路径问题:
{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ES2022",
    // 其他原有配置...
  },
  "ts-node": {
    "esm": true,
    "experimentalSpecifierResolution": "node"
  }
}
  1. 备选方案:用esbuild加速加载
    如果ts-node/esm运行缓慢或有兼容性问题,可以改用@esbuild-kit/cjs-loader:
  • 安装依赖:npm install -D @esbuild-kit/cjs-loader
  • 修改cucumber.cjs的requireModule:
    requireModule: ['@esbuild-kit/cjs-loader']
    

原理说明

  • Cucumber的import配置项会使用ES模块的import()语法加载你的TS文件,适配项目的ES模块环境
  • ts-node/esm或@esbuild-kit/cjs-loader负责将TS的ES模块代码实时转换为可执行的JS,无需修改原有tsconfig的编译目标和模块设置

验证

运行你的Cucumber测试命令(如npx cucumber-js),此时应该能正常启动Playwright并执行测试用例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:41:00