Angular v14升v15后CI/CD中npm run test报错__webpack_require__.context不是函数
问题原因分析
- Angular 15测试架构变更:Angular CLI在v15升级时自动移除
test.ts中的require.context代码,是因为v15默认采用的测试构建逻辑已经自动扫描并加载所有.spec.ts文件,不再需要手动通过Webpack的require.contextAPI来遍历测试文件。 - Webpack版本兼容性问题:
require.context是Webpack 4的特性,Angular 15升级后默认使用Webpack 5,Webpack 5中该API的实现方式发生了变化,且Angular CLI的测试配置不再依赖这个API,强行保留会导致构建时出现__webpack_require__(...).context is not a function错误。 - 环境缓存不一致:本地暂时正常是因为构建缓存残留了Webpack 4的兼容逻辑,但缓存失效或CI/CD的干净环境下,Webpack 5不兼容该写法,就会触发报错,导致测试随机失败。
解决方案
- 保留CLI自动移除的结果:彻底删除
test.ts中那两段require.context相关代码,这是Angular 15的标准配置,CLI会自动完成测试文件的扫描和加载。 - 自定义测试文件范围(如需):如果需要指定特定的测试文件或排除某些文件,修改
angular.json中projects.[your-project-name].test.options的配置:"test": { "options": { "include": ["src/**/*.spec.ts"], // 指定要包含的测试文件 "exclude": ["src/**/*.skip.spec.ts"] // 指定要排除的测试文件 } } - 确保环境依赖一致:CI/CD环境执行测试前,执行以下命令清理依赖:
避免依赖版本不一致导致的兼容问题。rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者kana op
相关产品推荐
相关产品推荐

