纱线工作区隔离

Posted

技术标签:

【中文标题】纱线工作区隔离【英文标题】:Yarn workspace isolation 【发布时间】:2019-07-13 12:01:14 【问题描述】:

我在空设置时遇到了一些纱线问题(当我在 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 也一样,使用此错误中断安装操作:

错误在“npm”注册表中找不到“lib2-ws@0.0.1”所需的包“lib1@^0.0.1”。

不确定我缺少什么,是否可以运行一些命令来忽略这个 workspace-aggregator 东西?

谢谢。

【问题讨论】:

【参考方案1】:

似乎我搜索的不够多,发布此问题后,我又阅读了另一个question,给了我一个想法。

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

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

而且它有效,现在我可以安装,甚至无需构建或发布。

[更新]

由于某些角度构建的特殊性,在安装所有依赖项后,空设置必须执行一些命令(因为 yarn 工作区为库创建符号链接):

    build lib1 then publish lib1 yarn workspace lib2-ws add lib1@latest yarn workspace lib3-ws add lib1@latest build lib2 then publish lib2 build lib3 then publish lib3

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

【讨论】:

嘿,你能只安装每个工作区所需的 node_modules 吗? 我不确定,因为我停止了使用这种架构的项目。

以上是关于纱线工作区隔离的主要内容,如果未能解决你的问题,请参考以下文章

纱线工作区——包别名

带有纱线工作区的 Oclif

如何安装没有符号链接的纱线工作区包?

纱线无法添加包(工作区内外)

React Monorepo 纱线工作区 + 打字稿 + 绝对导入

Firebase 推送通知在纱线手表中工作,但在纱线构建中不工作