yarn 和 npm 在实践中可以互换吗?
Are yarn and npm interchangeable in practice?
我有一个包含 package.json 文件和安装 bash 脚本的项目,除其他步骤外,还运行 npm install
.
我正在考虑更新脚本,以便在 yarn 可用时运行 yarn install
(以利用 yarn 的缓存、锁定文件等),然后回退到 npm install
否则。据我所知,无论哪种方式,所有软件包似乎都能正常安装和工作。
yarn
和 npm
是否可以互换以使其成为一种可行的方法?或者是否存在这可能导致的潜在问题?我们是打算只选择一个,还是在实践中 yarn 可以与 npm 互换?
(注意。我读过这个 closely related question,但我将此作为一个单独的问题提出,因为它是关于在项目中明确支持 yarn 和 npm 安装过程)
Yarn和npm(版本>=3.0.0)应该是比较兼容的,尤其是从npm到Yarn,因为兼容性是one of the stated goals of Yarn. As stated in Migrating from npm:
Yarn can consume the same package.json format as npm, and can install any package from the npm registry.
因此,理论上,任何对 npm 有效的 package.json
也应该同样适用于 Yarn。请注意,我说 npm v2 可能不太兼容——这是因为 npm 从嵌套 node_modules
结构迁移到平面布局(这是 Yarn 使用的)。也就是说,Yarn 和 npm v3 应该产生非常相似的布局,因为,如问题 I linked:
中所述
To a first approximation we should try to be very compatible with the node_modules layout for people who need that compatibility, because it'll be the most likely way to avoid long-tail compatibility problems.
但是,您将无法利用 Yarn 生成的 Yarn.lock,因为(顾名思义)只有 Yarn 支持它,并且npm shrinkwrap
不兼容。
此外,正如@RyanZim 所指出的,旧版本的 Yarn 不支持 pre- and post-install hooks, but versions later than v0.16.1
。如果您依赖这些挂钩,则需要向用户指定需要大于 v0.16.1
的版本。
总而言之,只要您没有遇到错误并且只使用两个包管理器共享的功能,您应该没有任何问题。
我有一个包含 package.json 文件和安装 bash 脚本的项目,除其他步骤外,还运行 npm install
.
我正在考虑更新脚本,以便在 yarn 可用时运行 yarn install
(以利用 yarn 的缓存、锁定文件等),然后回退到 npm install
否则。据我所知,无论哪种方式,所有软件包似乎都能正常安装和工作。
yarn
和 npm
是否可以互换以使其成为一种可行的方法?或者是否存在这可能导致的潜在问题?我们是打算只选择一个,还是在实践中 yarn 可以与 npm 互换?
(注意。我读过这个 closely related question,但我将此作为一个单独的问题提出,因为它是关于在项目中明确支持 yarn 和 npm 安装过程)
Yarn和npm(版本>=3.0.0)应该是比较兼容的,尤其是从npm到Yarn,因为兼容性是one of the stated goals of Yarn. As stated in Migrating from npm:
Yarn can consume the same package.json format as npm, and can install any package from the npm registry.
因此,理论上,任何对 npm 有效的 package.json
也应该同样适用于 Yarn。请注意,我说 npm v2 可能不太兼容——这是因为 npm 从嵌套 node_modules
结构迁移到平面布局(这是 Yarn 使用的)。也就是说,Yarn 和 npm v3 应该产生非常相似的布局,因为,如问题 I linked:
To a first approximation we should try to be very compatible with the node_modules layout for people who need that compatibility, because it'll be the most likely way to avoid long-tail compatibility problems.
但是,您将无法利用 Yarn 生成的 Yarn.lock,因为(顾名思义)只有 Yarn 支持它,并且npm shrinkwrap
不兼容。
此外,正如@RyanZim 所指出的,旧版本的 Yarn 不支持 pre- and post-install hooks, but versions later than v0.16.1
。如果您依赖这些挂钩,则需要向用户指定需要大于 v0.16.1
的版本。
总而言之,只要您没有遇到错误并且只使用两个包管理器共享的功能,您应该没有任何问题。