关于npm scripts的困惑:fastify项目npm start可运行终端执行失败
为什么
npm start能运行fastify index.js但直接Shell执行不行? 这是个很常见的疑问,核心在于npm执行脚本时的环境变量处理逻辑,我给你一步步讲清楚:
npm会临时扩展你的PATH环境变量
当你运行npm start或者任何npm脚本时,npm会自动把项目根目录下的node_modules/.bin目录添加到当前执行环境的PATH最前面。而fastify作为你项目的本地依赖,安装后会在node_modules/.bin目录下生成一个可执行的fastify脚本(这是包的package.json里bin字段定义的)。所以npm执行脚本时,能直接找到这个命令并运行。直接Shell执行时PATH不包含本地bin目录
当你在bash里直接敲fastify index.js时,系统只会去你全局PATH环境变量里配置的那些目录找fastify可执行文件。而你的全局PATH里并没有包含当前项目的node_modules/.bin,自然就会提示-bash: fastify: command not found。验证小技巧
你可以在项目根目录试试执行这条命令:./node_modules/.bin/fastify index.js这时候就能正常启动服务了,因为你手动指定了
fastify可执行文件的相对路径,绕开了PATH的限制。额外提示
如果确实需要在全局Shell里直接用fastify命令,可以执行npm install -g fastify全局安装,但一般更推荐本地安装依赖——这样能保证不同项目使用各自需要的版本,避免版本冲突问题。
内容的提问来源于stack exchange,提问作者Moshe Shmukler
相关产品推荐
相关产品推荐

