NPM顺序执行命令时如何在某条命令失败后仍运行后续所有命令
npm脚本执行失败仍运行后续命令的解决方法
你可以根据运行环境选择以下任意方案实现需求:
方案1:类Unix环境(Linux/macOS)原生实现
直接利用shell的命令执行规则修改脚本即可:
"test": "npm run init && (npm run test; npm run end)"
如果需要保留test命令的退出状态(方便CI、流程校验等场景识别测试是否失败),可以使用以下写法:
"test": "npm run init && npm run test; test_code=$?; npm run end; exit $test_code"
- 逻辑说明:shell中
;作为命令分隔符时,无论前一条命令执行成功还是失败,都会按顺序执行后续命令。第二种写法会先保存test命令的退出码,执行完end脚本后再返回该退出码,不会掩盖测试失败的状态。
方案2:跨平台兼容实现
如果需要同时兼容Windows、Linux、macOS环境,推荐使用跨平台的脚本执行工具:
- 首先安装
npm-run-all作为开发依赖:
npm install npm-run-all --save-dev
- 修改npm脚本配置:
"test": "run-s init test end --continue-on-error"
- 逻辑说明:
run-s是npm-run-all提供的串行执行命令的工具,--continue-on-error参数会强制跳过中间命令的错误,执行完全部预设命令。
重要提示:你当前给出的脚本存在递归调用问题,
test脚本内部又执行了npm run test会触发无限循环,建议把实际执行测试逻辑的脚本单独命名为test:run之类的名称,避免递归。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

