[Firebase]Cloud Functions for Firebase で runtime を Node.js 12 にしてデプロイする方法
はじめに
Cloud Functions for Firebase でデプロイの際にnodeのバージョン周りでエラーが出てハマったのでまとめました。
簡潔に設定の仕方を紹介した後、ハマりどころを末尾に記載しておきます。
runtime を Node.js 12 にしてデプロイする方法
やり方は全部で2つあります。
1. package.jsonに記述する方法
以下のようにenginesに"node":"12"と記載する
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
},
"engines": {
"node":"12"
},
"dependencies": {
},
"devDependencies": {
},
"private": true
}
2. firebase.jsonに記述する方法
firebase functions をinitするとinitしたカレントディレクトリに firebase.jsonが作成されると思います。そこに以下のような記述を足すことでランタイムを指定できます!
{
"functions": {
"runtime": "nodejs12",
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint"
]
}
}
v8.6.0で変更があったみたいです。 or と書いてあるように、package.jsonでやるやり方も使えます
ランタイム指定がうまくいった時のdeployのログ
以下のように、 creating Node.js 12 ~~~
と出ていれば指定できています!
大前提・要注意
1. FirebaseのプランをBlazeプラン(従量課金プラン)にすること
2. グローバルインストールされている firebase-toolsが最新のものであること!
これが古いままだと以下のようなエラーが出ます
Error: package.json in functions directory has an engines field which is unsupported. The only valid choices are: {"node": "8"} and {"node": "10"}.
3. 使用しているライブラリが必要とするnodeのバージョン要件をローカル環境が満たしていること!
deployなのでてっきりpackage.jsonに正しくランタイム指定されていればクラウド上で問題なくビルドしてくれると思ってましたが、どうやら自分が想像していたのとはビルドの仕組みが違うみたいで..(勉強します。)
自分は使用しているライブラリがnode v12以上を要求していたにも関わらず、ローカルのnodeのバージョンがv10系だったため、延々と以下のエラーが出てしまいました。
Error: There was an unknown problem while trying to parse function triggers. Please ensure you are using Node.js v6 or greater.
自分はnodebrewを使っていたので以下で解決しました。バージョンはご自身のライブラリの要件に合わせてしよしなに変えてください。
nodebrew use 12.20.1
新しく作った環境にfirebase-toolsがない場合は以下も実行
npm i -g firebase-tools
参考
Author And Source
この問題について([Firebase]Cloud Functions for Firebase で runtime を Node.js 12 にしてデプロイする方法), 我々は、より多くの情報をここで見つけました https://qiita.com/iron-smri/items/833c86f956f10a7ea765著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .