Развертывание скомпилированного ReasonML модуля JavaScript в Google Cloud Functions во многом аналогично развертыванию модуля EcmaScript, поэтому хорошим руководством для понимания основ является https://cloud.google.com/functions/docs/tutorials/http#functions-update-install-gcloud-node8
Главное, что вам нужно убедиться, это то, что Reason выводит переносимый модуль JavaScript, который выглядит так, как ожидает GCF. Однако я предвижу проблему с использованием Webpack, потому что он захочет упаковать вашу локальную версию Express в выходной JS, а мы этого не хотим - мы хотим использовать Express, предоставленный GCF.
Чтобы обойти эту проблему, я бы, вероятно, не использовал пакет JavaScript, а вместо этого перечислял бы bs-platform
в разделе package.json
dependencies
, чтобы он устанавливался во время развертывания функции, и express
в peerDependencies
раздел, так что при развертывании используется предоставленная версия Express.
В соответствии с ссылкой , вы можете назвать файл модуля так, как вам нравится, если вы перечислите имя в package.json
со строкой "main": "src/App.bs.js"
. В этом примере вы можете назвать исходный файл Reason src/App.re
.
Следующий шаг - убедиться, что ваша функция соответствует тому, как должен выглядеть обработчик экспресс-маршрутизации. Если вы заметите, учебник, на который я ссылался, показывает эту форму функции в JavaScript: exports.foo = (req, res) => ...;
. Чтобы скомпилировать функцию Reason для этой формы, нам нужна uncurried Функция 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
сообщает команде deploy, какую функцию запустить в развернутом модуле.