组织您的火池功能,以更轻松地部署和维护
#javascript #serverless #typescript #firebase

开发Firebase功能时,通常将所有内容都放在单个存储库中 - 所有的firebase功能都为您的项目函数。当您启动时,这通常很好。

但是,随着您项目的增长,这可能会开始产生负面影响,例如,由于Firebase必须构建大型功能,上传并弄清楚发生了什么变化和没有改变。

最重要的是,这也使多个团队很难从事同一项目,因此很难部署和维护,因为团队从事其功能。

Firebase功能代码库

那么,您如何管理? Firebase提供了Firebase函数代码库的概念,其中firebase功能可以以对组织有意义的方式组织成一个集合,例如团队拥有或通过功能,并将其维护和部署在一起。

>

功能集合可以在不同的存储库中,也可以位于同一存储库中,在单声道repo设置中使用NX和我今年早些时候建造的NX generator for Firebase结合使用。

firebase代码库允许您以对组织有意义的方式组织Firebase功能集合。这可能是通过功能或团队进行的,因此,您可以将它们保持和部署。

默认情况下,firebase有一个,默认的代码库,而您的firebase配置文件-firebase.json-看起来像这样。

{
  // ... other firebase services configurations i.e. hosting etc.
  "functions": [
    {
      "source": "dist/apps/functions",
      // default codebase
      "codebase": "default",
      "ignore": [
        "node_modules",
        ".git",
        "firebase-debug.log",
        "firebase-debug.*.log"
      ],
      "predeploy": [
        "pnpm nx run functions:build"
      ]
    }
  ],
  "extensions": {}
}

我们可以通过修改我们的一个功能的代码库属性来为我们的firebase函数配置其他代码库。

例如,在上面的示例中,我们可以通过在我们的firebase.json配置文件中的功能属性中添加第二个配置选项来添加第二个功能集合。

{
  // ... other firebase services configs
  "functions": [
    {
      "source": "dist/apps/functions",
      "codebase": "default",
      "ignore": [
        "node_modules",
        ".git",
        "firebase-debug.log",
        "firebase-debug.*.log"
      ],
      "predeploy": [
        "pnpm nx run functions:build"
      ]
    },
     {
      "source": "dist/apps/functions",
      "codebase": "codebase-2",
      "ignore": [
        "node_modules",
        ".git",
        "firebase-debug.log",
        "firebase-debug.*.log"
      ],
      "predeploy": [
        "pnpm nx run functions:build"
      ]
    }
  ]
}

在上面的情况下,我们的不同函数集合存在于同一存储库中 - 单声道repo。我们可以在多个存储库中拥有我们的功能集合,在这种情况下,我们只需要在我们的firebase.json配置文件中配置存储库中的唯一代码库。

{
  // ... other firebase services configs
  "functions": [
     {
      "source": "dist/apps/functions",
      "codebase": "codebase-2",
      "ignore": [
        "node_modules",
        ".git",
        "firebase-debug.log",
        "firebase-debug.*.log"
      ],
      "predeploy": [
        "pnpm nx run functions:build"
      ]
    }
  ]
}

nb:确保代码库属性正确,因为这可能会带来无法预料的后果,例如在存储库中未找到的代码库中删除其他功能。

部署您的功能

与往常一样,firebase deployfirebase deploy functions将在当前目录中,在所有代码库中部署所有firebase功能。最重要的是,您可以使用firebase deploy functions:codebase命令指定要部署的代码库。

firebase deploy functions:codebase

如果您的功能集合分布在多个存储库中,则只需使用firebase deploy命令即可。 Firebase CLI不会提示您从其他代码库中删除现有的Firebase功能集合。

但是,如果您的功能集合在单声道存储库设置中,则可能会发现将目标设置为特定代码库是有益的,而不是在Mono Repo中部署所有代码库。

firebase deploy functions:codebase

Firebase功能NX Generator

对于使用nx的人或想使用NX管理Firebase项目的人,您可能会发现尝试创建的生成器以创建Firebase函数为NX应用程序是有益的。全力支持代码库-@nx-toolkits/firebase

每个Firebase函数代码库作为NX应用程序生存,并具有NX的所有好处,例如代码库和缓存之间的代码分析。有关更多信息,请查看此post关于我为什么构建发电机的动机。

怎么运行的

首先,使用您喜欢的软件包管理器安装 @nx-toolkits/firebase发电机。

// npm
npm i  @nx-toolkits/firebase

// yarn
yarn add @nx-toolkits/firebase

//pnpm
pnpm add  @nx-toolkits/firebase

要在默认代码库中生成函数,只需运行以下命令:

nx g @nx-toolkits/firebase:functions

nb:,请确保您在项目的根目录中运行Firebase初始化。将来,我也希望也能够处理。

这将创建或覆盖默认代码库应用程序。要创建具有不同代码库的NX应用程序,只需运行以下命令:

nx g @nx-toolkits/firebase:functions --codebase codebase-2

就是这样。运行针对您刚刚生成的应用程序的nx deploy命令,只会部署正确的代码库的功能。

nx run my-functions-app:deploy

就是这样。

结论

在这篇文章中,我们研究了如何在Firebase功能中使用代码库来组织我们的Firebase功能,从而随着应用程序的增长而易于维护和部署。

对于任何项目而言,重要的是要提高有效性并确保以最小的冲突和速度来开发和维护不同的功能。

代码库使组织可以轻松地决定如何组织火箱功能,因为它对它们很有意义,无论是在单声道存储库中还是在多个存储库中,以实现业务目标。

资源