firebase --version
3.18.4
Ubuntu 18.04 x64
O navegador exibe conteúdo atualizado
A página só é atualizada após reiniciar o comando firebase serve. Confirmei que a saída em lib foi atualizada.
> 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
Acabei de tentar isso em uma máquina diferente (Debian Stretch) com um novo projeto (firebase init) e a mesma coisa aconteceu com a função hello world. Eu percebi que se eu alterasse a fonte antes de enviar uma solicitação para a função, mas depois que a função estivesse pronta para servir, eu poderia carregá-la a quente uma vez e então parar de funcionar novamente.
Eu tentei criar um novo projeto (firebase init) em um Mac e uma máquina Linux, funciona no Mac e não no Linux.
Fiz alguns experimentos e pude obter o exemplo hello world em JavaScript para recarregar a quente, mas não o exemplo TypeScript. Parece que firebase serve
apenas observa index.js
no diretório configurado em `firebase.json.
Para recarregar meu projeto para TypeScript (e suponho que layouts de JavaScript mais complexos que têm mais do que apenas index.js
), tive que usar o Webpack para gerar um único arquivo functions/lib/index.js
e configurar o Firebase para procurar meu código de funções em functions/list
. Isso faz com que o hot reload funcione para firebase functions:shell
e firebase serve
.
Quando eu estava usando tsc
(de acordo com o modelo firebase init
), o código só recarregaria se eu modificasse o arquivo index.js
resultante. Meu fluxo de trabalho atual é executar webpack --watch
em um terminal com firebase serve --only functions
em outro. Agora consigo recarregar rapidamente. Seria bom se eu pudesse voltar ao padrão de firebase init
.
Firebase.json atualizado
{
"functions": {
"predeploy": "npm --prefix functions run build",
"source": "functions/list"
}
}
@safarmer Qual é a aparência de suas funções / package.json? Ele tem um campo main
?
Comecei a usar o padrão gerado por 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
}
A maneira mais simples que tenho de replicar o problema:
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
Visitando a URL em um navegador, você vê a mensagem hello world. Se você alterar a string retornada do manipulador em handler.ts, a única maneira de obter o resultado da alteração é reiniciar o comando firebase serve
.
Adicionar "source": "functions/lib"
a firebase.json
faz com que o código seja recarregado rapidamente se você alterar qualquer coisa em functions/lib
mas os diretórios de alavanca inferior não acionam um recarregamento. É possível executar touch lib/injex.js
para acionar uma recarga. Por exemplo, alterar um manipulador em src/index.ts
dispara a recarga, mas alterar src/handlers/helloworld.ts
não.
@laurenzlong, o melhor que tenho até agora (tirado do resultado padrão do firebase init) está abaixo. Com isso, ainda preciso executar touch lib/index.js
. Outro problema com isso é que firebase deploy
não funciona mais.
firebase.json
{
"functions": {
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint",
"npm --prefix \"$RESOURCE_DIR\" run build"
],
"source": "functions/lib"
}
}
functions / 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 Tenho um exemplo simples que você pode clonar para reproduzir o problema no Linux:
https://github.com/safarmer/firebase-functions
Obrigado pela reprodução! Vou dar uma olhada na próxima semana.
O mesmo problema aqui :)
Para mim, parece que firebase serve
não é compatível com o Typescript agora ...
Eu comparei os arquivos que você pediu com os que o @safarmer enviou e tenho as mesmas configurações. Não me surpreende, pois esta é a configuração oficial para usar com TypeScript
Acho que o problema é que firebase serve
não está ouvindo alterações no diretório "source" das funções e não executará os scripts de pré-implantação, definidos em firebase.json
.
Seria ótimo se isso fosse adicionado. : D
Ahh e seria ótimo se eu pudesse definir outros scripts de pré-implantação para o servidor firebase, então não terei que executar, por exemplo, tslint
em testes :)
@IchordeDionysos Não acho que seja apenas TypeScript. Tentei fazer a mesma coisa que meu exemplo em JavaScript e parecia fazer a mesma coisa. Acho que o problema é com o servidor olhando apenas para o ponto de entrada e não o resto do código. Esperançosamente, a equipe do firebase pode lançar alguma luz sobre o problema em breve.
@laurenzlong instalar manualmente o watchman parece fazer as coisas funcionarem (obrigado @tstirrat pela sugestão)
Obrigado pelo repro @safarmer detalhado, muito útil. Consegui rastrear a raiz do problema e preenchi https://github.com/GoogleCloudPlatform/cloud-functions-emulator/issues/207. Siga esse problema.
Para outros que vêm aqui, instale o watchman
do código-fonte ou Linuxbrew , não o pacote npm
@laurenzlong Posso reproduzir esse problema no Windows e, em particular, a alteração de index.ts não está sendo detectada. Estou tendo que executar o tsc manualmente. A alteração é então detectada e a função recarregada.
Devo abrir um exemplar separado?
notas rápidas: às vezes info: Worker for helloWorld closed due to file changes.
é detectado no ts, mas a lib não é atualizada. outras vezes, não é detectado. a execução manual do tsc sempre recarrega a função.
@tstirrat instalar o watchman no Windows de acordo com as instruções não parece funcionar
Que erros você está enfrentando especificamente ao instalar o watchman?
Sem erros ao instalar o watchman. Mas servir as funções não é quente
recarregar. Tenho que parar de servir, construir e servir novamente após cada mudança.
Na quarta-feira, 21 de novembro de 2018 à 1:01, Kevin Jian [email protected] escreveu:
Que erros você está enfrentando especificamente ao instalar o watchman?
-
Você está recebendo isso porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/firebase/firebase-tools/issues/758#issuecomment-440460196 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AHgHbeA_iECsIMH3V9P7NQypsmudF_IQks5uxInggaJpZM4Tta12
.
Reabertura devido a vários relatórios de que ainda não está funcionando no Windows
Ainda não funciona no Ubuntu 18.04 com Node.js v10.15.0
Meu problema era relacionado ao emulador:
https://github.com/GoogleCloudPlatform/cloud-functions-emulator/issues/196
Olá a todos, obrigado pelos relatórios detalhados. @afuggini , recebo 404 quando clico nesse link. As permissões estão definidas corretamente nesse repo para exibição pública? Há outro problema semelhante a este: https://github.com/firebase/firebase-tools/issues/1022. Ouvi dizer que esse problema está criando um ponto problemático para o desenvolvimento local com o Typescript.
Registrei um bug em nosso rastreador interno: 123266946. Não posso me comprometer quando poderemos resolver isso, mas sei que isso está sendo rastreado. Os RP são bem-vindos!
Eu também encontrei esse erro. Não consegui criar nenhuma solução alternativa, então tenho que reiniciar o servidor após cada alteração. Se você conhece uma solução alternativa confiável, entre em contato.
@ondratra, você pode fornecer sua versão CLI atual, plataforma de sistema operacional e nos informar se estiver trabalhando com algo diferente de npm
(por exemplo, yarn
)?
@bkendall estou no Debian (sid). Os arquivos de origem do typescript são observados e compilados por meio de tsc -w
+ funções são atendidas por meio de firebase --only functions serve
. package.json
contém o caminho correto para
arquivo de saída js {"main": "dist/src/index.js", ...}
. Eu até tentei usar o pacote tsc-watch
e explicitamente o arquivo de índice touch
, mas sem sucesso.
$ firebase --version
6.3.1
Pessoal, vejam meu comentário anterior. O problema está relacionado a cloud-functions-emulator
. Ele está usando o recurso de relógio fs
, que tem um problema conhecido no Linux. Portanto, não espere uma solução diretamente de firebase-tools.
@ribizli thx, o link que você compartilhou certamente explica a natureza do problema. Mas eu ainda não encontrei nenhuma solução alternativa. Existe alguma possibilidade de assistir os arquivos por meio de um script personalizado e forçar o Firebase a recarregar?
@ondratra fork @google-cloud/functions-emulator
, adicione node-watch
como mencionei em meu comentário vinculado, npm link
o pacote. Reinstale firebase-tools
: ele tem @google-cloud/functions-emulator
como dependência opcional, então sua versão vinculada será usada.
E finalmente: você pode fazer um PR para https://github.com/GoogleCloudPlatform/cloud-functions-emulator e esperar que eles aceitem e lançem em breve. (Eu poderia viver com minha solução alternativa, então não contribuí)
funções -> index.js depois de salvar este arquivo, como posso iniciar a execução automática de "firebase serve"
Solução alternativa em https://github.com/GoogleCloudPlatform/cloud-functions-emulator/issues/196 (obrigado @dirkjot):
Isso funcionou para mim. Aqui estão as instruções completas e uma correção para o pequeno erro de digitação de @ribizli :
- Encontre seu diretório
@google-cloud
, provavelmente em seunode_modules
(veja abaixo para Firebase)cd functions-emulator
- Adicionar node-watch:
npm install --save node-watch
- Edite o arquivo
src/supervisor/worker.js
- Por volta da linha 180, você encontrará
fs.watch(localdir, {
. Substitua porrequire('node-watch')(localdir, {
.Usando o Firebase com o typescript, tudo o que tenho a fazer é executar
tsc -w
em um terminal separado (a variante de relógio denpm run build
). Agora posso alterar meu código-fonte e o emulador notará as alterações.Se você instalou
firebase
globalmente, poderá encontrar esses arquivos navegando atécd $(npm root -g)/firebase-tools/node_modules/@google-cloud
.
Ei pessoal -
Este bug está relacionado à capacidade de recarregamento a quente do emulador legado do Cloud Functions. Em maio de 19, não usamos mais google-cloud/functions-emulator
em firebase-tools
então isso muda a natureza do bug (acredito que a nova natureza é que ele não existe).
Agradeço a todos que trabalharam duro e descobriram soluções alternativas e, finalmente, nosso novo emulador deve permitir que qualquer linguagem transpilada seja recarregada a quente, desde que você esteja executando seu observador (como tsc -w
) separadamente de firebase serve
.
Com o novo back-end do emulador, resolvemos esse problema e agora todas as soluções alternativas neste tópico estão desatualizadas, então fecharei este tópico para evitar confusão.
Se você ainda está vendo algum comportamento não intencional, abra um novo bug.
Obrigado novamente!
Caso outros acabem aqui, aqui está realmente como configurá-lo em functions/package.json
para que tsc -w
executado separadamente de firebase serve
:
{
"name": "functions",
"scripts": {
...
"serve": "tsc -w | firebase serve --only functions",
...
},
Em outras palavras, execute tsc -w
e canalize a saída para firebase serve
. Não acho que o cachimbo realmente mande alguma coisa; Eu acho que quando a fonte muda, o tsc é executado novamente e firebase serve
está observando o dir de saída de tsc
( lib
) então ele recarrega. Portanto, o tubo existe apenas para gerenciamento de processos.
A instalação simultânea funcionou para mim:
"build:watch": "tsc -w && cp src/*.json lib",
"serve": "firebase serve --only functions",
"start": "concurrently \"npm run build:watch\" \"npm run serve\"",
Para mim, em [email protected]
recarregar a quente não está funcionando fora da caixa. Modifiquei build
em functions/package.json
para ser tsc -w
como
{
"name": "functions",
"scripts": {
...
"build": "tsc -w",
...
},
Isso manterá o relógio ativo para as funções quando eu executar npm run build
, a partir de another terminal
, executei firebase emulators:start
.
@ rami-alloush é o fluxo de trabalho que uso também. Os emuladores não reconstroem seu código, mas o recarregam a quente.
Outra versão
{
"build": "tsc -w &>/dev/null &",
"shell": "npm run build && firebase functions:shell",
}
isto executa tsc
em segundo plano e silenciosamente, então você não precisa de outro terminal.
Obrigado pela reprodução! Vou dar uma olhada na próxima semana.
É isso?
Enfrentando o mesmo problema com o texto digitado, o recarregamento a quente não funciona.
mesmo ... o recarregamento a quente não está funcionando, e é difícil fazer o emulador reconhecer as mudanças ...
@oluckyman resolveu o problema. muito agradável
https://github.com/firebase/firebase-tools/issues/758#issuecomment -620096052
firebase-tools
=> 8.7.0
Minha solução:
...
"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"
},
...
Execute yarn serve
Isso funciona perfeitamente bem para mim no momento na versão 8.8.1
firebase-tools usando typescript. Obrigado pelas dicas pessoal @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"
},
Comentários muito úteis
Caso outros acabem aqui, aqui está realmente como configurá-lo em
functions/package.json
para quetsc -w
executado separadamente defirebase serve
:Em outras palavras, execute
tsc -w
e canalize a saída parafirebase serve
. Não acho que o cachimbo realmente mande alguma coisa; Eu acho que quando a fonte muda, o tsc é executado novamente efirebase serve
está observando o dir de saída detsc
(lib
) então ele recarrega. Portanto, o tubo existe apenas para gerenciamento de processos.