Angular10升11出现npm shrinkwrap配置警告如何解决
Angular 10升11迁移出现npm shrinkwrap配置警告排查方案
问题现象
执行Angular 10到11版本迁移步骤时抛出如下提示:
Unexpected error : npm WARN config shrinkwrap. Use the --package-lock setting instead
当前已知状态:
- 应用可正常构建成功
- 项目根目录不存在
npm-shrinkwrap.json文件 node_modules目录下无shrinkwrap相关依赖包- 项目锁文件仅存在
package-lock.json - 已检索公开技术社区相关问题,未找到匹配的有效解决方案
根因
该警告并非项目代码、锁文件异常导致,是Angular迁移脚本与本地npm版本不兼容触发:
Angular 11官方适配的npm版本为v6.x,npm v7及以上版本废弃了原有的shrinkwrap配置项,统一合并为package-lock配置项。Angular 11的迁移脚本内部仍沿用npm v6的参数规则,调用时传递了--shrinkwrap相关参数,高版本npm识别到废弃参数就会抛出该警告,而迁移脚本默认将npm输出的警告识别为执行错误,最终抛出Unexpected error提示。
解决方法
二选一即可:
方案1:临时降级npm到适配版本(最稳妥)
- 全局安装npm v6最终稳定版:
npm install -g npm@6.14.18 - 清理旧依赖和缓存避免版本冲突:
rm -rf node_modules package-lock.json npm cache clean --force
- 重新安装依赖:
npm install - 重新执行Angular 10到11的迁移命令即可,警告不会再出现。迁移完成后可按需升级回高版本npm。
方案2:兼容配置(无需降级npm)
执行迁移命令前,先给npm添加兼容配置,让旧的shrinkwrap配置项映射到新的package-lock逻辑:npm config set shrinkwrap true
配置完成后直接执行迁移命令即可,该配置不会影响正常依赖安装逻辑。迁移完成后如果需要清理该兼容配置,执行npm config delete shrinkwrap即可。
内容的提问来源于stack exchange,提问作者jslover2020
相关产品推荐
相关产品推荐

