npm install 不会先检查全局版本吗?

Doesn't npm install check for a global version first?

我刚刚设置了一个测试,并尝试 npm install express,即使 express 已经存在于我的系统中。令我惊讶的是,它没有使用全球版本,而是最终在本地重新安装了一个版本!?是不是应该使用全球版本...或者我应该每次都使用 -g ,即使我只想使用现有的全球版本。否则,在本地安装任何东西有什么意义!?

  • 如果你正在安装一些你想在你的程序中使用的东西,使用 require('whatever'),然后在本地安装它,在你的项目的根目录下。
  • 如果您正在安装您想要在 shell 中使用的东西,在命令行或其他东西上,请全局安装它,以便它的二进制文件最终出现在您的 PATH 环境变量中。

The first option is the best in my opinion. Simple, clear, explicit. The second is really handy if you are going to re-use the same library in a bunch of different projects

本地安装-

npm install moduleName

本地安装并保存在 package.json-

npm install moduleName --save

全局安装-

npm install moduleName -g

答案是"NO"。它不应该使用您的全球版本。

如果你想使用你的全球版本,那么你根本不需要执行npm install,因为它已经安装了。

如果你这样做,显然,你是在说 "I want to install it locally to my project"。不仅如此:"I want to install its latest version unless it is declared in my package.json with other explicitly specified version".

事实上,真正的问题是:到底为什么不想在本地安装项目的依赖项?要有更多的版本不匹配问题?

正如@anshuman_singh所说,最佳做法是总是做一个npm install --save.

当然,您可以使用全局安装的软件包。对于您将在几个小时左右后删除的快速测试代码可能很方便。

但是,无论如何:如果你没有非常困难磁盘或网络带宽问题,在本地安装所有依赖项将避免你以后太麻烦了

另一方面,将该模块上传到您的代码存储库也是一个坏主意(也许这是您试图避免的),因为对于不同版本的节点,如果不这样做,大多数本机模块将无法工作重建。但大多数 VCS 支持忽略不得上传的文件和/或目录。

例如,在git中(.git忽略文件):

**/node_modules

总结:

  • npm init(如果您还没有的话)。
  • npm install --save 用于所有项目依赖项。
  • npm install --save-dev 用于生产中不需要的依赖项(测试内容)。
  • 不要上传node_modules到你的VCS。
  • 新签出后:npm installnpm install --production(不安装开发依赖项)。
  • npm install -g 用于您将在控制台中使用的工具。

这样,您可以确保在生产(或其他开发环境)中每个包的版本完全相同。

最后,如果您想将某些软件包升级到最新版本,只需 运行:

npm install --save <pagkage_name>@latest.