Yarn workspace + lerna 正在每个子包中创建 node_modules
Yarn workspace + lerna is creating node_modules in each sub-package
我有一个 monorepo,我正在使用 yarn workspaces + lerna 进行管理。据我了解,运行 yarn
应该在项目的根目录中创建一个 node_modules
目录,但 而不是 在每个单独的包中。我正在关注作者这样说的教程:
yarn workspaces creates only one node_modules folder. All dependencies are hoisted to the root folder
这个假设总是正确的吗?或者是否存在 yarn + lerna 会在每个包中创建单独的 node_modules
目录的情况?
我看了几篇文章,被同样的事情弄糊涂了。
简短的回答是,你是对的。 Yarn 为每个包创建 node_modules
,并在你的 repo 的根目录中创建一个 node_modules
目录。
换句话说,Yarn 在你所有的包中创建 /packages/<package>/node_modules
。但是,/packages/<package>/node_modules
目录将通过重用 /node_modules
中的依赖项进行优化。这基本上就是这些作者想要表达的意思!
总而言之,您将拥有 n + 1
node_modules
个目录,其中 n
是您拥有的包的数量,假设您的所有包都具有依赖项。
让我们考虑一个例子:
yarn workspace package-1 add commander
如果 /node_modules/commander
中已经有兼容版本,则不会创建 /packages/package-1/node_modules/commander
。
再来看一个案例:
yarn workspace package-1 add chalk
如果 Yarn 无法重用 /node_modules
中的内容,它将在本地安装包,在我们的例子中是 /packages/package-1/node_modules/chalk
。
您可以在 Yarn 的官方博客中阅读更多相关信息:https://classic.yarnpkg.com/blog/2017/08/02/introducing-workspaces/
我有一个 monorepo,我正在使用 yarn workspaces + lerna 进行管理。据我了解,运行 yarn
应该在项目的根目录中创建一个 node_modules
目录,但 而不是 在每个单独的包中。我正在关注作者这样说的教程:
yarn workspaces creates only one node_modules folder. All dependencies are hoisted to the root folder
这个假设总是正确的吗?或者是否存在 yarn + lerna 会在每个包中创建单独的 node_modules
目录的情况?
我看了几篇文章,被同样的事情弄糊涂了。
简短的回答是,你是对的。 Yarn 为每个包创建 node_modules
,并在你的 repo 的根目录中创建一个 node_modules
目录。
换句话说,Yarn 在你所有的包中创建 /packages/<package>/node_modules
。但是,/packages/<package>/node_modules
目录将通过重用 /node_modules
中的依赖项进行优化。这基本上就是这些作者想要表达的意思!
总而言之,您将拥有 n + 1
node_modules
个目录,其中 n
是您拥有的包的数量,假设您的所有包都具有依赖项。
让我们考虑一个例子:
yarn workspace package-1 add commander
如果 /node_modules/commander
中已经有兼容版本,则不会创建 /packages/package-1/node_modules/commander
。
再来看一个案例:
yarn workspace package-1 add chalk
如果 Yarn 无法重用 /node_modules
中的内容,它将在本地安装包,在我们的例子中是 /packages/package-1/node_modules/chalk
。
您可以在 Yarn 的官方博客中阅读更多相关信息:https://classic.yarnpkg.com/blog/2017/08/02/introducing-workspaces/