在同一个项目中使用 NPM 和 Yarn 有什么坏处吗?
Is there any harm in using NPM and Yarn in the same project?
我一直在为个人项目使用 npm,最近偶然发现了 yarn。在我一直使用 npm 的同一个项目中切换到 yarn 的包管理器会有任何危害或“预期的副作用”吗?
对我来说,在一个项目中同时使用它们并没有什么坏处。
我在开发环境中使用 npm 和 yarn (50/50)。
但是在 ci/di 上,我只使用纱线,因为它更快,而且由于纱线,我减少了构建时间。
而且它们都创建了不同的 .lock 文件名。
虽然这里的一些评论者说在同一个项目中混合使用 yarn 和 npm 是可以的,但是在使用 yarn 和 npm 然后再次使用 yarn 之后,这就是 yarn 不得不说的:
warning package-lock.json found. Your project contains lock files generated by tools
other than Yarn. It is advised not to mix package managers in order to avoid resolution
inconsistencies caused by unsynchronized lock files. To clear this warning, remove
package-lock.json.
这里https://classic.yarnpkg.com/en/docs/migrating-from-npm/可以确认Yarn的解析算法兼容NPM解析算法
在 npm 项目中(package.json)如果你 运行 yarn
它会读取你的 node_modules
文件夹(使用解析算法)并创建一个 yarn.lock
包含项目锁定依赖树的文件。
基于此,我假设它们在同一个项目中是兼容的。
更新 2021 年 4 月 30 日
我的原始回复是指 yarn 1 (classic)
,尽管我刚刚使用 create-react-app
工具创建了一个 React 应用程序,它使用 package.json
+ yarn.lock
创建了项目的存储库默认。再次证明它很好(即使有 Dave Pile 提到的警告)。
归根结底,这是将两者放在一起工作并检查自己的问题...
没有人提及锁定文件。
假设您在开发环境中使用 yarn,在 build/production 服务器上使用 yarn。当您使用 yarn 安装包并且您的项目在您的计算机上运行时,您可能希望它在生产环境(您的服务器)上运行。
遗憾的是,当项目 运行 在您的计算机上时,您会提交 yarn.lock 文件,该文件“保存”您拥有的每个包的确切版本。
在您的 buid/production 服务器上,您应该调用 yarn install
,但要求使用 --frozen-lockfile
参数保留所有相同的版本。甚至有人说"yarn install --frozen-lockfile
should be the default behavior",我同意。
然后...您正在工作的项目中的另一个开发跳转并使用 npm
(而不是 yarn
)安装包。该新包不会包含在您的 yarn.lock
文件中,但是会创建一个新的 package-json.lock
文件,告诉它正在使用的确切包版本。
当该提交到达您的 build/production 服务器时,它将崩溃,失败,因为 yarn.lock
文件中不存在该新包。有人需要提取更改,调用 yarn
来安装依赖项并使用新的包依赖项更新锁定文件,然后再次将其推送到 repo。
关于是否使用锁定文件的快速说明。如果您在计算机上最后一次安装几周后在您的 build/production 服务器上调用 'yarn install',服务器将有许多其他新版本而不是您上一个“稳定”版本。我已经发生过很多次了。
我最近发布了 package-locks-checks,这有助于确保您不仅拥有一个锁定文件,而且还锁定了项目中的每个包版本。
此外,正如 Dave Pile 所说,您会收到来自 yarn
的警告,因为我们必须推送 *-lock.json
文件更改,您必须考虑 using npm version >= 7 以确保无论何时通过 npm
它也会更新你的 yarn-lock.json
文件。
因为无论何时通过 npm
或 yarn
安装软件包都取决于您为更新 package.json
中的依赖项选择的内容(使用代字号 ( ~ ) 可以让您错误修复版本和插入符号 ( ^ ) 为您提供 backward-compatible 新功能)它将更新您的 .lock
文件,并且由于您必须推送,因此您可能会遇到不同版本的锁定文件。
我一直在为个人项目使用 npm,最近偶然发现了 yarn。在我一直使用 npm 的同一个项目中切换到 yarn 的包管理器会有任何危害或“预期的副作用”吗?
对我来说,在一个项目中同时使用它们并没有什么坏处。
我在开发环境中使用 npm 和 yarn (50/50)。 但是在 ci/di 上,我只使用纱线,因为它更快,而且由于纱线,我减少了构建时间。
而且它们都创建了不同的 .lock 文件名。
虽然这里的一些评论者说在同一个项目中混合使用 yarn 和 npm 是可以的,但是在使用 yarn 和 npm 然后再次使用 yarn 之后,这就是 yarn 不得不说的:
warning package-lock.json found. Your project contains lock files generated by tools
other than Yarn. It is advised not to mix package managers in order to avoid resolution
inconsistencies caused by unsynchronized lock files. To clear this warning, remove
package-lock.json.
这里https://classic.yarnpkg.com/en/docs/migrating-from-npm/可以确认Yarn的解析算法兼容NPM解析算法
在 npm 项目中(package.json)如果你 运行 yarn
它会读取你的 node_modules
文件夹(使用解析算法)并创建一个 yarn.lock
包含项目锁定依赖树的文件。
基于此,我假设它们在同一个项目中是兼容的。
更新 2021 年 4 月 30 日
我的原始回复是指 yarn 1 (classic)
,尽管我刚刚使用 create-react-app
工具创建了一个 React 应用程序,它使用 package.json
+ yarn.lock
创建了项目的存储库默认。再次证明它很好(即使有 Dave Pile 提到的警告)。
归根结底,这是将两者放在一起工作并检查自己的问题...
没有人提及锁定文件。
假设您在开发环境中使用 yarn,在 build/production 服务器上使用 yarn。当您使用 yarn 安装包并且您的项目在您的计算机上运行时,您可能希望它在生产环境(您的服务器)上运行。
遗憾的是,当项目 运行 在您的计算机上时,您会提交 yarn.lock 文件,该文件“保存”您拥有的每个包的确切版本。
在您的 buid/production 服务器上,您应该调用 yarn install
,但要求使用 --frozen-lockfile
参数保留所有相同的版本。甚至有人说"yarn install --frozen-lockfile
should be the default behavior",我同意。
然后...您正在工作的项目中的另一个开发跳转并使用 npm
(而不是 yarn
)安装包。该新包不会包含在您的 yarn.lock
文件中,但是会创建一个新的 package-json.lock
文件,告诉它正在使用的确切包版本。
当该提交到达您的 build/production 服务器时,它将崩溃,失败,因为 yarn.lock
文件中不存在该新包。有人需要提取更改,调用 yarn
来安装依赖项并使用新的包依赖项更新锁定文件,然后再次将其推送到 repo。
关于是否使用锁定文件的快速说明。如果您在计算机上最后一次安装几周后在您的 build/production 服务器上调用 'yarn install',服务器将有许多其他新版本而不是您上一个“稳定”版本。我已经发生过很多次了。
我最近发布了 package-locks-checks,这有助于确保您不仅拥有一个锁定文件,而且还锁定了项目中的每个包版本。
此外,正如 Dave Pile 所说,您会收到来自 yarn
的警告,因为我们必须推送 *-lock.json
文件更改,您必须考虑 using npm version >= 7 以确保无论何时通过 npm
它也会更新你的 yarn-lock.json
文件。
因为无论何时通过 npm
或 yarn
安装软件包都取决于您为更新 package.json
中的依赖项选择的内容(使用代字号 ( ~ ) 可以让您错误修复版本和插入符号 ( ^ ) 为您提供 backward-compatible 新功能)它将更新您的 .lock
文件,并且由于您必须推送,因此您可能会遇到不同版本的锁定文件。