Node.js 谷歌云功能包括私有库
我希望在node中编写一个自定义库,并希望将其包含在我的云函数中。由于这是共享代码,我希望能够在我的所有云功能中使用它 编写共享代码库并让多个云函数访问它的最佳方法是什么 例如,假设我有两个云函数,function和functionBNode.js 谷歌云功能包括私有库,node.js,google-compute-engine,google-cloud-functions,Node.js,Google Compute Engine,Google Cloud Functions,我希望在node中编写一个自定义库,并希望将其包含在我的云函数中。由于这是共享代码,我希望能够在我的所有云功能中使用它 编写共享代码库并让多个云函数访问它的最佳方法是什么 例如,假设我有两个云函数,function和functionB exports.common = { log: function(message) { console.log('COMMON: ' + message); } }; 我有一个名为“common.js”的节点javascript文
exports.common = {
log: function(message) {
console.log('COMMON: ' + message);
}
};
我有一个名为“common.js”的节点javascript文件,它有一个javascript函数,我想向functionA和functionB公开该函数
exports.common = {
log: function(message) {
console.log('COMMON: ' + message);
}
};
所以在functionA中,我需要这个文件并调用“common.log('test');”
我认为这是最基本的问题,但老实说,我在任何地方都找不到答案
任何帮助都将不胜感激。这实际上是唯一阻止我现在和将来使用GCF开发代码的方法 如果您使用命令行工具部署您的功能,它将上载本地目录中的所有文件,因此任何正常的Node.js include/require方法都应该有效
在Node.js中,编写require('./lib/common')
将在lib
子目录中包含common.js
文件。由于文件导出名为common
的对象,因此可以直接从require
返回的对象引用它。见下文
文件布局
index.js
//common.js导出一个“common”对象,因此直接引用它。
var common=require('./lib/common')。common;
exports.helloWorld=函数helloWorld(req,res){
common.log('已发出HTTP请求!');
物质状态(200);
}
部署
注意
1当前,
gcloud
不会上载npm\u模块/
目录,除非您指定——包含忽略的文件(请参见)我发现处理此问题的最佳方法(无需通过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”(用于发布),它将使用当前目录结构之外的文件夹更新共享文件夹。Wow。。。我只是在功能方面没有正确的心态。现在这太明显了!我的设置正确,它100%完美地工作。非常感谢。谢谢你的回复。如果我的理解是正确的,这意味着如果您有3个要部署的函数,并且每个函数都使用相同的公共库,那么您必须在每个函数文件夹中复制此公共库?有没有办法在3个函数之间共享这个库而不复制它?谢谢如果我的lib/common.js
位于functions
文件夹之外怎么办?行吗?
"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"
}