Javascript 纱线和npm的主要区别是什么?

Javascript 纱线和npm的主要区别是什么?,javascript,node.js,npm,yarnpkg,Javascript,Node.js,Npm,Yarnpkg,我想问你最喜欢的JS包管理器是什么? 我看了一些关于纱线和npm的文章。但我不确定什么对我更有利。我刚开始学习JS 现在,对我来说,纱线和npm之间的差异就像可乐品牌之间的差异一样。有时我们只有npm,但它在解决依赖项和缓存方面有太多问题,于是另一个工具诞生了(纱线)。通常,它使用本地缓存来解决依赖关系,例如,在运行几乎总是在同一环境中运行的CI作业时,这是至关重要的,而且高带宽的成本与您在云服务中购买数据的成本相当。这意味着在旧的npm版本中,当您运行npm安装并且在deps中有let时 第一

我想问你最喜欢的JS包管理器是什么? 我看了一些关于纱线和npm的文章。但我不确定什么对我更有利。我刚开始学习JS


现在,对我来说,纱线和npm之间的差异就像可乐品牌之间的差异一样。

有时我们只有
npm
,但它在解决依赖项和缓存方面有太多问题,于是另一个工具诞生了(
纱线
)。通常,它使用本地缓存来解决依赖关系,例如,在运行几乎总是在同一环境中运行的CI作业时,这是至关重要的,而且高带宽的成本与您在云服务中购买数据的成本相当。这意味着在旧的
npm
版本中,当您运行
npm安装
并且在deps中有let时

第一个音符 请理解,
warn
构建在
npm
包的顶部,这意味着它们都使用
npm
注册表来解析包。因此,如果运行
npm安装lodash@1.0.0.
纱线添加lodash@1.0.0.
您将得到非常相同的结果

增量安装 在每个新版本中,这两个依赖项都会再次从internet下载。Thread在下面使用
warn.lock
,它将您的
package.json
文件与
warn.lock
进行比较,并确定需要额外获取哪些包才能增量安装新的依赖项

多线程
warn
提供了不依赖于线程的并行安装包。它可以将安装时间从
npm安装时间减少到1/10

版本锁定 如前所述,
spirn
在每次安装后生成
spirn.lock
,这将持久化已安装软件包的所有版本(正如您可能知道的,软件包可以有依赖项,依赖项也可以有自己的依赖项),因此它可以建立无限的依赖项树,从而导致非常严重的冲突。让我们想象一下这个场景

 - lodash^1
 - super_module@0.0.1
 - - lodash@1.0.0
 - another_module@0.0.01
 - - lodash@1.x.x
想象一下,当另一个模块的维护人员决定让lodash破坏版本
1.2.0
时,可能发生的情况是,
npm
在过去可以获取同一个库的两个不同实例和两个不同版本,这可能会导致极其奇怪的行为。因为你的模块中没有精确的锁(您接受任何semver版本^1.x.x和^2.x.x,这意味着这两个子模块将满足您的要求,但获取不同的版本。Thread将锁定您的
Thread。在向项目中添加新包时锁定
,这意味着当您项目中的其他开发人员签出项目时,他也将拥有相同的
Thread.loc。)k
Thread
最终将“模拟”您提交
Thread时安装的软件包状态。另一方面,锁定
NPM
只需满足semver的要求,就可以为两个开发人员获取两个不同的版本(假设及时升级软件包)

最后说明
随着
npm
发布
npm@5
我认为所有的陈述现在都只是创建
纱线的原因,以及它当时解决了哪些问题,但我认为目前,这两个问题之间没有太大区别

我在其他地方回答了类似的问题几天前,只是巧合,没有从任何地方复制:)@Epasarello是的,是的,事情就是这样……这并不意味着当一个人拥有140k的声誉时,其他人必须创建一个+15声誉的帐户……你可以比较ISP的帐户或查看我的个人资料……如果我的答案不正确……这太荒谬了。请重新阅读此内容,重新考虑你刚才在中提出的问题这句话。谢谢。我一直认为stackoverflow并没有那么恶劣的环境,但仍然感谢你的回答:D最后一句话帮帮我吧HNPM:JavaScript的包管理器。npm是npm生态系统的命令行界面。它经过了战斗测试,出人意料的灵活,被成千上万的JavaScript开发人员使用Thread:一个新的JavaScript软件包管理器。Thread缓存它下载的每个软件包,这样它就不需要再下载了。它还并行化操作以最大限度地提高资源利用率,因此安装时间比以往任何时候都要快在Webpack适合的地方,有Yarn和NPM…我看到了一些文章…但是文章的日期非常不同…所以我在这里询问Yarn和NPM用户的实际信息
 - lodash^1
 - super_module@0.0.1
 - - lodash@1.0.0
 - another_module@0.0.01
 - - lodash@1.x.x