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'(用于发布),它将使用当前目录结构之外的一个更新共享文件夹.
我想在节点中编写一个自定义库,我想将其包含在我的 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'(用于发布),它将使用当前目录结构之外的一个更新共享文件夹.