我正在寻找在节点中编写自定义库,我想将其包含在我的云功能中。由于这是共享代码,因此我希望能够在我的所有云功能中使用它。
编写共享代码库并通过多个云函数访问它的最佳方法是什么。
例如,假设我有两个云函数,functionA和functionB。
我有一个名为“common.js”的节点javascript文件,它有一个javascript函数,我想向functionA和functionB公开。
exports.common = {
log: function(message) {
console.log('COMMON: ' + message);
}
};
所以在functionA中我想要这个文件并调用“common.log('test');”。
我认为这是最基本的问题,但老实说,我无法在任何地方找到答案。
任何帮助都将非常感激。这实际上是阻止我使用GCF作为我现在和将来开发代码的方式的唯一因素!
答案 0 :(得分:4)
如果您使用gcloud
命令行工具来部署您的功能,它将上传本地目录中的所有 1 文件,因此任何正常的Node.js方式都可以要求应该工作。
在Node.js中,编写require('./lib/common')
将在common.js
子目录中包含lib
文件。由于您的文件导出名为common
的对象,因此可以直接从require
返回的对象引用它。见下文。
./
../
index.js
lib/common.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”(用于发布),它就会使用当前目录结构之外的文件夹更新共享文件夹。