npm脚本运行tsc watch模式报tsconfig解析错误,终端执行tsc -w运行正常
异常根因
两种执行场景调用的tsc程序根本不是同一个,叠加错误安装的废弃同名包,就出现了手动执行正常、npm脚本执行报错的现象:
- npm的脚本执行逻辑有固定的可执行文件检索优先级:运行自定义脚本时,会优先扫描当前项目下
node_modules/.bin路径内的命令,匹配到同名可执行文件后就停止检索,不会继续调用系统全局环境的程序;而你直接在终端手动敲tsc -w时,系统会直接匹配全局安装的可执行文件,两个路径指向的程序完全不同。 - 你在
devDependencies中安装的tsc@^1.20150623.0并非微软官方维护的TypeScript编译器,只是一个2015年就停止维护的同名占位废弃包。这个包仅支持解析无注释的纯标准JSON,完全不具备TypeScript官方为tsconfig.json设计的注释兼容能力——碰到配置文件里代表注释开头的/*斜杠(也就是报错信息提到的JSON解析位置31),就会抛出"Unexpected token /"的解析错误。 - 你全局环境安装的是官方TypeScript编译器,本身支持读取带注释的tsconfig.json,所以手动执行命令时可以正常完成编译流程。
修复步骤
- 卸载错误安装的废弃占位包:执行
npm uninstall tsc --save-dev - 无需重复安装官方TypeScript:项目依赖中已经引入了
typescript@^4.2.4,该包安装完成后会自动在node_modules/.bin目录下生成对应版本的官方tsc可执行文件,npm脚本执行时会正确匹配到这个官方程序。 - 重新运行编译脚本即可,注意npm执行自定义脚本需要带上
run关键字,完整启动监听模式的命令为npm run watch。
内容的提问来源于stack exchange,提问作者Sailesh R
相关产品推荐
相关产品推荐

