yarn 是否可以被视为替代 bower 和 npm 的可行选择?

Can yarn be considered a viable option as a replacement for bower and npm?

我应该澄清一下,我对前端工具没有那么多经验,所以如果我问的是一些明显和愚蠢的问题,我提前道歉。

到目前为止,我一直在前端使用 bower,在服务器端使用 npm,尽管提到的每个工具都有其优点,我的意思是 扁平依赖管理[=23= bower 的 ](减少客户端的负载)和 npm 嵌套依赖管理(有助于版本控制),使用这么多工具(webpack、browserify等)已经变得相当繁琐。我可能一直在以错误的方式使用这些工具,并且可以通过某些选项(我不知道)使用它们中的任何一个并且只触及表面,我只是把这个 answer 作为我的经验法则自从我读到它以来就一直这样做。如果我能至少将这两个减少为一个就好了。

最近我对 yarn 和围绕它的所有炒作感到好奇,它似乎做得很好,好像它将完全取代 npm。当我阅读文档时,我发现了 --flat 选项,这让我想知道是否也可以将它用作凉亭的替代品?如果是这样,是否意味着我可以拥有平面或嵌套的依赖管理器(只需为后端和前端提供多个 JSON 文件)?

如果有人能指出正确的方向,我将不胜感激!

这取决于您的确切用例,但是...可能

目前,主要趋势似乎是转向模块打包器,例如 Webpack 和 Browserify(因此是 npm 或 Yarn),而不是 Bower。您可以在 阅读有关情况的精彩概述,以及您可能 想要 Webpack 而不是 Bower 的一些原因。

目前,您可能正在使用 HTTP,使用一个 JavaScript 捆绑包文件比使用大量源文件(使用 Bower 会发生这种情况)更快。这就是 Webpack 和 Browserify 如此受欢迎的原因(以及其他原因)——它们 应该 提高性能并大大简化开发。

旁注: HTTP/2 will diminish the value of module bundling, because multiple requests will become far less costly. See 更详细地描述了涉及 HTTP/2 的问题。

如果您使用 npm 或 Yarn,那么嵌套依赖项应该并不重要——您的前端依赖项无论如何都将与 Webpack/Browserify 捆绑在一起,因此使用嵌套包的主要成本是它占用更多 space 和更多下载时间。

因为 npm v3 和 Yarn 可以进行平面安装,无论如何都不应该有任何问题。简而言之:您可能可以做到,许多其他人也在这样做。

最近几天,Yarn 的受欢迎程度呈上升趋势,这主要是由于与 npm 不同的几个方面。

第一,它是 100% 确定性的,即如果你 运行 来自任何状态、任何时间的纱线,1000 次,它仍然会一直以相同的方式工作。 npm 的安装是不确定的。如果你 运行 它来自不同的状态,它会以不同的方式安装。

Yarn 也做了一些更好的缓存。事实上,它做得非常好,您会发现安装时间显着减少。您可以看到大型应用程序的安装时间减少了 10 倍。

默认情况下,Yarn 还会锁定您的依赖项。可以使用 npm shrinkwrap 命令执行此操作,但如果您曾经不得不维护其中一个命令,它可能会很混乱。