【问题标题】:Are yarn and npm interchangeable in practice?yarn 和 npm 在实践中可以互换吗?
【发布时间】:2017-04-05 05:33:45
【问题描述】:

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

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

yarnnpm 是否可以互换,从而成为一种可行的方法?还是有可能导致的潜在问题?我们是打算只选择一个,还是在实践中 yarn 可以与 npm 互换?

(nb。我已阅读此closely related question,但我将此作为一个单独的问题提出,因为它是关于在项目中明确支持 yarn 和 npm 安装过程)

【问题讨论】:

    标签: npm installation yarnpkg


    【解决方案1】:

    Yarn 和 npm(版本 >=3.0.0)应该是相对兼容的,尤其是从 npm Yarn,因为兼容性是one of the stated goals of Yarn。如Migrating from npm中所述:

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

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

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

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

    另外,正如 @RyanZim 所指出的,旧版本的 Yarn 不支持 pre- and post-install hooks,但 versions later than v0.16.1 支持。如果您依赖这些挂钩,则需要向用户指定需要大于 v0.16.1 的版本。

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

    【讨论】:

    • 应该添加 yarn 不支持 postinstall 脚本。对于大多数软件包来说,这不是问题,但有些软件包无法正确安装。
    • @RyanZim 它似乎已根据 GitHub 修复 - 你知道主版本中的更改是否已经完成吗?
    • 不知道,我实际上并没有使用纱线。我认为 yarn 以安全为由反对postinstall 脚本。介意在此处发布指向 Github 上相关主题的链接吗?
    • PR 是 here - 看起来他们改变了主意。如果你还没有安装 yarn,我会自己测试一下,并根据需要更新帖子。
    • @RyanZim 刚刚通过安装使用 node-gypbcrypt 包进行了测试 - 从 v0.16.1 开始可以正常工作。
    猜你喜欢
    • 2021-02-14
    • 2012-12-29
    • 2017-12-08
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多