到目前为止,我一直在使用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/