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

纱线和npm在实践中是否可以互换?,npm,installation,yarnpkg,Npm,Installation,Yarnpkg,我有一个带有package.json文件和install bash脚本的项目,其中包括运行npm install 我正在考虑更新脚本,使其在可用的情况下运行warn install(利用warn的缓存、锁文件等),否则返回到npm install。据我所知,所有的软件包似乎安装和工作正常 然而,纱线和npm是否可以互换,从而成为一种可行的方法?或者这是否会导致潜在的问题?我们是要挑一条呢,还是纱线在实践中可以与npm互换 (注意,我读过这篇文章,但我把它作为一个单独的问题来问,因为它是关于在一个

我有一个带有package.json文件和install bash脚本的项目,其中包括运行
npm install

我正在考虑更新脚本,使其在可用的情况下运行
warn install
(利用warn的缓存、锁文件等),否则返回到
npm install
。据我所知,所有的软件包似乎安装和工作正常

然而,
纱线
npm
是否可以互换,从而成为一种可行的方法?或者这是否会导致潜在的问题?我们是要挑一条呢,还是纱线在实践中可以与npm互换

(注意,我读过这篇文章,但我把它作为一个单独的问题来问,因为它是关于在一个项目中明确支持Thread和npm安装过程的)

Thread和npm(版本>=3.0.0)应该是相对兼容的,特别是从npm迁移到Thread,因为兼容性是非常重要的。如下列文件所述:

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

因此,从理论上讲,任何对npm有效的
package.json
对纱线也同样有效。请注意,我说npm v2可能不太兼容-这是因为npm从嵌套的
节点_modules
结构迁移到了平面布局(这就是纱线所使用的)。也就是说,纱线和npm v3应该产生非常相似的布局,因为,如本期所述:

首先,对于需要兼容性的人,我们应该尝试与node_模块布局非常兼容,因为这是避免长尾兼容性问题的最有可能的方法

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

此外,正如@RyanZim所指出的,旧版本的纱线不支持,但支持。如果依赖这些挂钩,则需要向用户指定需要大于
v0.16.1
的版本


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

应该补充说
warn
不支持
postinstall
脚本。对于大多数软件包来说,这不是问题,但也有一些软件包无法正确安装。@RyanZim它似乎已根据GitHub进行了修复-您知道主版本中的更改是否已完成吗?我不知道,我实际上没有使用Thread。我认为,出于安全考虑,纱线反对
postinstall
脚本。介意在Github上发布一个相关线程的链接吗?PR是-看起来他们改变了主意。如果您还没有安装Thread,我将自己进行测试,并根据需要更新帖子。@RyanZim刚刚通过安装
bcrypt
包进行了测试,该包使用
节点gyp
,从v0.16.1开始运行良好。