npm run和npx执行bin中的命令
问题
我通过npm i -D http-server
安装 http-server
,为什么我在命令行中输入 http-server
无法执行
原因
我只是本地安装的http-server的包,并没有全局安装,所以直接在命令行输入 http-server
,系统无法在环境变量中找到改命令。
解决方案
如果你只是本地安装了
http-server
,你需要在命令行中使用npx http-server
来运行它,因为npx
可以在本地安装的模块中查找可执行文件。在
package.json
文件中的script
中添加一行命令,如:serve:http-server
。
当你把
http-server
命令写入package.json
中的scripts
字段时,npm
会在执行脚本时自动查找并使用本地安装的模块。这是因为 npm 会在执行脚本时自动将node_modules/.bin
目录添加到环境变量PATH
中,以便在脚本中执行的命令可以找到并运行本地安装的模块。所以,当你执行npm run server
命令时,npm
会自动查找并运行本地安装的http-server
模块,而不需要你在命令行中使用npx
命令。
这里的添加到环境变量PATH中的意思是会永久添加吗
不是永久添加,而是在执行脚本时临时添加到环境变量 PATH
中。在执行脚本结束后,这个临时添加的路径就会被移除。
具体来说,当你执行 npm run serve
命令时,npm
会在执行脚本前,将 node_modules/.bin
目录添加到环境变量 PATH
中。这样,在执行脚本时,系统就能找到并运行本地安装的模块了。
当脚本执行结束后,npm
会自动移除它添加的路径,以确保环境变量 PATH
的完整性。