Развертывание скомпилированного с помощью 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
сообщает команде развертывания, какую функцию выполнять в развернутом модуле.
person
Yawar
schedule
28.08.2018