首页 > 解决方案 > Yarn workspace + lerna 在每个子包中创建 node_modules

问题描述

我有一个monorepo,我正在使用yarn workspaces + lerna 管理它。据我了解,运行应该在项目的根目录下yarn创建一个目录,而不是在每个单独的包中。我正在关注作者所说的教程:node_modules

yarn workspaces 只创建一个 node_modules 文件夹。所有依赖项都被提升到根文件夹

这个假设总是正确的吗?或者是否存在 yarn + lerna 会node_modules在每个包中创建单独目录的情况?

标签: yarnpkglernamonorepo

解决方案


我读了几篇文章,对同样的事情感到困惑。

简短的回答是,你是对的。Yarnnode_modules为每个包创建一个node_modules目录,并在你的 repo 的根目录中创建一个目录。

换句话说,Yarn/packages/<package>/node_modules在你所有的包中创建。但是,该/packages/<package>/node_modules目录将通过重用/node_modules. 这基本上就是这些作者想要表达的意思!

总而言之,您将拥有n + 1 node_modules目录,其中n是您拥有的包的数量,假设您的所有包都有依赖项。

让我们考虑一个例子:

yarn workspace package-1 add commander

/packages/package-1/node_modules/commander如果它已经在/node_modules/commander兼容版本中,则不会创建。

现在让我们看另一个案例:

yarn workspace package-1 add chalk

/node_modules如果Yarn不能重用/packages/package-1/node_modules/chalk.

您可以在 Yarn 的官方博客中阅读更多相关信息:https ://classic.yarnpkg.com/blog/2017/08/02/introducing-workspaces/


推荐阅读