我无意中在一个使用Thread的项目中运行了npm install,并注意到npm创建了一个package-lock.json文件.

我知道Thread之所以大受欢迎,部分是因为它使用了锁文件来生产比npm更可靠、更确定的依赖性安装,npm一度只有shrinkwrap feature个,但现在我不确定如何利用这个npm锁文件业务,以及继续使用Thread是否有什么令人信服的地方.

因此,本着previous Q and A on StackOverflow on yarn vs shrinkwrap美元的精神,我提出以下问题:

  • 这两个包管理器在可靠性方面是否还有实质性差异?
  • 如果没有,除了"更多表情符号",还有什么令人信服的理由继续使用Yarn 吗.?"?

推荐答案

在纸上,Yarn 和NPM 5看起来几乎相当.它们都有确定性的锁文件,并且在功能上几乎相互匹配.有人会说,Yarn 是NPM创新的催化剂.

然而,在经历了一个月的NPM 5之后,我的团队决定转向Yarn .

NPM技术上有一个"更具确定性"的锁定文件,因为理论上可以保证,在NPM的各个版本中,NPM将生成完全相同的node_modules个文件夹.另一方面,Yarn 依赖项的精确提升/订购取决于Yarn 版本,并且可能会在不同Yarn 版本之间发生变化.一般来说,这几乎没有影响.

那为什么要用Yarn 呢?合并及;可靠性

Yarn 进行了轻微的决定论权衡,以实现更简单、更易于合并的yarn.lock文件.如果你是一个单独的开发人员,这可能不会影响你,但如果你所在的团队中有多个合作者提交依赖关系更改,这很快就会成为一个巨大的问题.NPM的package-lock实际上是不可合并的,你最终不得不重新生成或挣扎.另一方面,对于Yarn ,合并是容易预测的.

见:https://yarnpkg.com/blog/2017/05/31/determinism/

另外,我们还发现Yarn 的平均可靠性更高.

Node.js相关问答推荐

MongoDB-$Lookup未获得适当的结果

使用Node.js中的";类型";:";模块";不导入文件

如何呈现ejs.renderFile中包含的子模板?

在函数上执行 toString 的Typescript 会产生奇怪的字符 (path_1, (0, Promise.writeFile))

Puppeteer 的 BrowserFetcher 发生了什么?

如何模拟 mysql2 `getConnection`

如何在nodejs中打印pdf

Solidity 将数据位置从内存更改为存储

如何从动态Typescript 文件加载模块

使用mongoose 创建新文档并仅取回选定的字段

使用 .pipe(res) 向客户端发送音频不允许您搜索?

AJAX 和 Node JS:在我的服务器中接收空数据

如何在 node.js 环境中从 WebAssembly (Rust) 调用异步 JavaScript 导入函数?

我们如何或可以通过 npm 和 Meteor 使用 node 模块?

__dirname 未在 Node 14 版本中定义

Route.get() 需要回调函数,但得到对象未定义

如何使用 cookie 创建 HTTP 客户端请求?

如何判断MongoDB本机nodejs驱动程序中是否存在集合?

yarn 和 npm 的主要区别是什么?

Npm postinstall 仅用于开发