我刚刚来到这里,所以也许我没有得到什么。我知道npm可以在项目本地的npm_modules
目录中安装模块,或者使用--global
可以在机器范围的位置安装模块。
除了一些临时的便利之外,为什么要在全球范围内安装任何软件包?例如,我看到各种npm配置/设置执行全局安装的打字稿。但是如果我的机器上有5个项目,其中3个使用不同版本的打字稿,那就不好了......对吗?
我对包管理的经验来自Java / Maven世界,其中所有模块都安装在全局位置(〜/ .m2 / repository),但是引用ANYTHING(作为cmd / tool / plugin或作为依赖项)您需要指定版本号。因此,您可以获得两全其美的效果 - 消除重复的软件包安装和完全可重复的构建。我本以为npm会以自己的方式完成同样的事情。
我错过了什么?
答案 0 :(得分:8)
如果您正在使用多种工具来转换代码(Typescript,webpack,babel),并且您打算在本地使用不同的软件包并将它们链接在一起,我绝对不会建议在全球范围内安装,你会遇到很多困难更新任何全局组件。甚至webpack团队discourage全局安装第二个版本:
webpack命令现在可在全球使用。
但是,这不是推荐的做法。这会将您锁定到特定版本的webpack,并且在使用不同版本的项目中可能会失败。
答案 1 :(得分:5)
npm 1.0 release notes澄清了这个理由:
一般来说,经验法则是:
- 如果您要安装要在程序中使用的内容, 使用require(' what'),然后在本地安装它 你的项目。
- 如果您正在安装要使用的内容 您的 shell ,在命令行或其他东西上,全局安装,所以 它的二进制文件最终会出现在你的PATH环境变量中。
醇>
答案 2 :(得分:2)
Maven全局安装。它保持了本地"全球"存储库以防止必须为每个新构建下载所有内容,但每个项目都有自己的版本,您在其pom文件中定义了所有库。
对于npm,通常你会在全局范围内安装一些使用它的工具,比如grunt-cli和karma-cli,然后在每个项目的package.json中定义该项目的哪个版本需要哪些模块/库。