纱线和npm在实践中是否可以互换?

Nic*_*k F 18 installation npm yarnpkg

我有一个包含package.json文件的项目和一个安装bash脚本,其中包括其他步骤npm install.

我正在考虑更新脚本,以便yarn install纱线可用时运行(利用纱线的缓存,锁定文件等),然后再回到npm install原点.据我所知,所有的软件包似乎安装和工作正常.

yarnnpm足够的互换为这是一种可行的方法有关系吗?或者是否存在可能导致的潜在问题?我们是打算选择一个,还是在实践中可以和npm互换?

(nb.我已经阅读了这个密切相关的问题,但我问这是一个单独的问题,因为它是关于在项目中明确支持yarn和npm安装过程)

Aur*_*001 14

纱线和npm(版本> = 3.0.0)应该是相对兼容的,特别是从npm 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所需版本的版本.

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

  • 应该补充一点,`yarn` 不支持 `postinstall` 脚本。对于大多数软件包来说,这不是问题,但有一些软件包无法正确安装。 (2认同)
  • 公关是[这里](https://github.com/yarnpkg/yarn/pull/800) - 看起来他们改变了主意.如果你没有安装纱线我会自己测试,并在适当的时候更新帖子. (2认同)
  • @RyanZim刚刚通过安装使用`node-gyp`的`bcrypt`软件包进行测试 - 从v0.16.1起正常工作. (2认同)