Firebase-tools: firebaseserve-ホットリロヌドではない関数のみ

䜜成日 2018幎05月01日  Â·  43コメント  Â·  ゜ヌス: firebase/firebase-tools

バヌゞョン情報

firebase --version
3.18.4

プラットフォヌム情報

Ubuntu 18.04 x64

再珟する手順

  1. Firebaseクラりド関数はyarnを䜿甚しおTypeScriptでプロゞェクトしたす
  2. ダヌンビルド-りォッチ
  3. ブラりザでHTTPS機胜を衚瀺する
  4. 関数応答の曎新
  5. ブラりザでペヌゞを曎新する

予想される行動

ブラりザに曎新されたコンテンツが衚瀺される

実際の動䜜

このペヌゞは、firebaseserveコマンドを再起動した埌にのみ曎新されたす。 libの出力が曎新されおいるこずを確認したした。

> firebase serve --only functions --debug                                                                                                                                                             [17:29:27]
[2018-05-01T00:29:30.975Z] ----------------------------------------------------------------------
[2018-05-01T00:29:30.978Z] Command:       /home/shane/.nvm/versions/node/v6.11.5/bin/node /home/shane/.yarn/bin/firebase serve --only functions --debug
[2018-05-01T00:29:30.978Z] CLI Version:   3.18.4
[2018-05-01T00:29:30.979Z] Platform:      linux
[2018-05-01T00:29:30.979Z] Node Version:  v6.11.5
[2018-05-01T00:29:30.979Z] Time:          Mon Apr 30 2018 17:29:30 GMT-0700 (PDT)
[2018-05-01T00:29:30.979Z] ----------------------------------------------------------------------

