Angular 15升级至16时ESBuild被拦截,如何跳过ESBuild完成升级?
为什么升级时会启动ESBuild.exe?
Angular 16将ESBuild设为默认构建工具,ng update命令在升级过程中会自动执行验证构建步骤,确保依赖安装完成后项目能正常构建,这个过程会调用ESBuild的二进制文件(ESBuild.exe),因此被ThreatLocker拦截导致升级失败。
无需运行ESBuild完成升级的方法
方法1:手动修改依赖并安装(完全跳过ng update的自动流程)
修改package.json中的版本号
将所有Angular核心包的版本统一改为16.x的稳定版(例如16.2.14,建议选16系列的最新补丁版),同时调整兼容的依赖版本:@angular/core、@angular/cli、@angular/common等所有@angular/开头的包:改为16.x.x@angular-devkit/build-angular:改为对应16.x的版本(与@angular/cli版本一致)typescript:改为5.0.x或5.1.x(Angular 16要求TypeScript 5.0-5.1)zone.js:改为0.13.x(兼容Angular 16的版本)- 其他非Angular依赖可暂时保持当前版本,后续再单独升级
清理旧依赖文件
删除项目根目录下的node_modules文件夹和package-lock.json(如果用yarn则删除yarn.lock)安装新依赖
执行命令:npm install此过程仅安装依赖包,不会触发构建操作,因此不会启动ESBuild.exe。
手动同步Angular配置
升级完成后,检查angular.json文件:如果需要继续使用Webpack而非ESBuild,将projects.[你的项目名].architect.build.builder修改为:"@angular-devkit/build-angular:browser-webpack"这样后续执行
ng serve或ng build时会使用Webpack构建,避免触发ESBuild。
方法2:使用ng update的跳过验证参数
直接执行带--skip-verify参数的升级命令,跳过升级后的验证构建步骤,从而避免启动ESBuild.exe:
ng update @angular/core@16 @angular/cli@16 --skip-verify
该命令会自动更新package.json并安装依赖,但不会运行构建验证,因此不会触发ESBuild。
后续注意事项
如果后续需要使用ng serve或ng build,要么联系IT临时解除ESBuild.exe的拦截,要么按照方法1的步骤切换回Webpack构建,否则构建命令仍会触发ESBuild.exe。
内容的提问来源于stack exchange,提问作者browsermator

