使用Jest和Pulumi运行测试时找不到spdx-license-ids模块
使用Pulumi+Jest测试时模块找不到错误的解决办法
错误信息
Cannot find module 'spdx-license-ids' from '../../node_modules/spdx-expression-parse/scan.js'
at Resolver._throwModNotFoundError (../../node_modules/jest-resolve/build/resolver.js:427:11) at Object.<anonymous> (../../node_modules/spdx-expression-parse/scan.js:4:11) at Object.<anonymous> (../../node_modules/spdx-expression-parse/index.js:3:12) at Object.<anonymous> (../../node_modules/validate-npm-package-license/index.js:1:177) at Object.<anonymous> (../../node_modules/normalize-package-data/lib/fixer.js:3:23) at Object.<anonymous> (../../node_modules/normalize-package-data/lib/normalize.js:3:13) at Object.<anonymous> (../../node_modules/@pulumi/runtime/closure/codePaths.ts:21:1) at Object.<anonymous> (../../node_modules/@pulumi/runtime/index.ts:22:1) at Object.<anonymous> (../../node_modules/@pulumi/index.ts:31:1) at Object.<anonymous> (src/lib/infrastructure.spec.ts:1:1) 1 | import * as pulumi from "@pulumi/pulumi"; | ^
当前jest.config.ts配置
export default { displayName: 'infrastructure', preset: '../../jest.preset.js', testEnvironment: 'node', transform: { '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }], }, moduleFileExtensions: ['ts', 'js', 'html', 'json'], coverageDirectory: '../../coverage/packages/infrastructure', };
环境信息
- Node.js版本:20.9.0
- NPM版本:10.1.0
- Jest版本:29.7.0
- Pulumi版本:3.146.0
- NX版本:20.1.4
已尝试操作
- 删除node_modules和package-lock.json后重新执行
npm install - 显式安装spdx-license-ids:
npm install spdx-license-ids --save
错误原因
- 依赖安装异常:
spdx-license-ids是spdx-expression-parse的依赖,后者被Pulumi的@pulumi/runtime间接引用。npm安装时可能因依赖树解析问题,导致该模块未被正确安装到node_modules中。 - NX monorepo路径问题:NX的monorepo结构可能导致Jest解析跨包依赖时,无法正确定位到根目录下的node_modules。
- Jest模块解析配置不足:当前Jest配置未明确指定模块查找路径,深层目录下执行测试时,Jest无法找到依赖模块。
解决办法
1. 彻底清理并重装依赖
执行以下命令清理缓存和旧依赖后强制重装:
npm cache clean --force rm -rf node_modules package-lock.json npm install --force
如果是NX项目,可先重置NX再重装:
nx reset npm install
2. 调整Jest的模块解析路径
在jest.config.ts中添加modulePaths配置,指定根目录的node_modules路径,帮助Jest正确定位依赖:
export default { displayName: 'infrastructure', preset: '../../jest.preset.js', testEnvironment: 'node', transform: { '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }], }, moduleFileExtensions: ['ts', 'js', 'html', 'json'], coverageDirectory: '../../coverage/packages/infrastructure', // 新增配置:指定node_modules路径 modulePaths: ['<rootDir>/../../node_modules'], };
根据项目目录层级调整路径,确保指向根目录下的node_modules。
3. 切换到Yarn安装依赖(可选)
若npm依赖解析持续有问题,可尝试用Yarn替代,它的依赖树管理更稳定:
rm -rf node_modules package-lock.json yarn install
4. 检查Pulumi版本兼容性
当前Pulumi 3.146.0可能与Node.js 20.x存在兼容性问题,尝试降级到稳定兼容版本:
npm install @pulumi/pulumi@3.140.0 --save
内容的提问来源于stack exchange,提问作者Nahom
相关产品推荐
相关产品推荐

