Yarn & Monorepo:防止使用本地包

Yarn & Monorepo: Prevent using local packages

我有一个 yarn/lerna monorepo,其中包含多个相互依赖的包。如果我将 packageA 添加为 packageB 的依赖项并执行 yarn install 我看到 node_modules/packageA 实际上是 packages/packageA 的符号链接而不是该包的发布版本.

如果 packageBpackageA 之前构建,这会在 CI 上产生问题 - 构建失败,因为 node_modules/packageA 只是指向裸源,没有构建产品(因为 packageA 还没有建成)。

如何强制 yarn 始终下载 packageA 的已发布版本?


yarn --version: 1.22.10

旁注:如果我想使用 packageA 的本地版本,我会使用 yarn link 或本地路径而不是 package.json 中的版本。为什么纱线会默认这种行为?

一个选项是:“重点工作区”- see the guide here

在我的例子中,我添加了一个文件 packages/packageB/.yarnrc,指定始终对 yarn install 使用 --focus 参数:

--install.focus true

这将确保 packageB 在其自己的 node_modules 文件夹中拥有已发布 packageA 的副本。

但是:这一次只适用于一个包裹。

您可以只按照依赖项的顺序构建包。所以在你的情况下,它在你的 CI 中是这样的(假设在包的 package.json 中有一个名为“build”的脚本条目):

yarn workspace packageA run build
yarn workspace packageB run build

这样你就可以控制构建的顺序,它们会成功完成,而且你不必强制使用已发布的包。