使用 UI 库作为 Netlify Monorepo 上 Web 应用程序的依赖项 (Yarn Workspace/Lerna)
Using UI Library as a Dependency for Web App on Netlify Monorepo (Yarn Workspace/Lerna)
我有两个应用程序,glowystuff-web
和 glowy-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 这不会使这个包缓存失效。
我有两个应用程序,glowystuff-web
和 glowy-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 这不会使这个包缓存失效。