Angular5:Jenkins构建中Vendor bundle无法更新问题
解决Jenkins构建Angular 5应用时Vendor Bundle不更新的问题
我之前也踩过类似的Jenkins构建Angular项目时vendor bundle不更新的坑,结合你的场景(Angular 5、webpack打包、yarn包管理),可以从这几个常见方向排查解决:
1. 清理Jenkins工作区的残留文件
Jenkins默认会保留上一次构建的工作区文件,旧的node_modules或者dist目录可能导致构建时复用旧的依赖或打包产物,从而让vendor bundle没更新。
- 解决办法:在Jenkins构建脚本的最开头添加清理命令:
然后再执行rm -rf node_modules distyarn install和构建命令。也可以安装Jenkins的Workspace Cleanup插件,配置每次构建前自动清理工作区,更省心。
2. 强制刷新Yarn依赖缓存
Yarn的全局缓存可能在Jenkins服务器上留存了旧版本的依赖,即使你本地更新了依赖,Jenkins安装时还是会取缓存里的旧包。
- 解决办法:构建时用
--force参数强制重新安装所有依赖:
或者先清理Yarn缓存再安装:yarn install --forceyarn cache clean yarn install
3. 确保Angular CLI版本与本地一致
你本地用yarn global add @angular/cli@latest安装了最新版CLI,但Jenkins服务器上的全局CLI版本可能和本地不一致,不同版本的CLI打包逻辑可能有差异,导致vendor bundle生成异常。
- 解决办法:不要依赖全局CLI,改用项目本地的CLI执行构建:
- 确保项目的
package.json里已经包含@angular/cli依赖(本地执行yarn时应该已经安装了) - 在
package.json的scripts里添加构建命令:"scripts": { "build:prod": "ng build --aot" } - Jenkins构建时执行:
yarn run build:prod
node_modules里的CLI版本,和本地完全一致。 - 确保项目的
4. 禁用Webpack构建缓存
Angular CLI的webpack配置默认可能启用了构建缓存,Jenkins构建时没有清除缓存目录,导致复用旧的vendor bundle缓存。
- 解决办法:构建时添加
--no-cache参数禁用缓存:ng build --aot --no-cache
5. 检查Jenkins工作区的文件权限
有时候Jenkins运行的系统用户没有修改dist目录的权限,新生成的vendor bundle无法覆盖旧文件,看起来就像是没更新。
- 解决办法:检查Jenkins工作区的文件权限,确保运行Jenkins的用户有读写权限。可以在构建前添加权限修改命令(根据服务器系统调整):
chmod -R 755 dist
建议先从清理工作区和强制重新安装依赖开始排查,这是最常见的原因。如果还是不行,再依次检查CLI版本、缓存参数和权限问题。
内容的提问来源于stack exchange,提问作者hakuna




