到目前为止,我一直在使用Firebase Functions。这一次,我想在同一项目中使用Firebase Functions和Cloud Run。有没有在Firebase Functions和Cloud Run之间共享一些代码的好方法?仅通过创建符号链接(symbolic link)就能工作吗?还是我需要创建私有(private)npm软件包?

我的开发环境是Windows 10,节点8。我正在使用Firebase-tools部署Firebase功能,并打算使用gcloud命令来部署Cloud Run。

-编辑

我研究了如何将私有(private)npm软件包与Google Cloud Source Repository结合使用。这个小项目看起来有些麻烦。然后我找到了有用的信息。



我在下面以相同的方式尝试了,它似乎工作正常。

-编辑2

项目文件夹结构:

project/ ................... <- specify project root when `docker build`
├─ .dockerignore ...........
├─ containers/ .............
│  ├─ package.json ......... <- gather docker commands here
│  └─ hello-world/ .........
│     ├─ Dockerfile ........ <- COPY modules from functions in this Dockerfile
│     ├─ index.js .......... <- require modules from here
│     ├─ package-lock.json .
│     └─ package.json ......
├─ functions/ ..............
│  ├─ index.js .............
│  ├─ package-lock.json ....
│  ├─ package.json .........
│  ├─ modules/ .............
│  │  ├─ cloudStorage/ ..... <- wanted module
│  │  │  ├─ index.js .......
│  │  │  ├─ package.json ...
│  │  │  └─ test.js ........

在Dockerfile中:
WORKDIR /usr/src/app
COPY functions/modules ../../functions/modules

.dockerignore在项目根目录下:
**/.git
./node_modules # <- ignore only root node_modules to COPY node_modules inside wanted modules

在容器内的js中需要复制的功能模块:

const cloudStorage = require('../../functions/modules/cloudStorage')

构建脚本:
{
  "scripts": {
    "build:hello-world": "docker build ../ --tag gcr.io/project/hello-world -f hello-world/Dockerfile",
  }
}

这样,可以在容器外部测试js时加载模块,甚至可以在容器内部加载模块。

这会引起任何问题吗?请让我知道是否有任何问题。

谢谢。

最佳答案

符号链接(symbolic link)根本不起作用,因为到Cloud Functions或Cloud Run的每个部署都是完全独立的。他们不共享任何文件系统。您将必须将共享代码部署到每个产品。私有(private)npm包可能有效。最重要的是,您的package.json将必须描述从何处获取代码,否则该代码将成为部署的一部分。

关于node.js - 在Firebase功能和Cloud Run之间共享代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59394148/

10-16 22:29