3

我已经使用 -g 在全球范围内安装了大部分 NPM 模块

但是,我看到每当我使用 Yeoman 创建一个新的应用程序项目(例如:角度项目)时,我都会看到 npm 模块再次下载并安装在本地 node_modules 文件夹中。

我认为为每个新项目下载和复制相同的模块是非常浪费的。每个新项目的大小约为 160MB。

有没有办法只下载全局 npm node_modules 文件夹中尚不可用的新项目中的本地模块?说,无论如何要自动创建从本地 node_modules 文件夹到全局安装的 npm 模块的符号链接?

这可能吗?如何设置?

4

2 回答 2

1

这实际上是设计使然。来自Node.js 博客

一般来说,经验法则是:

1.如果你正在安装你想在你的程序中使用的东西,使用 require('whatever'),然后在本地安装它,在你的项目的根目录下。

2.如果您要在 shell、命令行或其他地方安装要在 shell 中使用的东西,请全局安装它,以便它的二进制文件最终出现在您的 PATH 环境变量中。

在本地安装项目依赖项对您来说很重要,因为您无法保证在您的机器上全局安装的内容可能在部署机器上可用。诚然,您可以管理两台机器,或者它们实际上可能是同一台机器,但这种情况永远无法保证。

此外,您拥有依赖特定版本的 npm 的项目并不罕见,您可能已经为全局安装了更新,从而破坏了需要旧版本的项目。隔离是保持项目正常运行的关键。

如果您真的只需要维护一份副本,则可以使用符号链接。npm link globalnpm

全局安装它,然后 npm link coffee-script 或 npm link express (如果您在支持符号链接的平台上)。然后您只需要更新全局副本即可更新所有符号链接。

请注意,符号链接选项实际上只与手动初始化的项目相关;像 Yeoman 这样的生成器将始终使用本地生成器,因为它们遵循谷物。

于 2014-12-02T22:53:23.730 回答
0

有一些变通方法,但这是为了避免等同于 DLL 地狱或特别是库版本控制不匹配崩溃。除了 160 MB 之外,为这种奢侈付出的代价是微不足道的。离散功能的捆绑包作为一个善良的单位运输要好得多 - 相信我

于 2014-12-02T22:39:52.233 回答