10

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

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

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

我有一个名为“common.js”的节点 javascript 文件,它有一个我想向 functionA 和 functionB 公开的 javascript 函数。

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

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

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

非常感激任何的帮助。这实际上是唯一阻止我使用 GCF 作为我现在和未来开发代码的方式的事情!

4

2 回答 2

7

如果您使用gcloud命令行工具来部署您的函数,它将上传您本地目录中的所有1 个文件,因此任何正常的 Node.js 执行包含/要求的方式都应该有效。

在 Node.js 中,写入require('./lib/common')会将common.js文件包含在lib子目录中。由于您的文件导出了一个名为的对象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 文档

于 2017-03-04T00:48:25.593 回答
0

我发现处理这个问题的最好方法(不必通过 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”(用于发布),它将使用当前目录结构之外的文件夹更新共享文件夹。

于 2021-02-20T13:04:05.940 回答