Yarn 是 npm 的包装器吗?

Is Yarn a wrapper over npm?

我知道 Yarn 带来的好处以及它 npm 没有的好处。但是我确实有一些疑问:

不是,是重写

Rather than continue building infrastructure around the npm client, we decided to try looking at the problem more holistically. What if instead we attempted to build a new client that addressed the core issues we were experiencing? Sebastian McKenzie in our London office started hacking on this idea and we quickly became excited about its potential.

-- https://code.facebook.com/posts/1840075619545360

它提供相同的 API(如果您注意到的话,没有一些快捷方式)。这是(我猜)因为原始界面足够简单并确保采用。

速度更快,解决了 npm 的典型问题(主要是不确定性部署)。这只能通过自上而下的重写来实现,他们还更改了 deps 的安装方式(获取、计算、下载,link),因此逻辑不同。

这种方法的缺点是需要大量的工作。通常你只会在主仓库上进行公关,但考虑到他们想要一个完全不同的东西并且 Facebook 有办法,他们决定单独行动。

另一个很大的缺点是它的好处不会立即对所有 npm 老用户可用,因为它不是升级,也没有随 node 一起安装。

我查看了 Yarn 的源代码,发现每个命令都有自定义代码:https://github.com/yarnpkg/yarn/tree/master/src/cli/commands.

我想这种方法的缺点是,将来 npm 添加新命令时,Yarn 团队将不得不跟踪更改并手动实施它们。