我有一个带有独立兄弟包的纱线工作区
- Yarn Workspace
- Data Package
- UI Package
UI Package
依赖于Data Package
,并且两个软件包都需要安装在父应用程序中:
- App
- Data Package
- UI Package
- Data Package
我似乎无法将 UI 与自己的数据副本打包在一起 - 将 UI 添加到应用程序时,出现错误,指出无法找到依赖项/未包含数据包。
// doesn't work: packages/ui-package/index.ts
import { DataService } from "../../data-package";
import { DataService } from "@scope/data-package";
// doesn't work: packages/ui-package/package.json
"@scope/data-package": "./data-package.tgz",
"@scope/data-package": "workspace:packages/data-package",
我觉得一个选项可能是在打包之前将数据 tgz 复制到
dist
文件夹(尽管在 prepack
命令擦除 dist
文件夹之后),但这看起来像是一个 hack,并且可能有一个简单的纱线配置即可正确打包。我觉得根 tsconfig 可能可以处理这个问题,但这些包应该大部分是独立的,为简单的东西添加构建过程是没有意义的。
希望这个问题有意义,我很好奇如何将数据安装到 UI 中,将其捆绑,并将其与数据包一起包含在父应用程序中。
因为这个问题现在有超过 10k 的浏览量,我只想更新它,说 Yalc 使这个过程非常无缝,尽管我没有确切的步骤,因为这是很久以前的事了。 yalc 工作方式的 TLDR 是,您
yalc publish
(到本地目录~/.yalc
)然后您只需 yalc install package_name
,一切就可以了。
旧答案(相反,因为 Yalc 是更好的解决方案):
我见过很多人使用
yalc
进行包管理,特别是 由于 tgz
文件的缓存问题 例如
依赖项:
rm ~/.yarn/berry/cache/@scope-ui-package__PRESS_TAB_HERE__
决议:
rm .yarn/cache/@scope-ui-package__PRESS_TAB_HERE__
yalc
显然会将包“发布”到全局文件夹,并像通过神器或某些 npm hub 一样安装
我还没有使用过
yalc
,但计划使用
我发现的黑客解决方案是通过工作空间命令安装,然后手动将
package.json
条目更改为绝对路径(可能是目标服务器上的不同路径):
yarn workspace @scope/ui-package add @scope/data-package
"@scope/data-package": "/absolute/path/to/data-package.tgz"
yarn workspace @scope/ui-package pack --filename ui-package.tgz
yarn remove @scope/ui-package
,删除缓存文件(见下文;通过此方法安装两个缓存的“依赖项”),yarn add ./ui-package.tgz