Skip to content

npm run和npx执行bin中的命令

问题

我通过npm i -D http-server 安装 http-server ,为什么我在命令行中输入 http-server 无法执行

原因

我只是本地安装的http-server的包,并没有全局安装,所以直接在命令行输入 http-server ,系统无法在环境变量中找到改命令。

解决方案

  1. 如果你只是本地安装了 http-server,你需要在命令行中使用 npx http-server 来运行它,因为 npx 可以在本地安装的模块中查找可执行文件。

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