firebase --version
3.18.4
Ubuntu 18.04 x64
Le navigateur affiche le contenu mis à jour
La page ne se met à jour qu'après le redémarrage de la commande firebase serve. J'ai confirmé que la sortie dans lib a été mise à jour.
> 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
Je viens d'essayer ceci sur une machine différente (Debian Stretch) avec un nouveau projet (firebase init) et la même chose s'est produite avec la fonction hello world. J'ai remarqué que si je changeais la source avant d'envoyer une requête à la fonction, mais une fois que la fonction était prête à servir, je pourrais la recharger à chaud une fois, puis cesser de fonctionner à nouveau.
J'ai essayé de créer un nouveau projet (firebase init) sur un Mac et une machine Linux, cela fonctionne sur Mac et pas sur Linux.
J'ai fait quelques expériences et j'ai pu obtenir l'exemple hello world en JavaScript pour recharger à chaud mais pas l'exemple TypeScript. Il semble que firebase serve
ne regarde que les index.js
dans le répertoire configuré dans `firebase.json.
Pour recharger mon projet pour TypeScript (et je suppose des mises en page JavaScript plus complexes qui ont plus que index.js
), j'ai dû utiliser Webpack pour générer un seul fichier functions/lib/index.js
et configurer Firebase pour rechercher mon code de fonctions dans functions/list
. Cela permet alors au rechargement à chaud de fonctionner à la fois pour firebase functions:shell
et firebase serve
.
Lorsque j'utilisais tsc
(selon le modèle firebase init
), le code ne se rechargeait que si je modifiais le fichier index.js
résultant. Mon flux de travail actuel consiste à exécuter webpack --watch
dans un terminal avec firebase serve --only functions
dans un autre. Je reçois maintenant une recharge à chaud. Ce serait bien si je pouvais revenir à la valeur par défaut de firebase init
.
Firebase.json mis à jour
{
"functions": {
"predeploy": "npm --prefix functions run build",
"source": "functions/list"
}
}
@safarmer À quoi ressemble vos fonctions / package.json? Y a-t-il un champ main
?
J'avais commencé à utiliser la valeur par défaut générée par 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
}
Le moyen le plus simple de reproduire le problème:
firebase init && cd functions && yarn
mkdir src/handlers && mv src/index.ts src/handlers/helloworld.ts
echo "export * from './handlers/helloworld';" > src/index.ts
yarn build --watch
firebase serve --only functions
En visitant l'URL dans un navigateur, vous voyez le message Hello world. Si vous modifiez la chaîne renvoyée par le gestionnaire dans handler.ts, la seule façon d'obtenir le résultat à modifier est de redémarrer la commande firebase serve
.
L'ajout de "source": "functions/lib"
à firebase.json
de recharger le code à chaud si vous modifiez quelque chose dans functions/lib
mais que les répertoires de levier inférieurs ne déclenchent pas de rechargement. Il est possible d'exécuter touch lib/injex.js
pour déclencher un rechargement. Par exemple, changer un gestionnaire dans src/index.ts
déclenche le rechargement, mais pas changer src/handlers/helloworld.ts
.
@laurenzlong le meilleur que j'ai jusqu'à présent est (tiré du résultat par défaut de firebase init) est ci-dessous. Avec cela, j'ai encore besoin d'exécuter touch lib/index.js
. Un autre problème avec ceci est que firebase deploy
ne fonctionne plus.
firebase.json
{
"functions": {
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint",
"npm --prefix \"$RESOURCE_DIR\" run build"
],
"source": "functions/lib"
}
}
fonctions / 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
}
@laurenzlong J'ai un exemple simple que vous pouvez cloner pour reproduire le problème sous Linux:
https://github.com/safarmer/firebase-functions
Merci pour le repro! Je vais jeter un œil la semaine prochaine.
Le même problème ici :)
Pour moi, il semble que firebase serve
ne prend pas en charge Typescript pour le moment ...
J'ai comparé les fichiers que vous avez demandés avec ceux envoyés par @safarmer et j'ai les mêmes configurations. Cela ne me surprend pas car c'est la configuration officielle à utiliser avec TypeScript
Je pense que le problème est que firebase serve
n'écoute pas les changements dans le répertoire des fonctions "source" et n'exécute pas les scripts de prédéploiement, définis dans le firebase.json
.
Ce serait formidable si cela était ajouté. :RÉ
Ahh et ce serait génial si je pouvais définir d'autres scripts de prédéploiement pour le serveur Firebase, donc je n'aurai pas à exécuter par exemple tslint
en test :)
@IchordeDionysos Je ne pense pas que ce soit juste du TypeScript. J'ai essayé de faire la même chose que mon exemple en JavaScript et cela semblait faire la même chose. Je pense que le problème vient du fait que le serveur ne regarde que le point d'entrée et non le reste du code. Espérons que l'équipe Firebase pourra bientôt faire la lumière sur le problème.
@laurenzlong installer manuellement watchman semble faire fonctionner les choses (merci @tstirrat pour la suggestion)
Merci pour la repro détaillée @safarmer , très utile. J'ai pu localiser la racine du problème et déposé https://github.com/GoogleCloudPlatform/cloud-functions-emulator/issues/207. Veuillez suivre ce problème.
Pour les autres qui viennent ici, installez le watchman
depuis la source ou Linuxbrew , pas le paquet npm
@laurenzlong Je peux reproduire ce problème dans Windows et en particulier le changement d'index.ts n'est pas détecté. Je dois exécuter manuellement tsc. Le changement est alors détecté et la fonction est rechargée.
Dois-je ouvrir un autre problème?
notes rapides: parfois info: Worker for helloWorld closed due to file changes.
est détecté sur le ts mais la lib n'est pas rafraîchie. d'autres fois, ce n'est pas du tout détecté. l'exécution manuelle de tsc recharge toujours la fonction.
@tstirrat installer selon les instructions ne semble pas fonctionner
Quelles erreurs rencontrez-vous spécifiquement lors de l'installation de watchman?
Aucune erreur lors de l'installation de watchman. Mais servir les fonctions n'est pas chaud
recharger. Je dois arrêter de servir, construire et servir à nouveau après chaque changement.
Le mercredi 21 novembre 2018 à 01h01, Kevin Jian [email protected] a écrit:
Quelles erreurs rencontrez-vous spécifiquement lors de l'installation de watchman?
-
Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/firebase/firebase-tools/issues/758#issuecomment-440460196 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AHgHbeA_iECsIMH3V9P7NQypsmudF_IQks5uxInggaJpZM4Tta12
.
Réouverture en raison de plusieurs rapports indiquant que cela ne fonctionne toujours pas sous Windows
Ne fonctionne toujours pas sur Ubuntu 18.04 avec Node.js v10.15.0
Mon problème était lié à l'émulateur:
https://github.com/GoogleCloudPlatform/cloud-functions-emulator/issues/196
Salut à tous, merci pour les rapports détaillés. @afuggini J'obtiens 404 lorsque je clique sur ce lien, les autorisations sont-elles correctement définies sur ce dépôt pour une consultation publique? Il existe un autre problème similaire à celui-ci: https://github.com/firebase/firebase-tools/issues/1022. J'ai entendu dire que ce problème crée un problème pour le développement local avec Typescript.
J'ai déposé un bogue dans notre traqueur interne: 123266946. Je ne peux pas m'engager à savoir quand nous pourrons nous en sortir, mais sachez que cela est suivi. Les RP sont les bienvenus!
J'ai également rencontré cette erreur. Je n'ai pas pu créer de solution de contournement, je dois donc redémarrer le serveur après chaque modification. Si vous connaissez une solution de contournement fiable, veuillez me le faire savoir.
@ondratra pouvez-vous fournir votre version actuelle de la CLI, la plate-forme du système d'exploitation, et nous faire savoir si vous travaillez avec autre chose que npm
(par exemple yarn
)?
@bkendall Je suis sur Debian (sid). Les fichiers sources de Typescript sont surveillés et compilés via tsc -w
+ les fonctions sont servies via firebase --only functions serve
. package.json
contient le chemin correct vers
js fichier de sortie {"main": "dist/src/index.js", ...}
. J'ai même essayé d'utiliser le package tsc-watch
et explicitement le fichier d'index touch
, mais sans succès.
$ firebase --version
6.3.1
Les gars, vérifiez mon commentaire précédent. Le problème est lié au cloud-functions-emulator
. Il utilise la fonction de surveillance fs
, qui présente un problème connu sous Linux. Alors ne vous attendez pas à une solution directement de firebase-tools.
@ribizli thx, le lien que vous avez partagé explique sûrement la nature du problème. Mais je n'ai toujours pas trouvé de solution de contournement. Est-il possible de regarder des fichiers via un script personnalisé et de forcer Firebase à se recharger?
@ondratra fork @google-cloud/functions-emulator
, ajoutez node-watch
comme je l'ai mentionné dans mon commentaire lié, npm link
le package. Réinstaller firebase-tools
: il a @google-cloud/functions-emulator
comme dépendance facultative, donc votre version liée sera utilisée.
Et enfin: vous pouvez faire un PR sur https://github.com/GoogleCloudPlatform/cloud-functions-emulator et espérer qu'ils accepteront et publieront bientôt. (Je pourrais vivre avec ma solution de contournement, donc je n'ai pas contribué)
fonctions -> index.js après avoir sauvegardé ce fichier, comment je peux démarrer "firebase serve" autorun
Solution de contournement de https://github.com/GoogleCloudPlatform/cloud-functions-emulator/issues/196 (merci @dirkjot):
Cela a fonctionné pour moi, voici des instructions complètes et un correctif pour la petite faute de frappe de @ribizli :
- Trouvez votre répertoire
@google-cloud
, probablement dans votrenode_modules
(voir ci-dessous pour Firebase)cd functions-emulator
- Ajouter une surveillance de nœud:
npm install --save node-watch
- Modifier le fichier
src/supervisor/worker.js
- Vers la ligne 180, vous trouverez
fs.watch(localdir, {
. Remplacez ceci parrequire('node-watch')(localdir, {
.En utilisant Firebase avec typescript, tout ce que j'ai à faire est d'exécuter
tsc -w
dans un terminal séparé (la variante watch denpm run build
). Je peux maintenant changer mon code source et l'émulateur remarquera les changements.Si vous avez installé
firebase
globalement, vous pouvez trouver ces fichiers en accédant àcd $(npm root -g)/firebase-tools/node_modules/@google-cloud
.
Salut les gens -
Ce bogue était lié à la capacité de rechargement à chaud de l'ancien émulateur Cloud Functions. Depuis mai 19, nous n'utilisons plus google-cloud/functions-emulator
dans firebase-tools
donc cela change la nature du bogue (je crois que la nouvelle nature est qu'il n'existe pas).
J'apprécie que tout le monde travaille dur et trouve des solutions de contournement et enfin notre nouvel émulateur devrait permettre à tous les langages transpilés de se recharger à chaud tant que vous exécutez votre observateur (comme tsc -w
) séparément de firebase serve
.
Avec le nouveau backend de l'émulateur, nous avons résolu ce problème et maintenant toutes les solutions de contournement de ce fil sont obsolètes, je vais donc fermer ce fil pour éviter toute confusion.
Si vous constatez toujours un comportement involontaire, veuillez ouvrir un nouveau bogue.
Merci encore!
Au cas où d'autres se retrouveraient ici, voici comment le configurer dans functions/package.json
afin que tsc -w
s'exécute séparément de firebase serve
:
{
"name": "functions",
"scripts": {
...
"serve": "tsc -w | firebase serve --only functions",
...
},
En d'autres termes, exécutez tsc -w
et redirigez la sortie vers firebase serve
. Je ne pense pas que le tuyau envoie quoi que ce soit; Je pense que lorsque la source change, tsc s'exécute à nouveau et firebase serve
regarde le répertoire de sortie de tsc
( lib
) pour qu'il se recharge. Donc, le tuyau est vraiment là pour la gestion des processus.
L'installation simultanée a fonctionné pour moi:
"build:watch": "tsc -w && cp src/*.json lib",
"serve": "firebase serve --only functions",
"start": "concurrently \"npm run build:watch\" \"npm run serve\"",
Pour moi, le rechargement à chaud de [email protected]
ne fonctionne pas immédiatement. J'ai modifié le build
dans functions/package.json
pour qu'il soit tsc -w
comme
{
"name": "functions",
"scripts": {
...
"build": "tsc -w",
...
},
Cela gardera la montre active pour les fonctions lorsque j'exécute npm run build
, puis à partir de another terminal
j'ai exécuté firebase emulators:start
.
@ rami-alloush c'est aussi le flux de travail que j'utilise. Les émulateurs ne reconstruisent pas votre code mais rechargent à chaud le code construit.
une autre version
{
"build": "tsc -w &>/dev/null &",
"shell": "npm run build && firebase functions:shell",
}
cela exécute tsc
en arrière-plan et silencieux, vous n'avez donc pas besoin d'un autre terminal.
Merci pour le repro! Je vais jeter un œil la semaine prochaine.
C'est ça?
Face au même problème avec dactylographié, le rechargement à chaud ne fonctionne pas.
idem ... le rechargement à chaud ne fonctionne pas, et il est difficile de faire en sorte que l'émulateur reconnaisse les changements ...
@oluckyman a résolu le problème. très agréable
https://github.com/firebase/firebase-tools/issues/758#issuecomment -620096052
firebase-tools
=> 8.7.0
Ma solution:
...
"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"
},
...
Exécutez yarn serve
Cela fonctionne parfaitement pour moi pour le moment sur la version de firebase-tools 8.8.1
utilisant du typecript. Merci pour les conseils les gars @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"
},
Commentaire le plus utile
Au cas où d'autres se retrouveraient ici, voici comment le configurer dans
functions/package.json
afin quetsc -w
s'exécute séparément defirebase serve
:En d'autres termes, exécutez
tsc -w
et redirigez la sortie versfirebase serve
. Je ne pense pas que le tuyau envoie quoi que ce soit; Je pense que lorsque la source change, tsc s'exécute à nouveau etfirebase serve
regarde le répertoire de sortie detsc
(lib
) pour qu'il se recharge. Donc, le tuyau est vraiment là pour la gestion des processus.