Angular生成Browser application bundle时能否运行lint并在出错时终止?
Angular打包时检测Lint错误并终止流程的实现方案
该需求完全可以实现,核心逻辑是让Lint校验步骤在打包流程前执行,利用Node脚本非0退出码会中断后续执行的特性实现终止逻辑。
方法1:修改package.json脚本(最简便方案)
直接调整打包命令的执行顺序,将ng lint放在ng build之前,两者用&&连接:
{ "scripts": { // 原有build命令替换为以下内容 "build": "ng lint && ng build", // 若需要开发服务启动时也先做Lint校验可新增该配置 "serve": "ng lint && ng serve" } }
- 原理:
ng lint在检测到错误时会自动返回非0的退出码,&&连接符要求前一条命令执行成功(退出码为0)才会执行后一条命令,只要存在Lint错误,打包流程就不会启动。 - 适用场景:所有版本的Angular CLI项目,无额外依赖,改动最小。
方法2:监听模式下实时校验+终止
如果你需要在ng serve的热更新过程中也实时校验Lint,报错就中断打包,可以配合ng lint --watch的特性实现:
- 先安装
concurrently工具用于同时启动多个监听进程:npm i concurrently -D - 修改package.json脚本:
{ "scripts": { "serve:lint": "concurrently \"ng lint --watch\" \"ng serve\" --kill-others-on-fail" } }
- 说明:
--kill-others-on-fail参数会在任意一个进程报错退出时,终止所有其他关联进程,只要Lint检测到错误,开发服务就会自动终止。
方法3:Angular CLI自定义Builder集成(适合深度定制场景)
如果你不想修改npm脚本,希望把Lint校验直接内置到Angular的构建生命周期里,可以使用@angular-builders/custom-webpack自定义构建流程,在构建的pre钩子中注入Lint校验逻辑,只要校验不通过就抛出错误终止构建。
内容的提问来源于stack exchange,提问作者Joe Malcom
相关产品推荐
相关产品推荐