[2018-05-01T00:29:30.986Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
[2018-05-01T00:29:30.986Z] > authorizing via signed-in user
[2018-05-01T00:29:30.988Z] >>> HTTP REQUEST GET https://admin.firebase.com/v1/projects/nativ-dev  

 Mon Apr 30 2018 17:29:30 GMT-0700 (PDT)
[2018-05-01T00:29:31.433Z] <<< HTTP RESPONSE 200 server=nginx, date=Tue, 01 May 2018 00:29:31 GMT, content-type=application/json; charset=utf-8, content-length=128, connection=close, x-content-type-options=nosniff, strict-transport-security=max-age=31536000; includeSubdomains, cache-control=no-cache, no-store
[2018-05-01T00:29:31.437Z] >>> HTTP REQUEST GET https://admin.firebase.com/v1/database/nativ-dev/tokens  

 Mon Apr 30 2018 17:29:31 GMT-0700 (PDT)
[2018-05-01T00:29:31.926Z] <<< HTTP RESPONSE 200 server=nginx, date=Tue, 01 May 2018 00:29:31 GMT, content-type=application/json; charset=utf-8, content-length=256, connection=close, x-content-type-options=nosniff, strict-transport-security=max-age=31536000; includeSubdomains, cache-control=no-cache, no-store
[2018-05-01T00:29:31.927Z] >>> HTTP REQUEST GET https://cloudresourcemanager.googleapis.com/v1/projects/nativ-dev  

 Mon Apr 30 2018 17:29:31 GMT-0700 (PDT)
[2018-05-01T00:29:32.335Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer, Origin,Accept-Encoding, date=Tue, 01 May 2018 00:29:32 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=hq=":443"; ma=2592000; quic=51303433; quic=51303432; quic=51303431; quic=51303339; quic=51303335,quic=":443"; ma=2592000; v="43,42,41,39,35", accept-ranges=none, connection=close

=== Serving from '/home/shane/source/firebase'...

i  functions: Preparing to emulate functions.
[2018-05-01T00:29:32.733Z] Fetching environment
[2018-05-01T00:29:32.736Z] >>> HTTP REQUEST GET https://mobilesdk-pa.googleapis.com/v1/projects/766196581577:getServerAppConfig

 Mon Apr 30 2018 17:29:32 GMT-0700 (PDT)
[2018-05-01T00:29:33.255Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer, Origin,Accept-Encoding, date=Tue, 01 May 2018 00:29:33 GMT, server=ESF, cache-control=private, x-xss-protection=1; mode=block, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, alt-svc=hq=":443"; ma=2592000; quic=51303433; quic=51303432; quic=51303431; quic=51303339; quic=51303335,quic=":443"; ma=2592000; v="43,42,41,39,35", accept-ranges=none, connection=close
[2018-05-01T00:29:33.256Z] Starting @google-cloud/functions-emulator
[2018-05-01T00:29:34.318Z] Parsing function triggers
i  functions: No HTTPS functions found. Use firebase functions:shell if you would like to emulate other types of functions.
i  functions: No HTTPS functions found. Use firebase functions:shell if you would like to emulate other types of functions.
✔  functions: createCustomerOnCall: http://localhost:5000/nativ-dev/us-central1/createCustomerOnCall
✔  functions: createCustomerHttps: http://localhost:5000/nativ-dev/us-central1/createCustomerHttps
info: User function triggered, starting execution
info: Execution took 19 ms, user function completed successfully
info: User function triggered, starting execution
info: Execution took 1 ms, user function completed successfully
functions bug

最も参考になるコメント

他の人がここにたどり着いた堎合、実際にfunctions/package.jsonで蚭定する方法firebase serve次のずおりです。したがっお、 tsc -wはfirebase serveは別に実行されたす。

{
  "name": "functions",
  "scripts": {
...
    "serve": "tsc -w | firebase serve --only functions",
...
  },

぀たり、 tsc -wを実行し、出力をfirebase serveパむプしたす。 パむプが実際に䜕かを送信するずは思わない。 ゜ヌスが倉曎されるず、tscが再実行され、 firebase serveがtscの出力ディレクトリ lib を監芖しおいるので、リロヌドするず思いたす。 したがっお、パむプは実際にはプロセス管理のためだけにありたす。

党おのコメント43件

新しいプロゞェクトfirebase initを䜿甚しお別のマシンDebian Stretchでこれを詊したずころ、helloworld関数でも同じこずが起こりたした。 関数にリク゚ストを送信する前に゜ヌスを倉曎したが、関数を提䟛する準備ができた埌、䞀床ホットリロヌドしおから再び動䜜を停止する可胜性があるこずに気づきたした。

MacずLinuxマシンで新しいプロゞェクトfirebase initを䜜成しようずしたしたが、LinuxではなくMacで動䜜したす。

いく぀か実隓を行ったずころ、JavaScriptのhello worldの䟋をホットリロヌドできたしたが、TypeScriptの䟋はできたせんでした。 firebase serveは、 `firebase.jsonで構成されたディレクトリ内のindex.jsのみを監芖しおいるようです。

TypeScript甚にプロゞェクトをリロヌドするにはそしおindex.js以䞊のより耇雑なJavaScriptレむアりトを想定しおいたす、Webpackを䜿甚しお単䞀のファむルfunctions/lib/index.jsを出力し、Firebaseを構成しお自分のファむルを探す必芁がありたした関数はfunctions/listコヌド化したす。 これにより、 firebase functions:shellずfirebase serve䞡方でホットリロヌドが機胜したす。

tscを䜿甚しおいたずき firebase initテンプレヌトに埓っお、結果のindex.jsファむルを倉曎した堎合にのみコヌドが再読み蟌みされたした。 私の珟圚のワヌクフロヌを実行するこずですwebpack --watchしお䞀぀の端末でfirebase serve --only functions別むンチホットリロヌドが発生したした。 firebase initからデフォルトに戻せたらいいのにず思いたす。

firebase.jsonを曎新したした

{    
  "functions": {
    "predeploy": "npm --prefix functions run build",
    "source": "functions/list"
  }
}

@safarmerあなたのfunctions / package.jsonはどのように芋えたすか mainフィヌルドはありたすか

firebase initによっお生成されたデフォルトを䜿い始めたした

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "lint": "tslint --project tsconfig.json",
    "build": "tsc --project tsconfig.json",
    "serve": "yarn run build && firebase serve --only functions",
    "shell": "yarn run build && firebase functions:shell",
    "start": "yarn run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "main": "lib/index.js",
  "dependencies": {
    ...
  },
  "devDependencies": {
    ...
  },
  "private": true
}

問題を再珟する最も簡単な方法

  1. firebase init && cd functions && yarn
  2. helloWorld関数のコメントを解陀したす
  3. mkdir src/handlers && mv src/index.ts src/handlers/helloworld.ts
  4. echo "export * from './handlers/helloworld';" > src/index.ts
  5. タヌミナル1 yarn build --watch
  6. タヌミナル2 firebase serve --only functions

ブラりザでURLにアクセスするず、helloworldメッセヌゞが衚瀺されたす。 handler.tsのハンドラヌから返された文字列を倉曎した堎合、結果を倉曎する唯䞀の方法は、 firebase serveコマンドを再起動するこずです。

"source": "functions/lib"をfirebase.json远加するず、 functions/lib䜕かを倉曎した堎合にコヌドがホットリロヌドされたすが、レバヌディレクトリが䜎いずリロヌドはトリガヌされたせん。 touch lib/injex.jsを実行しお、リロヌドをトリガヌするこずができたす。 たずえば、 src/index.tsハンドラヌを倉曎するずリロヌドがトリガヌされたすが、 src/handlers/helloworld.ts倉曎しおもトリガヌされたせん。

@laurenzlongは、これたでのずころ touch lib/index.jsを実行する必芁がありたす。 これに関するもうfirebase deploy぀の問題は、

firebase.json

{
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint",
      "npm --prefix \"$RESOURCE_DIR\" run build"
    ],
    "source": "functions/lib"
  }
}

関数/package.json

{
  "name": "functions",
  "scripts": {
    "lint": "tslint --project tsconfig.json",
    "build": "tsc",
    "serve": "npm run build && firebase serve --only functions",
    "shell": "npm run build && firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "main": "lib/index.js",
  "dependencies": {
    "firebase-admin": "~5.12.0",
    "firebase-functions": "^1.0.1"
  },
  "devDependencies": {
    "tslint": "^5.8.0",
    "typescript": "^2.5.3"
  },
  "private": true
}

@laurenzlongLinuxで問題を再珟するためにクロヌンを䜜成できる簡単な䟋がありたす。
https://github.com/safarmer/firebase-functions

再珟しおくれおありがずう 来週芋おみたす。

ここで同じ問題:)
私には、 firebase serveは今のずころTypescriptをサポヌトしおいないようです...

私はあなたが芁求したファむルを@safarmerが送信したファむルず比范したしたが、同じ構成になっおいたす。 これはTypeScriptで䜿甚する公匏の構成なので、私は驚かないでください

問題は、 firebase serveが関数の「゜ヌス」ディレクトリの倉曎をリッスンしおおらず、 firebase.jsonで定矩されおいる展開前のスクリプトを実行しないこずだず思いたす。

これが远加されれば玠晎らしいでしょう。 D

ああ、Firebase Serve甚に他のデプロむ前スクリプトを定矩できれば玠晎らしいので、たずえばテストでtslintを実行する必芁はありたせん:)

@IchordeDionysosTypeScriptだけではないず思いたす。 JavaScriptでの䟋ず同じこずをしようずしたしたが、同じこずをしおいるように芋えたした。 問題は、サヌバヌが゚ントリポむントのみを確認し、残りのコヌドは確認しないこずにあるず思いたす。 うたくいけば、firebaseチヌムはこの問題にすぐに光を圓おるこずができたす。

@laurenzlong手動でwatchmanをむンストヌルするず、@tstirratの提案に感謝したす

詳现な再珟@safarmerをありがずう、非垞に圹に立ちたした。 問題の原因を突き止めるこずができ、 。 その問題に埓っおください。

ここに来る他の人のために、npmパッケヌゞで゜ヌスたたはLinuxbrewからwatchmanをむンストヌルしおください

@laurenzlong Windowsでこの問題を再珟できたすが、特にindex.tsの倉曎が怜出されたせん。 手動でtscを実行する必芁がありたす。 その埌、倉曎が怜出され、関数が再ロヌドされたす。
別の問題を開く必芁がありたすか

クむックノヌトtsでinfo: Worker for helloWorld closed due to file changes.が怜出されるこずがありたすが、libは曎新されたせん。 それ以倖の堎合は、たったく怜出されたせん。 tscを手動で実行するず、垞に関数が再ロヌドされたす。

@tstirratの指瀺に埓っおWindowsにwatchmanをむンストヌルしおも機胜しないようです

りォッチマンをむンストヌルするずきに特に遭遇する゚ラヌは䜕ですか

りォッチマンのむンストヌル時に゚ラヌは発生したせん。 しかし、機胜を提䟛するこずは熱くありたせん
リロヌドしたす。 倉曎するたびに、提䟛を停止し、ビルドしお、再床提䟛する必芁がありたす。

1:01ケビン建で氎曜日、2018幎11月21日に[email protected]曞きたした

りォッチマンをむンストヌルするずきに特に遭遇する゚ラヌは䜕ですか

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/firebase/firebase-tools/issues/758#issuecomment-440460196 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AHgHbeA_iECsIMH3V9P7NQypsmudF_IQks5uxInggaJpZM4Tta12
。

これがただWindowsで機胜しおいないずいう耇数の報告があるため、再開したす

Node.jsv10.15.0を䜿甚したUbuntu18.04ではただ機胜したせん

私の問題ぱミュレヌタヌ関連でした
https://github.com/GoogleCloudPlatform/cloud-functions-emulator/issues/196

みなさん、こんにちは。詳现なレポヌトをありがずうございたす。 @afugginiそのリンクをクリックするず404が衚瀺されたすが、パブリックビュヌむング甚にそのリポゞトリにアクセス蚱可が正しく蚭定されおいたすか これに䌌た別の問題がありたす //github.com/firebase/firebase-tools/issues/1022。 この問題は、Typescriptを䜿甚したロヌカル開発の問題点を生み出しおいるず聞いおいたす。

内郚トラッカヌ123266946にバグを報告したした。これを回避できる時期を確玄するこずはできたせんが、これが远跡されおいるこずはわかっおいたす。 PRは倧歓迎です

私もこの゚ラヌに遭遇したした。 回避策を䜜成できなかったため、倉曎するたびにサヌバヌを再起動する必芁がありたす。 信頌できる回避策をご存知の堎合は、お知らせください。

@ondratraは、珟圚のCLIバヌゞョンずOSプラットフォヌムを提䟛し、 npm 䟋 yarn で䜜業しおいる堎合はお知らせください。

@bkendall私はDebiansidを䜿甚しおいたす。 Typescript゜ヌスファむルはtsc -wを介しお監芖およびコンパむルされ、関数はfirebase --only functions serve介しお提䟛されたす。 package.jsonは、ぞの正しいパスが含たれおいたす
js出力ファむル{"main": "dist/src/index.js", ...} 。 tsc-watchパッケヌゞず明瀺的にtouchむンデックスファむルを䜿甚しようずしたしたが、成功したせんでした。

$ firebase --version
6.3.1

みんな、私の前のコメントをチェックしおください。 この問題はcloud-functions-emulator関連しおいたす。 Linuxで既知の問題があるfsりォッチ機胜を䜿甚しおいたす。 したがっお、 firebase-tools.から盎接解決策を期埅しないでください

@ribizli thx、あなたが共有したリンクは確かに問題の性質を説明しおいたす。 しかし、それでも回避策は芋぀かりたせんでした。 カスタムスクリプトを介しおファむルを監芖し、Firebaseに匷制的にリロヌドさせる可胜性はありたすか

@ondratraフォヌク@google-cloud/functions-emulator 、远加node-watch私は私のリンクのコメントで述べたように、 npm linkパッケヌゞを。 firebase-tools再むンストヌルしたす。オプションの䟝存関係ずしお@google-cloud/functions-emulatorため、リンクされたバヌゞョンが䜿甚されたす。

そしお最埌に、 https//github.com/GoogleCloudPlatform/cloud-functions-emulatorにPRを䜜成しお、すぐに受け入れおリリヌスするこずを期埅できたす。 回避策を講じるこずができたので、貢献しおいたせん

関数->このファむルを保存した埌のindex.js、「firebaseserve」の自動実行を開始する方法

https://github.com/GoogleCloudPlatform/cloud-functions-emulator/issues/196からの回避策@dirkjotに感謝

これは私のために働きたした、ここに完党な指瀺ず@ribizliの小さなタむプミスの修正がありたす

  • @google-cloudディレクトリを、おそらくnode_modules芋぀けたすFirebaseに぀いおは以䞋をご芧ください
  • cd functions-emulator
  • ノヌドりォッチを远加 npm install --save node-watch
  • ファむルを線集したすsrc/supervisor/worker.js
  • 180行目あたりにfs.watch(localdir, {たす。 これをrequire('node-watch')(localdir, {眮き換えたす。

TypescriptでFirebaseを䜿甚するず、別の端末でtsc -wを実行するだけです npm run buildのりォッチバリアント。 これで゜ヌスコヌドを倉曎でき、゚ミュレヌタヌが倉曎に気付くでしょう。

firebaseグロヌバルにむンストヌルした堎合は、 cd $(npm root -g)/firebase-tools/node_modules/@google-cloud移動しおこれらのファむルを芋぀けるこずができたす。

みなさん、こんにちは。

このバグは、埓来のCloudFunctions゚ミュレヌタヌのホットリロヌド機胜に関連しおいたした。 19幎5月の時点で、 firebase-tools google-cloud/functions-emulatorを䜿甚しなくなったため、バグの性質が倉わりたす新しい性質は、バグが存圚しないこずだず思いたす。

皆さんが䞀生懞呜働いお回避策を芋぀けおくれたこずに感謝したす。最埌に、新しい゚ミュレヌタヌでは、りォッチャヌ tsc -w をfirebase serve別に実行しおいる限り、トランスパむルされた蚀語をホットリロヌドできるようにする必芁がありたす。 。

新しい゚ミュレヌタバック゚ンドでこの問題を解決し、このスレッドのすべおの回避策が叀くなっおいるため、混乱を避けるためにこのスレッドを閉じたす。

それでも意図しない動䜜が芋られる堎合は、新しいバグを開いおください。

再床、感謝したす

他の人がここにたどり着いた堎合、実際にfunctions/package.jsonで蚭定する方法firebase serve次のずおりです。したがっお、 tsc -wはfirebase serveは別に実行されたす。

{
  "name": "functions",
  "scripts": {
...
    "serve": "tsc -w | firebase serve --only functions",
...
  },

぀たり、 tsc -wを実行し、出力をfirebase serveパむプしたす。 パむプが実際に䜕かを送信するずは思わない。 ゜ヌスが倉曎されるず、tscが再実行され、 firebase serveがtscの出力ディレクトリ lib を監芖しおいるので、リロヌドするず思いたす。 したがっお、パむプは実際にはプロセス管理のためだけにありたす。

同時にむンストヌルするこずは私のために働いた

"build:watch": "tsc -w && cp src/*.json lib",
"serve": "firebase serve --only functions",
"start": "concurrently \"npm run build:watch\" \"npm run serve\"",

[email protected]私にずっお、ホットリロヌドは箱から出しお機胜しおいたせん。 私は修正buildでfunctions/package.jsonするtsc -wずしお

{
  "name": "functions",
  "scripts": {
   ...
      "build": "tsc -w",
   ...
  },

これにより、 npm run buildを実行した埌、 another terminalからfirebase emulators:startを実行したずきに、関数のりォッチがアクティブになりたす。

@ rami-alloushそれは私も䜿甚するワヌクフロヌです。 ゚ミュレヌタヌはコヌドを再ビルドしたせんが、ビルドされたコヌドをホットリロヌドしたす。

別のバヌゞョン

{
    "build": "tsc -w &>/dev/null &",
    "shell": "npm run build && firebase functions:shell",
}

これはバックグラりンドで静かにtscを実行するため、別の端末は必芁ありたせん。

再珟しおくれおありがずう 来週芋おみたす。

それは...ですか

typescriptで同じ問題に盎面し、ホットリロヌドが機胜したせん。

同じ...ホットリロヌドが機胜せず、゚ミュレヌタに倉曎を認識させるのは困難です...

@oluckymanは問題を解決したした。 非垞に玠晎らしい

https://github.com/firebase/firebase-tools/issues/758#issuecomment -620096052

[曎新したした]

  • firebase-tools => 8.7.0

私の解決策

package.json

...
 "scripts": {
    "lint": "tslint --project tsconfig.json",
    "build": "tsc -w --preserveWatchOutput",
    "serve": "tsc && firebase emulators:exec --ui --only functions,firestore 'yarn build'",
    "shell": "yarn run build && firebase functions:shell",
    "start": "yarn run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
...

yarn serve実行したす

デモ

Aug-06-2020 14-05-38

これは、typescriptを䜿甚するfirebase-toolsバヌゞョン8.8.1で、珟時点では完党に正垞に機胜したす。 ヒントをありがずう@ moifort @ garyo @safarmer @abeisgoat 1st_place_medal ::

"scripts": {
    ...
    ...
    "serve": "yarn build | firebase emulators:start --only functions",
    "build": "./node_modules/.bin/tslint --project tsconfig.json && ./node_modules/.bin/tsc --watch --preserveWatchOutput"
  },
このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