35

我有一个包含 package.json 文件和安装 bash 脚本的项目,除其他步骤外,该脚本运行npm install.

我正在考虑更新脚本,以便它在yarn install纱线可用时运行(利用纱线的缓存、锁定文件等),npm install否则会退回。据我所知,所有软件包似乎都可以安装并正常工作。

yarn但是,这是否npm足以让这成为一种可行的方法?或者是否存在可能导致的潜在问题?我们是打算只选择一个,还是在实践中 yarn 可以与 npm 互换?

(nb。我已经阅读了这个密切相关的问题,但我将其作为一个单独的问题提出,因为它是关于在项目中明确支持 yarn 和 npm install 进程)

4

1 回答 1

32

Yarn 和 npm(版本 >=3.0.0)应该是相对兼容的,尤其是从 npm 迁移Yarn,因为兼容性是Yarn 的既定目标之一。如从 npm 迁移中所述:

Yarn 可以使用与 npm 相同的 package.json 格式,并且可以从 npm 注册表安装任何包。

因此,理论上,任何package.json对 npm 有效的东西也应该同样适用于 Yarn。请注意,我说 npm v2 可能不太兼容——这是因为 npm 从嵌套node_modules结构迁移到了平面布局(这是 Yarn 使用的)。也就是说,Yarn 和 npm v3 应该产生非常相似的布局,因为正如我链接的问题中所述:

对于需要这种兼容性的人,我们应该尽量与 node_modules 布局非常兼容,因为这将是避免长尾兼容性问题的最有可能的方法。

但是,您将无法利用 Yarn 生成的 Yarn.lock,因为(顾名思义)它仅受 Yarn 支持,并且npm shrinkwrap不兼容。

此外,正如@RyanZim 所指出的,旧版本的 Yarn 不支持安装前和安装后的钩子,但版本较晚v0.16.1。如果您依赖这些钩子,则需要向用户指定高于v0.16.1所需版本的版本。

总之,只要您没有遇到错误并且只使用两个包管理器共享的功能,您应该没有任何问题。

于 2016-11-21T18:20:32.277 回答