Yarn 工作区隔离

Yarn workspace isolation

我在使用 yarn 时遇到一些问题,设置为空(当我在 npm 上没有任何版本的库时)。

我有一个结构如下的多模块项目:

root                        # Yarn workspace
 * packages
 |  * lib1-ws               # Angular workspace
 |  |  * projects
 |  |  |  * lib1
 |  |  |     * package.json
 |  |  * package.json
 |  |
 |  * lib2-ws               # Angular workspace
 |  |  * projects
 |  |  |  * lib2
 |  |  |     * package.json # peer depends on lib1
 |  |  * package.json       # depends on lib1
 |  |
 |  * lib3-ws               # Angular workspace
 |     * projects
 |     |  * lib3
 |     |     * package.json # peer depends on lib1
 |     * package.json       # depends on lib1
 |
 * package.json

项目 lib2-ws 和 lib3-ws 需要构建 lib1。

我试图发布(安装、构建和发布)lib1,以便我可以发布 lib2lib3.

但是当我 运行 yarn workspace lib1-ws installyarn install(在 lib1-ws 文件夹中)时,yarn 会尝试安装 lib2-wslib3-ws 以及,中断安装操作并出现此错误:

error Couldn't find package "lib1@^0.0.1" required by "lib2-ws@0.0.1" on the "npm" registry.

不确定我错过了什么,是否有一些命令可以让我运行忽略这个workspace-aggregator东西?

谢谢。

看来我搜索的不够,在post这个问题之后,又看了一个question,给了我一个思路

我的工作区对象变成了这样:

"workspaces": {
  "packages": [
    "packages/*",
    "packages/**/projects/*"
  ]
}

它有效,现在我什至无需构建或发布即可安装。

[更新]

因为一些angular构建的特殊性,在安装所有依赖项之后,空设置必须执行一些命令(因为 yarn workspace 为库创建符号链接):

  1. build lib1 then publish lib1
  2. yarn workspace lib2-ws add lib1@latest
  3. yarn workspace lib3-ws add lib1@latest
  4. build lib2 then publish lib2
  5. build lib3 then publish lib3

完成这些步骤后,我的库已在我的 verdaccio 本地存储库中准备就绪。