〜/ .npm,$ PROJECT / node_modules和/ usr / lib / node_modules之间的区别?

时间:2014-12-25 10:19:18

标签: node.js npm

我安装了npm,当我第一次sudo npm install some-package -g时,它按照我的预期将该软件包安装到/ usr / lib / node_modules,但是它还在〜/ .npm中创建了几个文件。这些地点之间有什么区别?

此处的其他答案表示使用-g的全局安装默认情况下应将其安装到您的主目录,但对我来说它会将其安装到/ usr / lib / node_modules,我做错了什么?

当我在没有-g的情况下进行本地安装时,它将安装到当前目录$ PROJECT / node_modules。所有这些地点之间的区别是什么,应该去哪里?

1 个答案:

答案 0 :(得分:2)

系统范围的软件包安装目录(通常位于/usr/lib下)通常用于全局安装的软件包,这些软件包提供应在PATH中可用的二进制文件(以便能够从任何地方执行)。

node_modules在您执行npm install的位置创建的本地安装目录npm通常位于项目目录中,通常用于项目特定的依赖项。 / p>

~/.npm包含已下载的软件包。在另一个位置安装相同的软件包时,npm将首先在该缓存目录中查找该软件包。

参考:https://docs.npmjs.com/files/folders

相关文件:


假设情景:使用Grunt的两个项目(基于Javascript的构建编写工具):

两个项目都使用不同的Grunt版本。一个项目比较旧。在不必调整整个构建过程的情况下,Grunt无法更新,另一个项目刚刚开始。

您必须在系统范围内安装“grunt-cli”(使用-g标志),因为它提供了grunt二进制文件。此CLI二进制文件将在当前项目目录中查找本地“grunt”。另一方面,本地安装的“grunt”npm(没有-g)将由CLI引导。当为第一个项目下载grunt时,npm会将下载的包存储在~/.npm中,当为第二个项目安装grunt时,npm将首先在~/.npm中查找两个项目共有的包。

在全球范围内安装软件包还有其他原因,它们提供的二进制文件大多数时间都应位于PATH中。


或者,一些通常需要全局安装的软件包也可以在本地安装。然后,您必须将该二进制文件的路径(例如path/to/your/node_modules/.bin/<BINARY>)添加到PATH变量,或者只指定完整的执行路径。