我安装了npm,当我第一次sudo npm install some-package -g
时,它按照我的预期将该软件包安装到/ usr / lib / node_modules,但是它还在〜/ .npm中创建了几个文件。这些地点之间有什么区别?
此处的其他答案表示使用-g
的全局安装默认情况下应将其安装到您的主目录,但对我来说它会将其安装到/ usr / lib / node_modules,我做错了什么?
当我在没有-g
的情况下进行本地安装时,它将安装到当前目录$ PROJECT / node_modules。所有这些地点之间的区别是什么,应该去哪里?
答案 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
变量,或者只指定完整的执行路径。