Cloud Functions:如何上传附加文件以在代码中使用?

Posted

技术标签:

【中文标题】Cloud Functions:如何上传附加文件以在代码中使用?【英文标题】:Cloud Functions: how to upload additional file for use in code? 【发布时间】:2018-08-05 09:48:55 【问题描述】:

我需要在我的代码中访问protoc 文件。在本地我只是把它放在文件夹中,但是如何从部署的 Firebase 函数中获取这个文件?

const grpc = require('grpc');
const PROTO_PATH = __dirname + '\\protos\\prediction_service.proto';

exports.helloWorld = functions.https.onRequest((request, response)
    var tensorflow_serving = grpc.load(PROTO_PATH).tensorflow.serving;
...

【问题讨论】:

【参考方案1】:

您要上传 3 个文件来部署您的 Cloud Function:

index.js package.json prediction_service.proto

要通过开发者控制台执行此操作,您需要:

    转到 Google Cloud Developer Console > Cloud Functions > Create Function 在“源代码”字段中,选择: “ZIP 上传”并选择一个 zip 文件,包括您的 3 个文件, “ZIP from Cloud Storage”并在 GCS 上选择文件位置, “云源存储库”并提供您的存储库详细信息 填写剩余字段并点击“创建”

部署后,您将在函数的源选项卡中看到显示的三个文件。

或者,您可以使用 gcloud 通过以下命令部署文件:

gcloud beta functions deploy <functionName> --source=SOURCE

其中 source 可以是 Google Cloud Storage 上的 ZIP 文件、对源代码库的引用或本地文件系统路径。我建议您查看 doc 以获取此命令的完整详细信息。

【讨论】:

太棒了!我们是否有能力使用命令行上传而不是每次都创建存档? 两个问题都是。我已编辑我的答案以包含此信息。【参考方案2】:

对于 Firebase 函数,我发现这种方式最简单:

    将您的 .proto 文件放入 firebase 项目的 functions 文件夹(index.js 和 package.json 所在的位置)。 使用 CLI 命令firebase deploy --only functions 正常部署您的功能

正如您在此处看到的,该文件会自动添加到 GCP 中的项目中:

你可以在你的 node.js 项目中访问它:

protobuf.load(__dirname + '/schema.proto')

【讨论】:

【参考方案3】:

当您将 Firebase Cloud Functions 与 TypeScript 一起使用时(您的代码在 functions/src/index.ts 中),您需要将附加文件放在 functions/lib

【讨论】:

为确保顺利进行,您可以更新 package.json 构建命令以运行自定义脚本来复制文件。即“构建”:“节点复制-deps && tsc”。这意味着标准的“firebase deploy --only 函数”将自动复制文件【参考方案4】:

虽然可以使用 GCS,但在源代码中包含文件很简单。

    将您的 package.json、index.js(或 package.json 的“main”字段中指定的任何文件)和其他依赖文件放在一个目录中。 创建函数时,通过 ZIP 上传或云源存储库提供包含其他文件的目录。 您的其他文件可在path.join(__dirname, 'your/path/file.ext') 获得

【讨论】:

感谢您的回复,您能否详细描述一下主要领域?我没有这样的 这是可选的。如果您想为您的条目 javascript 文件使用不同的文件名,您可以将 'main': 'yourfile.js' 添加到 package.json。它记录在here 并在this SO question 中讨论

以上是关于Cloud Functions:如何上传附加文件以在代码中使用?的主要内容,如果未能解决你的问题,请参考以下文章