~/.npm、$PROJECT/node_modules 和 /usr/lib/node_modules 之间的区别是什么?

4

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

其他答案在此处已经说明使用-g进行全局安装应默认安装到您的主目录中,但是对于我来说,它会将其安装到/usr/lib/node_modules,我做错了什么吗?

当我进行没有-g的本地安装时,它会安装到当前目录$PROJECT/node_modules。所有这些位置之间有什么区别,应该放在哪里?


https://npmjs.org -> docs -> 配置 npm -> 文件夹 (https://docs.npmjs.com/files/folders) - try-catch-finally
1个回答

3
系统范围的软件包安装目录通常位于/usr/lib下,通常用于全局安装的软件包,其中提供应该在您的PATH中可用的二进制文件(以便可以从任何位置执行它)。
本地安装目录node_modules由在执行npm的位置处使用npm install创建,通常位于项目目录中,并且通常用于项目特定的依赖项。 ~/.npm包含已下载的软件包。在另一个位置安装相同的软件包时,npm首先会在缓存目录中查找该软件包。
参考:https://docs.npmjs.com/files/folders 相关文件:
- .npmrc - 不同位置的NPM配置 - package.json - 项目的软件包及其版本
假设场景:两个使用Grunt(基于JavaScript的构建脚本工具)的项目:
这两个项目使用不同的Grunt版本。一个项目较旧。无法更新Grunt而不必适应整个构建过程,另一个项目刚刚开始。
您必须使用-g标志系统范围内安装“grunt-cli”,因为它提供了grunt二进制文件。该CLI二进制文件将在当前项目目录中查找本地的“grunt”。另一方面,局部安装(没有-g)的“grunt”npm将由CLI引导。第一个项目下载grunt时,npm将存储已下载的软件包在~/.npm中;当为第二个项目安装grunt时,npm将首先在两个项目中都有的软件包中查找~/.npm
还有其他原因要全局安装软件包,最常见的是它们提供应该位于您的PATH中的二进制文件。
或者,某些通常需要全局安装的软件包也可以在本地安装。然后,您将不得不将该二进制文件的路径(例如path/to/your/node_modules/.bin/<BINARY>)添加到PATH变量或仅指定完整执行路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接