无package.json单独使用Cypress报Cannot use import statement outside a module如何解决
无package.json场景下Cypress「Cannot use import statement outside a module」报错解决方案
问题复现背景
团队成员未配置package.json、IDE环境或相关框架,单独使用Cypress做e2e测试时抛出以下报错:
Cannot use import statement outside a module
关联测试代码
describe('Dummy', () => { before(() => { cy.visit(Cypress.env('baseURL')); cy.contains('Log in').click(); cy.get('input[name="username"]').type('test user').should('have.value', 'test user'); cy.get('input[name="password"]').type('test password').should('have.value', 'test password'); }); });
测试可正常执行cy.visit、cy.contains两条命令,运行到输入用户名密码的代码行时触发报错。
可行解决方案
不需要新增/修改package.json,可任选以下一种方案操作:
- 调整配置文件后缀:将Cypress根目录下的
cypress.config.js重命名为cypress.config.cjs,强制Node.js以CommonJS规范解析配置文件,避免识别为ES模块 - 调整测试/支持文件后缀:如果是测试文件或Cypress支持文件(默认路径为
cypress/support/e2e.js)中存在import语句,直接将对应文件后缀从.js改为.cjs即可,不需要额外修改配置 - 启动时指定Node.js模块规范:使用命令行启动Cypress时添加运行参数,Node.js 18及以上版本可执行以下命令:
全局安装Cypress的用户可直接替换为:node --experimental-default-type=commonjs <Cypress执行路径> opennode --experimental-default-type=commonjs $(which cypress) open
原因说明
报错本质是Node.js把相关JS文件识别为ES模块,但Cypress运行时默认按CommonJS规范加载依赖。前两条命令可正常执行是因为二者是Cypress内置原生命令,不需要加载用户自定义的JS文件,执行到后续命令时触发了自定义命令、支持文件等用户侧JS的加载,才触发模块规范不匹配的报错。
内容的提问来源于stack exchange,提问作者Codehan25
相关产品推荐
相关产品推荐

