NPM执行tsc构建始终返回退出码0,Yarn却能正确报错
排查方向
- 检查npm版本:不同npm版本对脚本退出码的处理存在差异,尤其是npm 6及更早版本可能出现脚本报错但返回0的情况,建议升级到npm 7+稳定版本测试。
- 验证tsc的退出码:直接在终端执行
tsc命令,执行完后立刻输入echo $?查看返回值。如果手动执行tsc返回非0,但npm run build返回0,说明npm的脚本处理逻辑存在问题。 - 排查package.json脚本语法:确认build脚本是否有隐藏特殊字符或语法异常,可临时将脚本改为
"build": "tsc && echo 'build success'",若tsc报错后仍输出build success,说明npm未正确捕获tsc的错误退出码。 - 检查npm配置:执行
npm config get ignore-scripts,若值为true会影响脚本错误捕获;另外查看npm config get script-shell,确认使用的shell是否存在吞掉退出码的情况(比如Windows环境下的部分shell)。 - 排查npm钩子脚本:查看项目是否有
prebuild/postbuild这类钩子脚本,是否存在钩子脚本执行exit 0覆盖tsc退出码的情况,可临时移除所有钩子脚本测试。 - 检查tsconfig.json配置:确认是否设置了
noEmitOnError: false,虽然该选项默认不会影响退出码,但极端情况下可能导致异常,改为noEmitOnError: true重试。
内容的提问来源于stack exchange,提问作者ben
相关产品推荐
相关产品推荐

