web-dev-qa-db-ja.com

Cloud Functionsのデプロイが失敗する:「関数はユーザーコードの読み込みに失敗しました。エラーメッセージ:ファイルlib / index.jsのコードを読み込めません。」

Firebase-functionsモジュールを3.0.1にアップグレードしました。 Cloud Functionsをデプロイすると、次の警告メッセージが表示されます。

⚠関数:Node 6ランタイムへの関数のデプロイ。これは非推奨です。Node 8が使用可能であり、推奨ランタイムです。

その後、展開は次のように失敗します。

Function failed on loading user code. Error message: Code in file lib/index.js can't be loaded.
Is there a syntax error in your code?
Detailed stack trace: /user_code/node_modules/firebase-functions/lib/providers/https.js:282
    const func = async (req, res) => {
                       ^

SyntaxError: Unexpected token (
    at createScript (vm.js:56:10)
    at Object.runInThisContext (vm.js:97:10)
    at Module._compile (module.js:549:28)
    at Object.Module._extensions..js (module.js:586:10)
    at Module.load (module.js:494:32)
    at tryModuleLoad (module.js:453:12)
    at Function.Module._load (module.js:445:3)
    at Module.require (module.js:504:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/user_code/node_modules/firebase-functions/lib/index.js:39:15)

どうすれば修正できますか?

10
Doug Stevenson

以前は、ノード6がデフォルトのターゲットランタイムでした。現在、ノード6はLTS(長期サポート)の有効期限が切れています。 CLIバージョン6.8.0では、ノード6は非推奨になりました。代わりに、ノード8をターゲットとしてデプロイすることをお勧めしました。これで、firebase-functions @ 3.0.0以降、ノード6のサポートが完全に削除されました。package.jsonでノード8を明示的にターゲットにする必要があります。

{
  // other configurations here…
  "dependencies": {
  },
  // Add an “engines” child to choose a node version, here it’s node 8.
  "engines": {
    "node": "8"
  }
}

このバージョンでのもう1つの関連する変更は、ノード6のサポートも削除するfirebase-admin 8.xへの依存です。

エラーメッセージ自体は、キーワードasyncが認識されないことを示しています。これはノード6ではサポートされていません。

12
Doug Stevenson