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

使用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

错误原因

  1. 依赖安装异常:spdx-license-ids是spdx-expression-parse的依赖,后者被Pulumi的@pulumi/runtime间接引用。npm安装时可能因依赖树解析问题,导致该模块未被正确安装到node_modules中。
  2. NX monorepo路径问题:NX的monorepo结构可能导致Jest解析跨包依赖时,无法正确定位到根目录下的node_modules。
  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:35:09