Firebase-tools: firebase.json'functions.ignore'bloatsパッケージのアップロード

作成日 2019年08月15日  ·  3コメント  ·  ソース: firebase/firebase-tools

削除しないでくださいvalidate_template = true template_path = .github / ISSUE_TEMPLATE / bug_report.mdFirebaseコミュニティに貢献していただきありがとうございます。 md5-cd82511516d4d120ac6f38b938897bc8ええ、私たちは間違いなく完璧ではありません! このテンプレートを使用し、問題を開くときに最小限の再現を含めてください。 問題の解決方法をご存知の場合は、プルリクエストを作成してください。喜んで確認させていただきます。 md5-d1dc1414712186318d009e8257a27e48すばらしいです。製品を改善する方法を聞くのが大好きです。 ただし、このテンプレートを使用して機能リクエストを送信しないでください。 機能リクエストを次のアドレスに送信してください:https://firebase.google.com/support/contact/bugs-features/ md5-a11e3d9ea91af19a593bf84612124e1aたくさんありますが、GitHubは最適な場所ではありません。閉鎖されます。 最初にガイドをご覧ください:https://firebase.google.com/docs/cli/公式ドキュメントが役に立たない場合は、公式サポートチャネル(https://firebase.google.com/)からお問い合わせください。 support /コミュニティからの解決策や支援を確認するための追加の場所:-Stack Overflow:https://stackoverflow.com/ --Firebase Slack Community:https://firebase.community/ *複数のチャネルにまたがる重複投稿は避けてください!*

環境情報


firebase-tools:

firebase --version
7.2.2


プラットホーム:
MacOS(10.14.6(18G87))とWindows10開発環境の両方。

テストケース


MCVE:Firebase関数テンプレート+ firebase.jsonの 'functions.ignore'セクション

再現する手順

Firebaseプロジェクトを作成します。

デフォルトのオプションを使用してfirebaseinit関数を実行し、それを新しいプロジェクトに追加します。

firebase init functions

index.jsのhelloWorldサンプル関数のコメントを解除してデプロイします。

⋊> ~/D/f/functions firebase deploy                                                                                    11:02:38

=== Deploying to 'test-function-deploy-3a957'...

i  deploying functions
i  functions: ensuring necessary APIs are enabled...
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (22.95 KB) for uploading
✔  functions: functions folder uploaded successfully
i  functions: updating Node.js 8 function helloWorld(us-central1)...
✔  functions[helloWorld(us-central1)]: Successful update operation. 

✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/test-function-deploy-3a957/overview
⋊> ~/D/f/functions

デプロイされたパッケージ化された関数のサイズ(22.95KB)に注意してください。

firebase.jsonを編集して、「functions.ignore」セクションを含めます。

{
  "functions": {
    "ignore": []
  }
}

再デプロイ:

⋊> ~/D/f/functions firebase deploy                                                                                    11:03:24

=== Deploying to 'test-function-deploy-3a957'...

i  deploying functions
i  functions: ensuring necessary APIs are enabled...
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (9.07 MB) for uploading
✔  functions: functions folder uploaded successfully
i  functions: updating Node.js 8 function helloWorld(us-central1)...
✔  functions[helloWorld(us-central1)]: Successful update operation. 

✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/test-function-deploy-3a957/overview
⋊> ~/D/f/functions 

デプロイされたパッケージが22.95KBから9.07MBに増加したことに注意してください。

予想される行動

無視すると、デプロイされたパッケージが大きくなるのではなく小さくなると思います。

実際の動作

デプロイされたパッケージのサイズは、22.95KBから9.07MBに数桁増加します。

参考までに、この場合、ローカルnode_modulesを含むfunctionsフォルダーのサイズは29MBです。 node_modulesフォルダー自体はディスク上で28.9MBで、gzipで圧縮されたサイズは約6MBです。

これはTypeScriptプロジェクトにも影響します。おそらく、問題はtscの部分の後でトリガーされるためです。

コメント

