使用 UI 库作为 Netlify Monorepo 上 Web 应用程序的依赖项 (Yarn Workspace/Lerna)

Using UI Library as a Dependency for Web App on Netlify Monorepo (Yarn Workspace/Lerna)

我有两个应用程序,glowystuff-webglowy-ui。 Glowy-UI 是一个共享的 UI 库,我计划将其用于其他项目,比如我自己的 React Bootstrap.

这是挑战。我将 glowy-ui 定义为 packages/glowystuff-web/package.json 中的依赖项,如下所示:

{
 "dependencies": {
   "glowy-ui": "*"
 },
 "scripts": {
  "build": "gatsby build"
 }
}

除非我 运行 yarn build(使用 tsc 编译为 glowy-ui/lib)并将 JS lib/ 文件提交到 git(讨厌!)我收到这样的错误 build:

3:47:15 PM: failed Building production JavaScript and CSS bundles - 24.131s
3:47:15 PM: error Generating JavaScript bundles failed
3:47:15 PM: Can't resolve 'glowy-ui' in '/opt/build/repo/packages/glowystuff-web/src/components'
3:47:15 PM: If you're trying to use a package make sure that 'glowy-ui' is installed. If you're trying to use a local file make sure that the path is correct.

对于上下文,这些是我在 Netlify 上找到的关于 Monorepos(使用 Yarn Workspaces)的最佳说明:

https://community.netlify.com/t/difficulty-with-new-monorepo-deployment-options/4381/9

我不清楚我是如何让 Netlify 知道 building 需要发生的。如果我在 packages/glowystuff-web/package.json 上这样做:

"scripts": {
  "build": "yarn workspace glowy-ui build && gatsby build"
}

... 然后它似乎会在主 Web 应用程序的每个 uild 上添加 uild UI 库,甚至 glowystuff-web UI 库代码没有更新时。

glowy-ui 的一个私有的、已发布的 NPM 包在这里可能是一个可行的选择,但我的想法是在 Yarn Workspaces 中有一个单一的 GitHub 回购,我不需要在其中发布.毕竟,如果所有文件都可供阅读,为什么还要发布?

那么,在 Netlify/Yarn 工作区上,什么是最好的方法来使事情变 uild,同时在适当的时候利用缓存?

当前 builds 的附加上下文 - netlify.tomls:

我们正在使用 code-as-config 方法来处理 Netlify builds。这是当前 packages/glowystuff-web/netlify.toml:

[build]
  publish = "public/"
  command = "yarn build"

Glowy-UI 既是 UI 库,也是随附的故事书应用程序,所以这里是当前 packages/glowy-ui/netlify.toml:

[build]
  publish = "storybook-static"
  command = "yarn build-storybook"

您可以使用 post install 阶段到 build glowy-ui 库。这个阶段会在你每次 运行 纱线安装时创建 build。

scripts: {
   "build": "gatsby build",
   "postinstall": "yarn workspace glowy-ui build"
}

编辑 只有当我们在 npm/yarn 安装后 运行ning 时,此安装后才有效。即它不会在每个 build 上 运行。对于 Netlify,它还会检查 package.json 更新。如果不是,它不会 运行 yarn install 这不会使这个包缓存失效。