Google Cloud Functions包括私有库

时间:2017-03-02 08:22:28

标签: node.js google-compute-engine google-cloud-functions

我正在寻找在节点中编写自定义库,我想将其包含在我的云功能中。由于这是共享代码,因此我希望能够在我的所有云功能中使用它。

编写共享代码库并通过多个云函数访问它的最佳方法是什么。

例如,假设我有两个云函数,functionA和functionB。

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

如果您使用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 docs

答案 1 :(得分: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”(用于发布),它就会使用当前目录结构之外的文件夹更新共享文件夹。