firebase.json構成ファイル、特にfunctionsセクションの適切で決定的なドキュメントはまだ見つかりません。 hostingセクションのドキュメントがここにありますfunctions.ignoreの構造/使用法についての私の理解は、現在https://github.com/firebase/firebase-tools/issues/291#issuecomment-322526710に基づいています。

関連する問題#429があり、 @ laurenzlongは、 ignoreセクションを操作可能/修正する必要があることを示しています。

未解決の質問

デプロイする前に、デプロイされたパッケージはローカルにビルドされますか? --debugを使用して実行しましたが、有用なファイルパスを見つけることができませんでした。

ありがとう!

検討していただきありがとうございます! そして、私の電話テザリングデータプランはこれを解決してくれてありがとう。私の現在のプロジェクトの展開は何が起こっているのか理解する前に約55MBです:)

最も参考になるコメント

あなたが説明した振る舞いは、私が期待する振る舞いです。

ご指摘のとおり、ドキュメントにはfunctions.ignoreについては説明されていません。 ただし、 CLIによって使用されます

非公式に(_undocumented_であるという点で)、 firebase.ignoreのデフォルトは["node_modules"]です。 これにより、デプロイ中にアップロードする必要のあるものの量を制限できます(これは、非常に大きくなり、非常に速くなる可能性があります)。 package.jsonfirebase.ignoreを設定することにより、CLIに_nothing_を無視するように指示します。 これで、 node_modulesフォルダーがアーカイブに含まれ、Functionsに送信されます。

あなたの質問に答えるために:プロセスの高レベルの説明では、CLIはローカルでパッケージをビルドしません。 それは大まかに次のことを行います:

  1. 関数の事前デプロイスクリプトを実行します( firebase.jsonでも指定されます)。
  2. デプロイする関数のソースコードを解析します。
  3. ソースコードを圧縮し(通常はnode_modulesを無視します)、Functionsにアップロードします。

ソースコードがアップロードされると、Functionsインフラストラクチャは$ package.json npm installを実行し、ソースはユーザーにサービスを提供する準備が整います(少なくとも、この非常に手に負えない説明では)。

それがあなたの質問に答えることを願っています。 ただし、ここにはCLI関連のバグがないため、この問題を解決します。

全てのコメント3件

あなたが説明した振る舞いは、私が期待する振る舞いです。

ご指摘のとおり、ドキュメントにはfunctions.ignoreについては説明されていません。 ただし、 CLIによって使用されます

非公式に(_undocumented_であるという点で)、 firebase.ignoreのデフォルトは["node_modules"]です。 これにより、デプロイ中にアップロードする必要のあるものの量を制限できます(これは、非常に大きくなり、非常に速くなる可能性があります)。 package.jsonfirebase.ignoreを設定することにより、CLIに_nothing_を無視するように指示します。 これで、 node_modulesフォルダーがアーカイブに含まれ、Functionsに送信されます。

あなたの質問に答えるために:プロセスの高レベルの説明では、CLIはローカルでパッケージをビルドしません。 それは大まかに次のことを行います:

  1. 関数の事前デプロイスクリプトを実行します( firebase.jsonでも指定されます)。
  2. デプロイする関数のソースコードを解析します。
  3. ソースコードを圧縮し(通常はnode_modulesを無視します)、Functionsにアップロードします。

ソースコードがアップロードされると、Functionsインフラストラクチャは$ package.json npm installを実行し、ソースはユーザーにサービスを提供する準備が整います(少なくとも、この非常に手に負えない説明では)。

それがあなたの質問に答えることを願っています。 ただし、ここにはCLI関連のバグがないため、この問題を解決します。

情報@bkendallをありがとう。

#291に基づいて、CLIは常にnode_modulesを除外し、 functions.ignoreの内容は追加的であると誤って考えました。 node_modulesに明示的なパターンを追加すると、説明したとおりになります。

@bkendallなぜそれを文書化しないのですか?

このページは役に立ちましたか?
0 / 5 - 0 評価