NPM start命令在CMD正常运行,Bash终端提示Node未识别
问题诊断与解决方案
问题场景
开发MERN栈TODO应用时,Express服务器代码正常,package.json的启动脚本配置为:
"scripts": { "start": "nodemon src/index.js" }
在CMD终端执行npm run start可正常启动,但在Bash终端执行时出现报错:
>server@1.0.0 start >nodemon src/index.js node' is not recognized as an internal or an external command, operable program...
且Bash终端中直接运行node -v可正常返回版本号。
可能根源
npm运行脚本时会使用自身配置的shell环境,该环境未正确加载Node.js的路径;或全局安装的nodemon在npm脚本的环境上下文里无法被正确识别。
解决方案
1. 修正npm的shell配置
查看npm默认使用的shell:
npm config get script-shell
若返回结果为cmd.exe,说明npm在Bash环境下仍调用CMD的shell,可将其改为bash(路径需匹配你的Bash实际安装位置,以Git Bash为例):
npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe"
2. 局部安装nodemon并调用
全局安装的nodemon可能存在路径识别问题,优先在项目内局部安装:
npm install nodemon --save-dev
修改package.json的启动脚本,使用npx调用局部nodemon:
"scripts": { "start": "npx nodemon src/index.js" }
或直接指定局部nodemon的路径:
"scripts": { "start": "./node_modules/.bin/nodemon src/index.js" }
3. 重新加载Bash环境变量
若使用Windows下的Git Bash,尝试重新加载环境变量后再运行npm:
source ~/.bashrc npm run start
若使用WSL的Bash,确保Node.js是安装在WSL环境内,而非Windows系统的Node.js,避免跨环境路径冲突。
4. 直接指定Node.js绝对路径
若以上方法无效,可在启动脚本里直接写入Node.js的绝对路径(路径需匹配你的实际安装位置):
"scripts": { "start": "\"C:\\Program Files\\nodejs\\node.exe\" ./node_modules/.bin/nodemon src/index.js" }
验证
完成上述调整后,在Bash终端重新执行npm run start,即可正常启动nodemon与Express服务器。
内容的提问来源于stack exchange,提问作者Nevid Rahal
相关产品推荐
相关产品推荐

