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

使用Cucumber.js调用私有NPM包时出现import语句模块外使用错误

解决CucumberJS调用私有NPM模块时的「SyntaxError: Cannot use import statement outside a module」错误

问题根源

私有模块已配置"type": "module"使用ES模块语法,但CucumberJS默认以CommonJS模式运行,或测试组件环境未正确识别私有模块的ES模块属性,导致将.js文件按CommonJS规则解析,触发import语法错误。

具体解决方案

  • 让CucumberJS以ES模块模式运行
    在测试组件的package.json中添加"type": "module",确保整个测试环境默认使用ES模块。如果需要保留CommonJS兼容,可将Cucumber配置文件改为ES模块格式(命名为cucumber.config.mjs),并在package.json中指定:

    "cucumber": {
      "config": "cucumber.config.mjs"
    }
    

    或者启动Cucumber时添加参数:

    npx cucumber-js --require-module esm
    
  • 校验私有模块的导出配置
    确保私有模块的package.json中exports字段正确声明ES模块入口,示例:

    "exports": {
      ".": {
        "import": "./dist/index.js",
        "types": "./dist/index.d.ts"
      }
    }
    

    避免让测试环境尝试用require加载仅支持ES模块的私有包。

  • 调整TypeScript编译配置
    在测试组件的tsconfig.json中明确设置模块相关选项,确保编译输出与私有模块格式匹配:

    {
      "extends": "../tsconfig.json",
      "compilerOptions": {
        "module": "ESNext",
        "moduleResolution": "NodeNext",
        "target": "ES2022"
      }
    }
    

    这会让TypeScript生成符合ES模块规范的代码,避免编译后出现模块格式冲突。

  • 适配ts-node的模块模式
    如果用ts-node运行Cucumber测试,启动命令需加上--esm参数,示例package.json脚本:

    "scripts": {
      "test": "cucumber-js --require-module ts-node/register --esm"
    }
    

排查小技巧

  1. 先写一个独立的测试脚本,直接import私有模块的ROLES,验证模块本身能否正常加载,排除Cucumber的影响。
  2. 检查私有模块的constant.js路径是否与package.json的main/exports配置一致,确保加载的是正确的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:22:21