Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 为什么npm默认在本地安装模块?_Node.js_Angularjs_Npm - Fatal编程技术网

Node.js 为什么npm默认在本地安装模块?

Node.js 为什么npm默认在本地安装模块?,node.js,angularjs,npm,Node.js,Angularjs,Npm,我对节点/角度世界(来自Ruby)是新手,我只是想知道 为什么npm默认在项目中本地安装模块? 我使用了yeoman.io和mean.io创建了两个独立的项目,在这两种情况下,它们最终都会在项目的节点模块目录中添加一大堆文件夹,用于grunt、karma和express等内容。我知道您可以将文件夹添加到.gitignore,但这并不能改变一个事实,即您的计算机上可能会有一大堆相同库的重复实例 为什么默认情况下会将包添加到本地项目目录?有没有办法强制npm在默认情况下全局安装而不是本地安装 注意:

我对节点/角度世界(来自Ruby)是新手,我只是想知道

为什么npm默认在项目中本地安装模块?

我使用了yeoman.io和mean.io创建了两个独立的项目,在这两种情况下,它们最终都会在项目的
节点模块
目录中添加一大堆文件夹,用于grunt、karma和express等内容。我知道您可以将文件夹添加到.gitignore,但这并不能改变一个事实,即您的计算机上可能会有一大堆相同库的重复实例

为什么默认情况下会将包添加到本地项目目录?有没有办法强制npm在默认情况下全局安装而不是本地安装


注意:在Ruby世界中,
gem
(相当于
npm
)通过自动生成“锁文件”来跟踪安装的特定版本。这使得人们可以完全控制每个项目依赖项的哪个版本。我开始怀疑npm没有在全球范围内安装的唯一原因是否是因为它没有一个“锁定文件”来跟踪应用程序正在使用的特定颠覆。

在npm开发的早期,有很多关于这方面的讨论。人们希望避免他们在使用Ruby、Perl等时遇到的版本不兼容问题。最后,人们简单地决定,最简单的解决方案是根本没有全局库路径,而是让每个应用程序都有自己的库路径

这种策略其实并不新鲜。许多企业/任务关键型Ruby、Perl和Python安装都使用带有自定义库路径的自定义编译解释器。长期以来,标准建议一直是,如果你真的不希望客户或操作系统发行版意外破坏你的应用程序,最可靠的技术就是不要使用标准安装库

Npm将此作为默认配置。当人们问到“为什么?”时,开发人员回答说,这是最简单的解决方案,在当今廉价的TB级硬盘世界中,传统的处理方式没有任何优势


我个人不会改变npm的默认工作方式,即使我最初是支持共享库实现的人之一。节点模块作者假设默认配置就是您拥有的配置,因此不怕对其API进行破坏性更改。

注意,
npm
没有具有特定应用程序版本的锁文件,而是具有设置特定或与semver兼容的版本的
package.json
,如果lib遵循semver.Wow,就可以自动升级。这完全回答了问题。谢谢Maven(Java)将库的不同版本存储在用户机器上的同一目录中,因此在多个项目中使用给定库的同一版本不会导致多个目录包含该库的代码。的确,磁盘空间现在很便宜,但仍然..@JohnDonn:Maven这样做了,但Java通常也会为每个应用程序安装一个库。我不是说开发库。我说的是编译库,Java通常包括jar中的所有库。类似于node.js的工作方式