如何在Angular生产构建(ng build --prod)中禁用ng-test执行?
嘿,别担心,我来帮你理清楚这个问题!首先得明确一个核心点:默认情况下,ng build --prod本身并不会触发任何测试(包括Karma)的执行——Angular CLI的build和test是完全独立的命令,不会互相绑定。你遇到的问题大概率是CI/CD流程的配置问题,或者自定义脚本导致测试被连带执行了,下面一步步给你解决:
1. 先检查CI/CD的执行脚本
如果你的CI/CD环境里在执行ng build --prod的同时还跑了测试,那肯定是脚本里把npm test(或ng test)和构建命令写在一起了。比如:
// package.json里的scripts如果是这样 "scripts": { "build:prod": "npm test && ng build --prod" }
这种情况下,只要把&& npm test删掉,改成:
"scripts": { "build:prod": "ng build --prod" }
之后CI/CD里只执行npm run build:prod(或直接ng build --prod),就不会触发测试了。
2. 恢复.angular-cli.json的测试配置
你之前注释掉test配置段的操作其实没必要,而且可能会影响本地ng test命令的正常运行。test配置段是用来定义测试工具(比如Karma)的配置路径,不是控制build命令是否触发测试的开关,所以赶紧把那段配置恢复回来:
"test": { "karma": { "config": "./karma.conf.js" } },
这样本地需要跑测试时,直接执行ng test就能正常启动Karma了。
3. 本地开发时的便捷方案
如果你想在本地开发时,实现“先跑测试再构建生产版本”的逻辑,可以自定义一个npm脚本,在package.json里添加:
"scripts": { "build:prod:with-test": "ng test --watch=false && ng build --prod" }
之后本地需要测试后构建时,执行npm run build:prod:with-test即可;而CI/CD环境里依然只执行ng build --prod,完全不会触发测试。
额外说明(针对Angular 6+版本)
如果你的项目是Angular 6及以上,配置文件已经变成angular.json了,但逻辑是一样的:build和test是独立的targets,默认不会互相触发。只要CI/CD里只执行ng build --prod,就不会跑测试;本地需要测试时单独执行ng test即可。
内容的提问来源于stack exchange,提问作者Gautham Sowmynarayanan

