我是Node / Angular世界的新手(来自Ruby),我只是想知道......
为什么npm默认在项目中本地安装模块?
我已经使用yeoman.io和mean.io来创建两个单独的项目,在这两种情况下,他们最终都会在项目的node_modules
目录中添加一大堆文件夹。咕噜咕噜和业力,表达和所有的东西。我知道您可以将文件夹添加到.gitignore,但这并没有改变您可能会在计算机上放置相同库的大量重复实例的事实。
为什么默认情况下将包添加到本地项目目录?有没有办法强制npm默认安装全局而不是本地安装?
注意:在Ruby世界中,gem
(相当于npm
)通过自动生成"锁定文件"来跟踪安装了哪个特定版本。这允许人们完全控制基于每个项目的依赖项的版本。我开始怀疑npm不能全局安装的唯一原因是因为它没有"锁定文件"跟踪应用正在使用哪些特定的颠覆。
答案 0 :(得分:6)
在npm开发的早期,有很多关于此的讨论。人们希望避免使用Ruby,Perl等经历的版本不兼容问题。最后,我们简单地认为最简单的解决方案是根本没有全局库路径,但每个应用程序都有自己的库路径。 / p>
这种策略实际上并不新鲜。许多关于Ruby,Perl和Python的企业/任务关键安装使用自定义编译解释器和自定义库路径。很长一段时间,标准建议是,如果你真的不希望客户或操作系统发行版意外破坏你的应用程序,最强大的技术是不使用标准安装的库。
Npm将此作为默认配置。当人们问“为什么?”时,开发人员回答说这是最简单的解决方案,传统的做事方式在当今廉价的TB级硬盘世界中没有任何优势。
我个人不会改变npm工作的默认方式,即使我原本是那些主张共享库实现的人之一。节点模块作者假设您拥有默认配置,因此不怕对其API进行重大更改。