firebase関数の入門ガイド に従い、デプロイしようとすると一見単純なエラーが表示されます:
firebase deploy --only functions
i deploying functions
Running command: npm --prefix $RESOURCE_DIR run lint
npm ERR! path C:\Users\Beat\leginformant\$RESOURCE_DIR\package.json
npm ERR! code ENOENT
npm ERR! errno -4058
npm ERR! syscall open
npm ERR! enoent ENOENT: no such file or directory, open
'C:\Users\Beat\leginformant\$RESOURCE_DIR\package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
Package.jsonファイルは、チュートリアルがproject/functions/package.jsonで示しているように存在します。 RESOURCE_DIR envを変更または印刷しようとしましたが、成功しませんでした。 NPMシェル環境内でスコープされると仮定します。
npmバージョン:5.6.0
ノードバージョン:8.9.0
これは、Firebase CLI 3.17.0から3.17.3までの既知の問題ですが、Windowsでのみ発生します。プロジェクトのルートでfirebase.json
を編集し、そこに表示されるnpmコマンドで$RESOURCE_DIR
を%RESOURCE_DIR%
に置き換えることにより、これをマシンで修正できます。前者は環境変数を使用するUNIX構文の方法であり、後者はWindowsコマンドシェル構文です。 Windowsを使用しているため、Windows構文を使用する必要があります。
チームは、使用している設定ファイルを変更する必要がないようにする方法を検討しています。プラットフォーム間で同じファイルを何度も変更し続けるチームにとってはあまり便利ではないからです。
編集:この問題は、CLIバージョン3.17.5で作成されたプロジェクトで修正する必要があります。
これを修正するには、firebase.json
ファイルにアクセスし、RESOURCE_DIR
を含むこの行を削除します。
走るとき
firebase init functions
この構成を使用します
? What language would you like to use to write Cloud Functions? JavaScript
//TypeScript doesn't work
? Do you want to use ESLint to catch probable bugs and enforce style? Yes
//If you don't you will get a missing file lint
? File functions/package.json already exists. Overwrite? Yes
? Do you want to install dependencies with npm now? Yes
//Why not
その後、Windowsを使用する場合
Firebase.jsonで$ RESOURCE_DIRを%RESOURCE_DIR%に置き換えます
以下を変更します。
npm --prefix \"$RESOURCE_DIR\" run lint
に
npm --prefix \"%RESOURCE_DIR%\" run lint
メイン構造内のfirebase.jsonファイル内
{
"functions": {
"predeploy": [
"npm --prefix \"%RESOURCE_DIR%\" run lint"
],
"source": "functions"
}
}
Windowsでは、firebase init
、Infirebase.json
ファイルを使用してCLIでfirebaseプロジェクトを初期化しながら、以下のようにコードを変更します{ "functions": { "predeploy": [ "npm --prefix \"%RESOURCE_DIR%\" run lint" ], "source": "functions" } }
この変更後、firebase deploy --only functions
コマンドを試してください。
他の提案とは別に、preflight/predeployコマンドを次から変更した場合:
"npm --prefix \"$RESOURCE_DIR\" run lint", OR
"npm --prefix \"%RESOURCE_DIR%\" run lint"
に
"npm --prefix ./functions run lint"
この問題は修正されたようです。これにより、WindowsとLinuxの両方で解決されます。
詳細については、次の回答(およびスレッド)をご覧ください。 https://github.com/firebase/firebase-tools/issues/610#issuecomment-360147507
変更する必要がありますfirebase.json
ここに示すファイル
"npm --prefix functions run lint"
"npm --prefix functions run build"
Ubuntuの場合は、firebase.json
フォローするには、注意$
前 RESOURCE_DIR
{
"functions": {
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint",
"npm --prefix \"$RESOURCE_DIR\" run build"
]
}
}
windows 10の場合、firebase.json
nをフォローするには、注意%
前後のRESOURCE_DIR
{
"functions": {
"predeploy": [
"npm --prefix \"%RESOURCE_DIR%\" run lint",
"npm --prefix \"%RESOURCE_DIR%\" run build"
]
}
}
余分なnpm --prefix%RESOURCE_DIR%を実行すると、@ Deji Jamesが言ったようにlintを実行すると、ある程度進歩しましたが、まだ機能しませんでした。
提案として、私はこれを見つけました https://github.com/firebase/firebase-tools/issues/61
@merlinnotがここで言っていますねえ、皆さん、おそらくfirebase.jsonでの事前展開に自信がありますよね?それほど重要ではない場合は、今のところそこにあるものをdeleteだけ。
私のために働いた。 PS。削除を決定する前に、すべての再インストール、アンインストールを完了しました。これだけが機能します。