Jest导入Lighthouse的startFlow函数时解析失败求助
解决方案
1. 调整Jest配置以支持ES模块
在jest.config.ts中更新配置,让Jest能够正确解析Lighthouse的ES模块代码:
export default { // 保留你已有的其他配置(如testEnvironment、setupFilesAfterEnv等) transform: {}, // 禁用默认的babel-jest转换,避免干扰ES模块解析 extensionsToTreatAsEsm: ['.ts', '.tsx'], moduleNameMapper: { '^(\\.{1,2}/.*)\\.js$': '$1', // 处理TypeScript导入时的.js后缀问题 }, testEnvironmentOptions: { customExportConditions: ['node', 'node-addons'], }, };
2. 配置项目的模块类型
在项目根目录的package.json中添加type: module声明,明确项目使用ES模块:
{ "type": "module" }
如果保留jest.config.ts作为配置文件,需要确保ts-node支持ES模块:
- 安装依赖:
npm install -D ts-node @types/node - 在
package.json中添加ts-node配置:
{ "ts-node": { "esm": true, "experimentalSpecifierResolution": "node" } }
- 启动命令改为:
NODE_OPTIONS="--loader ts-node/esm" jest
3. 降级替代方案(临时用CommonJS导入)
如果ES模块配置遇到阻碍,可以临时改用CommonJS方式导入Lighthouse:
const { UserFlow, startFlow } = require('lighthouse');
注意:该方案属于临时 workaround,Lighthouse官方已逐步弃用CommonJS入口,长期建议采用ES模块配置。
4. 确保Jest版本达标
使用Jest 28及以上版本,旧版本对ES模块的支持存在缺陷。更新命令:
npm install -D jest@latest
内容的提问来源于stack exchange,提问作者Gosiek
相关产品推荐
相关产品推荐

