Angular项目含git+ssh依赖包,ng build --prod时异常拉取npm源问题
我之前遇到过几乎一模一样的情况!明明本地开发一切正常,prod构建却非要去npmjs找自定义包,折腾了好一阵才解决,给你几个排查和解决的方向:
确认Angular CLI使用yarn作为包管理器
Angular CLI默认可能会 fallback 到npm,哪怕你平时用yarn。可以全局设置CLI的包管理器:ng config cli.packageManager yarn也可以在项目的
angular.json里,针对build任务单独配置:
在projects -> [你的项目名] -> architect -> build -> options中添加:"packageManager": "yarn"检查项目package.json中的依赖声明
确保你的自定义包是明确用git+ssh URL声明的,比如:"my-package": "git+ssh://git@your-repo-host.com/your-username/my-package.git#main"别不小心写成了版本号格式(比如
^1.0.0),这种情况下prod构建会自动去npmjs查找对应版本。重新生成yarn.lock文件
有时候lock文件里的依赖条目可能有异常,哪怕你清了缓存。删掉项目根目录的yarn.lock,然后重新执行:yarn install生成新的lock文件后,再尝试
ng build --prod。排查prod构建的优化配置
Angular的prod模式会启用严格的优化和依赖解析,可能会把自定义包当成公共npm包处理。可以临时关闭优化验证:
在angular.json的build options里设置:"optimization": false如果此时build正常,说明是优化环节的问题。可以把自定义包加入到
allowedCommonJsDependencies中:"allowedCommonJsDependencies": ["my-package"]再开启优化重新构建。
检查构建相关脚本
看看项目的package.json里的scripts,有没有prebuild之类的钩子脚本,里面是不是不小心用了npm install?确保所有构建相关的命令都使用yarn。
内容的提问来源于stack exchange,提问作者user390749

