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 install
或 npm install --production
(不安装开发依赖项)。
npm install -g
仅 用于您将在控制台中使用的工具。
这样,您可以确保在生产(或其他开发环境)中每个包的版本完全相同。
最后,如果您想将某些软件包升级到最新版本,只需 运行:
npm install --save <pagkage_name>@latest.
我刚刚设置了一个测试,并尝试 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 install
或npm install --production
(不安装开发依赖项)。 npm install -g
仅 用于您将在控制台中使用的工具。
这样,您可以确保在生产(或其他开发环境)中每个包的版本完全相同。
最后,如果您想将某些软件包升级到最新版本,只需 运行:
npm install --save <pagkage_name>@latest.