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 的完整性。