🙌

Firebaseにデプロイが反映されなくなったが、package.jsonのmainが原因だった件

2024/08/14に公開

状況

  • Firebase Functionに、新しく書いた関数のデプロイが反映されない
  • デプロイ自体はエラーなく実行できるているが、Functionsを見ても新しく書いた関数が追加されていない
  • エラーは特に出ていないので原因不明で発狂。ChatGPTもお手上げ。

環境

  • フロント : TypeScript * React(Vite)
  • バック : TypeScript * Firebase

ざっくりディレクトリ構成

- vite-project
    - function //Firebase周り
    - common/schema //フロントでもバックでも使う型を定義
    - src //フロントのコード
    - App.tsxなど

原因と対策

ざっくり原因

  • ディレクトリ構成を変えたせいで、Firebaseが参照すべきファイルのパスが変わり、更新されないファイルをデプロイしていた
  • functions直下のpackage.jsonの"main"のパス指定先が自動で更新されていなかった

該当箇所

before

  "main": "lib/functions/index.js",

だった気がする(うろ覚え)

after

  "main": "lib/functions/src/index.js",

補足

  • lib配下のファイルは、build時に自動生成される
    • TypeScriptをJavaScriptにコンパイルしてFirebaseで読み込める形にしてるっぽい
  • 最終的に読み込むファイルがmainで規定されており、ここのパス指定が変わるとデプロイは成功しても最新のコードじゃない場合がある
    • 同じような内容のindex.jsが複数自動生成されることもあるようなので要注意

足どり

  • 変えたのが全く反映されないので、Firebaseが読み込んでないのだろうと予想
  • TypeScriptからJavaScriptへのコンパイル時か、コンパイルしたJavaScriptのデプロイ時のどちらかで何か起きてるのでは?
  • コンパイルの方はいじっても何も変わらなかったので、デプロイの参照元を見た。
  • 実際はこんなスマートに行かなくて、体感5時間くらい溶かした

Discussion