首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用monorepo部署到Firebase函数

使用monorepo部署到Firebase函数
EN

Stack Overflow用户
提问于 2020-04-04 00:00:43
回答 3查看 2K关注 0票数 8

根据Firebase Functions with Yarn workspaces的说法,我想使用Yarn工作区将monorepo部署到Firebase。我可以成功地将"web“方面部署到Firebase托管,它引用了一个共享的”核心“工作区。但是,尝试对Firebase函数上的" Functions“工作区执行相同的操作会失败。

我正在使用具有以下文件夹结构的Yarn工作区:

代码语言:javascript
复制
packages/           
  core/             // name: firebase-monorepo-core: custom core package
  functions/        // name: firebase-monorepo-functions: firebase functions package
  web/              // name: firebase-monorepo-web: react package

这些已经在根package.json文件中进行了配置:

代码语言:javascript
复制
"workspaces": {
    "packages": [
        "packages/*"
    ],
    "nohoist": [
        "**/firebase-monorepo-core"
    ]
}

为了在Firebase中启用Yarn工作区(并因此共享我的core包),我使用nohoist特性在functionsweb中按照twizStackoverflow answer创建了到Yarn工作区的符号链接。

functionsweb中,core包也以依赖项的形式存在

代码语言:javascript
复制
"dependencies": {
    "firebase-monorepo-core": "*"
}

在本地运行时没有任何问题,事实上,将web包部署到Firebase主机上工作得很好。但是,将functions包部署到Firebase函数会抛出一个错误:

我已经创建了一个Github存储库https://github.com/cjmyles/firebase-monorepo来演示这一点,生成的web工作区可以在https://fir-monorepo.firebaseapp.com上查看。

如果我对core工作区执行yarn pack操作,并在package.json文件中将其作为tarball引用,则可以部署core包,但我真的不喜欢这种解决方案,而且它将需要更多的开销才能实现自动化。

如果有任何建议来解决这个问题,我们将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2020-08-06 15:31:53

一个潜在的解决方案是使用Lerna。

然后,您可以将您的core包发布到一个私有的GitHub包,并使用Lerna创建一个指向core包的符号链接,用于本地开发。

票数 1
EN

Stack Overflow用户

发布于 2020-12-16 19:28:16

issue是指firebase-tools假定您的函数使用的所有包在npm中都可用。

一个快速的解决方案是使用firelink。

代码语言:javascript
复制
cd ./packages/functions
yarn add -D @rxdi/firelink

为所有共享依赖项的函数package.json添加等效节。

代码语言:javascript
复制
  "fireDependencies": {
    "@org/common": "../../packages/common"
  },

更改部署脚本以使用firelink二进制文件

代码语言:javascript
复制
  "scripts": {
    "build": "tsc --build tsconfig.build.json",
    "predeploy": "yarn build",
    "deploy:functions": "firelink deploy --only functions"
  }

只是提个醒并不适用于"devDependencies",但在生产中无论如何都不应该需要它们。

更新您的firebase.json以运行预部署目标。

代码语言:javascript
复制
  "functions": {
    "predeploy": ["npm --prefix \"$RESOURCE_DIR\" run predeploy"],
    "source": "packages/functions"
  },

最后,删除工作空间包中的所有本地yarn.lock文件。如果您希望锁定依赖关系,请在预部署步骤中添加npm install。如果有人对此有更好的解决方案,请让我知道。不幸的是,yarn不能在工作区中按需生成锁文件。

票数 0
EN

Stack Overflow用户

发布于 2021-04-28 05:58:16

我得到了这个工作,但它是一个痛苦和令人生厌。到目前为止,它工作得很好。我使用的是NPM工作区,但是这个概念应该适用于任何将节点模块挂接到根文件夹的项目。我还对CI和TypeScript使用了GitHub工作流/操作,因此所有这些都可以在这些环境中工作。

Firebase CLI使用TypeScript's tsc

  • Copy将编译后的文件放到文件夹(确切地说是functions/src/domain)中来构建我的依赖包,这样它们就可以被
  • CLI

上传

代码语言:javascript
复制
cp -r packages/domain firebase/functions/src/domain

  • 在函数/package.json中插入本地依赖项。我使用的是GitHub actions支持的sed

代码语言:javascript
复制
sed -i 's/"dependencies": {/"dependencies": { "@mycompany\/domain": "file:src\/domain",/' package.json

在该命令之前,我的package.json如下所示:

代码语言:javascript
复制
  "dependencies": {
    "lodash": "^4.17.20",
  ...

在该命令之后,它看起来如下所示:

代码语言:javascript
复制
  "dependencies": { "@mycompany/domain": "file:src/domain",
    "lodash": "^4.17.20",
  ...

然后部署:firebase deploy --only functions

不是很漂亮,但它是完全自动化的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61015842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档