如何在同级中安装纱线工作区包以在父应用程序中使用

问题描述 投票:0回答:1

我有一个带有独立兄弟包的纱线工作区

- 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 中,将其捆绑,并将其与数据包一起包含在父应用程序中。

yarnpkg yarn-workspaces
1个回答
1
投票

因为这个问题现在有超过 10k 的浏览量,我只想更新它,说 Yalc 使这个过程非常无缝,尽管我没有确切的步骤,因为这是很久以前的事了。 yalc 工作方式的 TLDR 是,您

yalc publish
(到本地目录
~/.yalc
)然后您只需
yalc install package_name
,一切就可以了。


旧答案(相反,因为 Yalc 是更好的解决方案):

使用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
条目更改为绝对路径(可能是目标服务器上的不同路径):

  1. 通过本地工作区添加
    yarn workspace @scope/ui-package add @scope/data-package
  2. 将package.json更改为绝对路径
    "@scope/data-package": "/absolute/path/to/data-package.tgz"
  3. 打包tgz
    yarn workspace @scope/ui-package pack --filename ui-package.tgz
  4. 复制到应用程序目录
    yarn remove @scope/ui-package
    删除缓存文件(见下文;通过此方法安装两个缓存的“依赖项”),
    yarn add ./ui-package.tgz
© www.soinside.com 2019 - 2024. All rights reserved.