将 Lerna 与 Yarn 工作区一起使用有啥优势吗?

Posted

技术标签:

【中文标题】将 Lerna 与 Yarn 工作区一起使用有啥优势吗?【英文标题】:Are there any advantages to using Lerna with Yarn workspaces?将 Lerna 与 Yarn 工作区一起使用有什么优势吗? 【发布时间】:2019-02-10 09:36:34 【问题描述】:

我们正在迁移我们的 monorepo 以使用 Lerna。

Lerna 支持 NPM 和 Yarn,此外还允许配置与 Yarn 工作区一起使用。我不清楚带有 Yarn 工作空间的 Lerna 是否比带有 NPM 的 Lerna 有任何明显的优势。许多帖子声称 Lerna 与开箱即用的 Yarn 工作区做的事情或多或少相同。

与使用 Lerna 和 NPM 相比,使用带有 Yarn 工作区的 Lerna 有什么优势吗?

【问题讨论】:

在这个问题上您需要更多帮助吗?请让我知道或将我的答案标记为已接受。谢谢。 【参考方案1】:

据我所知,NPM 没有任何机制可以媲美 Yarn workspaces

Lerna + Yarn 工作空间在开发库时开始大放异彩,而不是应用程序,但是,我发现即使是应用程序,这种组合也可以通过提供诸如发布管理和能力等便利性来使本地开发人员体验更好在项目中的所有或选择的“范围”包中轻松定义和运行“根”脚本。

【讨论】:

感谢您的回答! Lerna 不能 用 NPM 做的事情有什么可以用 Yarn 工作区做的吗?还是一个系统在速度、稳定性等方面优于另一个系统? @axelyung 我很少使用 NPM,并且对您问题的第一部分没有可靠的答案。关于你的第二个问题,我发现 yarn 比 npm 快得多。【参考方案2】:

经过一番调查,我发现了以下差异:

    使用 NPM 会为每个包生成一个 package-lock.json 文件,其中使用 Yarn 只会在项目的根目录中创建 一个。 Yarn 工作区似乎对解决依赖关系树中可能存在的冲突有更好的支持(假设依赖关系是在使用它们的模块中声明的,请参阅this issue)

【讨论】:

以上是关于将 Lerna 与 Yarn 工作区一起使用有啥优势吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 yarn 工作区和 lerna 优先构建顺序

使用 NPM 工作区和 Lerna 在根目录安装 dev 依赖项

Lerna、yarn 和 Typescript:找不到模块或其对应的类型声明

javascript 使用lerna,monorepo和yarn工作空间创建一个babel变换器来修复babel-jest问题

如何在 Lerna + Yarn Workspaces repo 中安装 npm 包?

Yarn workspace + lerna 在每个子包中创建 node_modules