运行npm run build提示node_modules不是内部或外部命令如何解决
问题产生原因
在Windows系统cmd环境下执行npm脚本出现该报错,核心原因有两点:
- cmd默认使用反斜杠
\作为路径分隔符,脚本中编写的Unix风格正斜杠路径node_modules/.bin/tsc无法被cmd正确解析,执行时会将路径截断,把node_modules识别为待执行的命令名,最终抛出找不到对应程序的报错。 - npm执行
scripts字段下的命令时,会自动将项目本地node_modules/.bin目录加入当前进程的环境变量PATH搜索路径,本身不需要书写bin命令的完整路径,写全路径反而会触发跨系统路径不兼容的问题。
修复方法
按照优先级推荐以下方案:
- 最优方案(跨平台兼容):直接修改package.json里的build脚本配置,去掉冗余的全路径前缀,直接调用tsc命令即可,npm会自动匹配本地安装的typescript依赖,修改后scripts段配置如下:
修改后重新执行"scripts": { "start": "npm run build && cd dist && node app", "build": "tsc" },npm run build即可正常编译,该写法在Windows、macOS、Linux系统下均可正常运行。 - 仅适配Windows cmd的临时方案:如果坚持要写全路径,需要把路径里的正斜杠全部替换为cmd支持的反斜杠,即把build脚本改为
node_modules\.bin\tsc,但该写法在类Unix系统下会执行失败,不推荐使用。 - 异常兜底处理:如果修改配置后仍然报错,先删除项目下的
node_modules目录和package-lock.json文件,重新执行npm install完成依赖安装后再尝试构建,排除依赖安装缺失、文件损坏导致的异常。
内容的提问来源于stack exchange,提问作者Mohammad Dayarneh
相关产品推荐
相关产品推荐

