Google Cloud Functions 包含私有库

Google Cloud Functions include private library

我想在节点中编写一个自定义库,我想将其包含在我的 Cloud Functions 中。由于这是共享代码,我希望能够在我的所有 Cloud Functions 中使用它。

编写共享代码库并让多个 Cloud Functions 访问该库的最佳方法是什么。

例如,假设我有两个 Cloud Functions,functionA 和 functionB。

我有一个名为 "common.js" 的节点 javascript 文件,它有一个 javascript 函数,我想将其公开给 functionA 和 functionB。

exports.common = {
    log: function(message) {
        console.log('COMMON: ' + message);
    }
};

所以在 functionA 中我想要这个文件并调用 "common.log('test');"。

我认为这是最基本的问题,但老实说,我在任何地方都找不到答案。

如有任何帮助,我们将不胜感激。这实际上是唯一阻止我使用 GCF 作为我现在和将来开发代码的方式的事情!

如果您使用 gcloud 命令行工具来部署您的函数,它将上传所有1 本地目录中的文件,因此任何正常的 Node.js 做 include/require 的方法应该可行。

在Node.js中,写require('./lib/common')将在lib子目录中包含common.js文件。由于您的文件导出了一个名为 common 的对象,因此您可以直接从 require 返回的对象中引用它。见下文。

文件布局

./
../
index.js
lib/common.js

index.js

// common.js exports a 'common' object, so reference that directly.
var common = require('./lib/common').common;

exports.helloWorld = function helloWorld(req, res) {
  common.log('An HTTP request has been made!');
  res.status(200);
}

部署

$ gcloud functions deploy helloWorld --trigger-http

备注

1 当前 gcloud 不会上传 npm_modules/ 目录,除非您指定 --include-ignored-files(参见 gcloud docs

我找到的处理此问题的最佳方法(无需通过 npm 发布您的包)是使用“预部署”复制脚本,即:

"scripts": {
    "copy-shared": "rm -rf ./shared && cp -rf ../shared ./ && cp ../credentials.json ./",
    "deploy": "npm run copy-shared && gcloud functions deploy updateUser --runtime nodejs12 --trigger-http",
    "dev": "npm run copy-shared && IS_DEV=true functions-framework --target=updateUser"
}

所以你只需 运行 'npm run dev'(用于本地测试)或 'npm run deploy'(用于发布),它将使用当前目录结构之外的一个更新共享文件夹.