【问题标题】:Difference between ~/.npm, $PROJECT/node_modules, and /usr/lib/node_modules?~/.npm、$PROJECT/node_modules 和 /usr/lib/node_modules 之间的区别?
【发布时间】:2014-12-25 23:02:19
【问题描述】:

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

这里的其他答案说使用-g 的全局安装应该默认将其安装到您的主目录,但对我来说它将它安装到/usr/lib/node_modules,我做错了什么吗?

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

【问题讨论】:

标签: node.js npm


【解决方案1】:

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

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

~/.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 变量中,或者只指定完整的执行路径。

【讨论】:

    猜你喜欢
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    相关资源
    最近更新 更多