将 ReasonML 编译的 JavaScript 模块部署到 Google Cloud Functions 与部署 EcmaScript 模块大致相同,因此了解基础知识的好教程是https://cloud.google.com/functions/docs/tutorials/http#functions-更新-安装-gcloud-node8
你需要确保的主要事情是 Reason 输出一个看起来像 GCF 期望的转译的 JavaScript 模块。但是,我确实预见到使用 Webpack 会出现问题,因为它希望将本地版本的 Express 打包到输出 JS 中,而我们不希望这样——我们希望使用 GCF 提供的 Express。
为了解决这个问题,我可能不会使用 JavaScript 捆绑器,而是bs-platform
在package.json
dependencies
部分中列出,以便在函数部署期间安装它,并express
在peerDependencies
部分中列出,以便部署使用提供的 Express 版本。
根据参考资料,您可以随意命名模块文件,只要您package.json
在行中列出名称即可"main": "src/App.bs.js"
。在本例中,您可以命名您的 Reason 源文件src/App.re
。
下一步是确保您的函数符合 Express 路由处理程序的外观。如果您注意到,我链接到的教程在 JavaScript 中显示了这个函数形状:exports.foo = (req, res) => ...;
. 要将一个 Reason 函数编译成这个形状,我们需要一个非柯里化的Reason 函数:
let helloworld2 = (. _req, res) => {
open Express;
res
|> Response.status(Response.StatusCode.Ok)
|> Response.sendString("Hello world!")
};
(函数参数左括号后面的点表示它是一个非柯里化函数。顺便说一句,我还将该函数重新排列为更惯用的 Reason 样式。)
最后,您部署:
gcloud beta functions deploy helloworld2 --runtime nodejs8 --trigger-http
helloworld2
告诉部署命令在部署的模块中运行哪个函数。