自从版本5以来,npm
package-lock.json
的“锁定文件”,与yarn(或任何其他)锁定机制类似,可以修复您的整个依赖树,--save
现在被隐含在npm i
中,npm 5.7.0 进一步引入npm ci
命令,通过仅安装package-lock.json
中找到的软件包(如果package-lock.json
和package.json
不同步,则报告错误),可以更快地在持续集成环境中安装依赖项。
个人而言,我仍然使用npm
。
我不太愿意直接引用文档,但它们确实很好地解释了为什么,足够简洁,以至于我不知道如何进一步概括这些想法。
主要有:
在每台开发机器上,您始终知道正在获取相同的东西
它并行执行npm
无法执行的操作,以及
它更有效地利用网络。
它还可以更有效地使用其他系统资源(例如RAM)。
人们对此的生产经验是什么?谁知道,它对大众来说还是个婴儿。
--flat
选项,它强制使用真正的平面结构,只允许安装每个依赖项的一个版本,但默认行为是什么?谢谢。 - Dimitris Karagiannis为初学者提供更好的概述。
npm 是JavaScript历史上(2010年)最受欢迎的包管理器。如果你想使用它来管理项目的依赖项,你可以输入以下命令:
npm init
package.json
文件,其中包含项目的所有依赖项。
然后,npm install
会创建一个名为node_modules
的文件夹,并下载里面添加到package.json
文件中的依赖项。
还将创建一个package-lock.json
文件。该文件用于描述生成的依赖树。它允许开发人员安装完全相同的依赖项。例如,您可以想象一个开发人员将依赖项升级到v2,然后再升级到v3,而另一个开发人员直接升级到v3。
npm以非确定性方式安装依赖项,这意味着两个开发人员可能有不同的node_modules
目录,导致行为不同。 **例如,在2018年2月,版本5.7.0中发现了一个问题:在Linux系统上运行sudo npm将更改系统文件的所有权,从而永久破坏操作系统。
为了解决这些问题等其他问题,Facebook推出了一个新的包管理器(2016):Yarn,一个更快、更安全和更可靠的JavaScript包管理器。
您可以通过键入以下内容将Yarn添加到项目中:
yarn init
这将创建一个package.json
文件。然后,使用以下命令安装依赖项:
yarn install
将生成一个名为node_modules
的文件夹。 Yarn还将生成一个名为yarn.lock
的文件。此文件与package-lock.json
具有相同的目的,但是使用确定性和可靠的算法构建,从而导致一致的构建。
如果您使用npm启动了项目,实际上可以轻松迁移到Yarn。yarn将使用相同的package.json
。有关更多详细信息,请参见从npm迁移。
但是,npm在每个新版本中都得到改进,某些项目仍然使用npm而不是yarn。
pnpm
使用硬链接和符号链接,在磁盘上只保存一个模块的一个版本。例如,如果您有100个项目都使用相同版本的lodash,使用npm或Yarn等工具,您将在磁盘上拥有100个lodash的副本。而使用pnpm,lodash将只保存在磁盘上的一个位置,并且通过硬链接放置到应该安装它的node_modules中。
因此,您可以节省磁盘空间并实现更快速的安装!如果您想了解有关pnpm创建的独特node_modules结构以及为什么它可以很好地与Node.js生态系统配合使用的更多详细信息,请阅读这篇小文章:为什么我们应该使用pnpm?
npm install -g pnpm
pnpm install -g typescript // or your desired package
PNPM
相较于Yarn
和NPM
的优势这里有一个进度条,显示NPM
、YARN
和PNPM
的安装时间(更短的条形图更好)
欲了解更多详情,请访问https://www.npmjs.com/package/pnpm
@msanford的答案几乎涵盖了所有内容,但我想补充一下安全性(OWASP已知漏洞)部分。
Yarn
您可以使用yarn audit
检查它们,但您无法修复它们。这仍然是GitHub上的一个未解决问题(https://github.com/yarnpkg/yarn/issues/7075)。
npm
您可以使用npm audit fix
修复其中的一些漏洞。
这两个工具,即npm audit
和yarn audit
都有自己的持续集成工具。它们分别是https://github.com/IBM/audit-ci(已使用,效果很好!)和https://yarnpkg.com/package/audit-ci(未使用)。
npm:
Yarn:
https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/
就速度和性能而言,Yarn比NPM更好,因为它可以执行并行安装。Yarn仍然比NPM更安全。但是,Yarn使用的磁盘空间比NPM多。
yarn upgrade-interactive
。以前需要手动安装,但现在这个核心插件已经内置了。它有一个很棒的CLI界面,可以让您选择更新版本,可能升级到依赖项的新主要版本。在npm中,没有这样的命令。最接近的NPM等效命令是第三方包npm-check-updates
,需要手动安装。
NPM有 npm link
命令,实际上是有效的。它允许您将本地包(通常是库)“安装”到其他使用它的本地项目中进行测试。众所周知,这个命令在yarn中存在问题或无法工作。