最近我试着用Yarn 安装我的 node 包.它工作得很好,比NPM快得多.Yarn 自动生成yarn.lock条Yarn .我们已经有了NPM收缩膜(npm-shrinkwrap.json).

他们之间有什么区别吗?

推荐答案

yarn.lock文件与其他包管理器的锁文件非常相似,尤其是Rust的Cargo package manager,它有Cargo.lock个锁.这些锁文件的 idea 是代表一组应该始终工作的一致的包.

npmpackage.json文件中存储依赖范围,这意味着当有人安装您的软件包时,他们可能会向您获取不同的依赖集,因为您可能正在运行过时的软件包(尽管它们仍然满足您指定的依赖范围).例如,有人指定了依赖项"foo": "^1.0.0".他们可能已经安装了foo v1.0.1,因为这是他们运行npm install时的最新版本,但后来,有人安装了您的包,并获得了依赖项foo v1.1.0. 这可能会意外地 destruct 某些东西,如果您有一个保证consistent package resolutionyarn.lock文件,这是可以避免的.

npm shrinkwrap相比,the documentation解释得非常清楚:

它类似于npm的npm收缩膜.然而,json并没有损耗,它可以创建可复制的结果.

该文档还建议,如果您还没有这样做,请将yarn.lock提交到您的存储库中,这样您就可以获得一致且可复制的包解析的好处.This question还进一步解释了为什么你应该这样做.

The lossy behaviour of npm shrinkwrap is due to the non-deterministic algorithms used by npm itself; as stated in the comments of another answer, npm shrinkwrap > npm install > npm shrinkwrap is not guaranteed to produce the same output as just shrinkwrapping once, whereas Yarn explicitly uses "an install algorithm that is deterministic and reliable".

Node.js相关问答推荐

使用Google Cloud控制台时,onCall方法在云功能中失败

Express 4.18正文解析

在Nest.Js中,如何发送带有表单数据的正文请求并应用正文请求验证.附加的文件是可选的

为什么在导出的函数中调用node-sqlite3中的数据库方法时不起作用?

通过PutObjectCommand上传AWS S3 PDF文件,结果为空PDF

运行本地移动自动化测试时,在onPrepare钩子中,ERROR @wdio/cli:utils: A service failed in the 'onPrepare'

与诗乃一起嘲笑奈克斯

运行 cypress 测试时如何指定 .env 文件用于我的开发服务器?

在 nodejs 中使用 multer 上传文件返回未定义的 req.file 和空的 req.body

Axios GET 返回不可读的响应

如何找到特定文档并更新数组中特定键的值?

将 AllowDiskUse true 添加到 node.js 中的 MongoDB 聚合?

try 在 Heroku 中部署 PRN 应用程序并获得 404

NodeJs 过滤掉目录异步

无法更新MongoDB中的文档:";伯森场';writeConcern.w';是错误的类型';数组'&引用;

提供静态文件到底是什么意思?

在 Node.js 中的两个不同进程之间进行通信

TypeError:请求路径包含未转义的字符,我该如何解决这个问题

nodejs:Ajax 与 Socket.IO,优缺点

promise 回调返回promise