firebase --version
3.18.4
Ubuntu 18.04 x64
Браузер отображает обновленное содержимое
Страница обновляется только после перезапуска команды firebase serve. Я подтвердил, что вывод в 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
Я только что попробовал это на другой машине (Debian Stretch) со свежим проектом (firebase init), и то же самое произошло с функцией hello world. Я заметил, что если бы я изменил источник перед отправкой запроса функции, но после того, как функция была готова к работе, я мог бы один раз выполнить горячую перезагрузку, а затем перестал бы работать снова.
Я попытался создать новый проект (firebase init) на Mac и Linux. Он работает на Mac, а не на Linux.
Я немного поэкспериментировал и смог получить горячую перезагрузку примера hello world в JavaScript, но не пример TypeScript. Похоже, что firebase serve
наблюдает только за index.js
в каталоге, настроенном в `firebase.json.
Чтобы перезагрузить мой проект для TypeScript (и я предполагаю, что более сложные макеты JavaScript имеют больше, чем просто index.js
), мне пришлось использовать 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 Как 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
}
Самый простой способ воспроизвести проблему:
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
Посетив URL-адрес в браузере, вы увидите сообщение hello world. Если вы измените строку, возвращаемую обработчиком в 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
}
@laurenzlong У меня есть простой пример, который вы можете клонировать, чтобы воспроизвести проблему в Linux:
https://github.com/safarmer/firebase-functions
Спасибо за репродукцию! Я посмотрю на следующей неделе.
Такая же проблема здесь :)
Мне кажется, что firebase serve
пока не поддерживает Typescript ...
Я сравнил файлы, которые вы просили, с теми, что отправил
Я думаю, что проблема в том, что firebase serve
не отслеживает изменения в каталоге «исходный код» функций и не запускает сценарии предварительного развертывания, определенные в firebase.json
.
Было бы здорово, если бы это добавили. : D
Ах, и было бы здорово, если бы я мог определить другие сценарии предварительного развертывания для firebase serve, поэтому мне не придется запускать, например, tslint
при тестировании :)
@IchordeDionysos Я не думаю, что это просто TypeScript. Я попытался сделать то же самое, что и мой пример, на JavaScript, и, похоже, он сделал то же самое. Я думаю, что проблема в том, что сервер смотрит только на точку входа, а не на остальную часть кода. Надеюсь, команда firebase вскоре сможет пролить свет на эту проблему.
@laurenzlong ручная установка сторожа, похоже, заставляет все работать (спасибо @tstirrat за предложение)
Спасибо за подробное изображение @safarmer , очень полезно. Мне удалось отследить корень проблемы и подать https://github.com/GoogleCloudPlatform/cloud-functions-emulator/issues/207. Пожалуйста, следите за этой проблемой.
Для других, приходящих сюда, установите watchman
из исходников или Linuxbrew , а не пакет npm.
@laurenzlong Я могу воспроизвести эту проблему в Windows, и, в частности, изменение index.ts не обнаруживается. Мне нужно вручную запустить tsc. Затем изменение обнаруживается, и функция перезагружается.
Стоит ли открывать отдельный выпуск?
быстрые примечания: иногда info: Worker for helloWorld closed due to file changes.
обнаруживается на ts, но lib не обновляется. в других случаях его вообще не обнаруживают. запуск tsc вручную всегда перезагружает функцию.
@tstirrat установка сторожа на окна в соответствии с инструкциями, похоже, не работает
С какими ошибками конкретно вы сталкиваетесь при установке сторожа?
Никаких ошибок при установке сторожа. Но обслуживающие функции не горячие
перезагрузить. Я должен перестать служить, строить и снова служить после каждого изменения.
В среду, 21 ноября 2018 г., в 1:01 Кевин Цзянь [email protected] написал:
С какими ошибками конкретно вы сталкиваетесь при установке сторожа?
-
Вы получили это, потому что оставили комментарий.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/firebase/firebase-tools/issues/758#issuecomment-440460196 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AHgHbeA_iECsIMH3V9P7NQypsmudF_IQks5uxInggaJpZM4Tta12
.
Повторное открытие из-за нескольких сообщений об этом по-прежнему не работает в Windows
Все еще не работает в Ubuntu 18.04 с Node.js v10.15.0
Моя проблема была связана с эмулятором:
https://github.com/GoogleCloudPlatform/cloud-functions-emulator/issues/196
Всем привет, спасибо за подробные отчеты. @afuggini Когда я нажимаю на эту ссылку, я получаю сообщение 404. Правильно ли установлены разрешения для этого репо для публичного просмотра? Есть еще одна проблема, похожая на эту: https://github.com/firebase/firebase-tools/issues/1022. Я слышал, что эта проблема создает проблему для локальной разработки с помощью Typescript.
Я зарегистрировал ошибку в нашем внутреннем трекере: 123266946. Я не могу сказать, когда мы сможем это сделать, но знаю, что это отслеживается. PR приветствуются!
Я тоже столкнулся с этой ошибкой. Мне не удалось найти обходной путь, поэтому мне приходится перезапускать сервер после каждого изменения. Если вы знаете надежное решение, сообщите мне.
@ondratra, можете ли вы npm
(например, yarn
)?
@bkendall Я использую Debian (sid). Исходные файлы Typescript просматриваются и компилируются с помощью tsc -w
+ функции обслуживаются с помощью firebase --only functions serve
. package.json
содержит правильный путь к
js выходной файл {"main": "dist/src/index.js", ...}
. Я даже пытался использовать tsc-watch
package и явно touch
index файл, но безуспешно.
$ firebase --version
6.3.1
Ребята, проверьте мой предыдущий комментарий. Проблема связана с cloud-functions-emulator
. Он использует функцию fs
watch, которая имеет известную проблему в Linux. Так что не ждите решения напрямую от firebase-tools.
@ribizli thx, ссылка, которой вы поделились, наверняка объясняет природу проблемы. Но я все еще не нашел обходного пути. Есть ли возможность смотреть файлы через собственный скрипт и принудительно перезагружать firebase?
@ondratra fork @google-cloud/functions-emulator
, добавьте node-watch
как я упоминал в моем связанном комментарии, npm link
пакет. Переустановите firebase-tools
: у него есть @google-cloud/functions-emulator
качестве необязательной зависимости, поэтому будет использоваться ваша связанная версия.
И наконец: вы можете написать PR на https://github.com/GoogleCloudPlatform/cloud-functions-emulator и надеяться, что они скоро примут и выпустят. (Я мог бы жить со своим обходным путем, поэтому я не участвовал)
functions -> index.js после сохранения этого файла, как я могу запустить автозапуск "firebase serve"
Обходной путь с 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, {
.Используя Firebase с машинописным текстом, все, что мне нужно сделать, это запустить
tsc -w
в отдельном терминале (вариант просмотраnpm run build
). Теперь я могу изменить свой исходный код, и эмулятор заметит изменения.Если вы установили
firebase
глобально, вы можете найти эти файлы, перейдя кcd $(npm root -g)/firebase-tools/node_modules/@google-cloud
.
Эй, ребята -
Эта ошибка связана с возможностью горячей перезагрузки устаревшего эмулятора Cloud Functions. С мая 1919 года мы больше не используем google-cloud/functions-emulator
в firebase-tools
поэтому это меняет характер ошибки (я считаю, что новая природа заключается в том, что ее не существует).
Я ценю всех, кто усердно работает и ищет обходные пути, и, наконец, наш новый эмулятор должен позволять горячую перезагрузку любых перенесенных языков, пока вы запускаете свой наблюдатель (например, tsc -w
) отдельно от firebase serve
.
С помощью нового бэкэнда эмулятора мы решили эту проблему, и теперь все обходные пути в этом потоке устарели, поэтому я собираюсь закрыть этот поток, чтобы избежать путаницы.
Если вы по-прежнему наблюдаете какое-либо непреднамеренное поведение, пожалуйста, откройте новую ошибку.
Еще раз спасибо!
На случай, если здесь останутся другие, вот как настроить его в functions/package.json
чтобы 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
в фоновом режиме и тихо, поэтому вам не нужен другой терминал.
Спасибо за репродукцию! Я посмотрю на следующей неделе.
Это?
Столкнувшись с той же проблемой с машинописным текстом, горячая перезагрузка не работает.
то же самое ... горячая перезагрузка не работает, и эмулятор вообще сложно заставить распознавать изменения ...
@oluckyman решил проблему. очень хорошо
https://github.com/firebase/firebase-tools/issues/758#issuecomment -620096052
firebase-tools
=> 8.7.0
Мое решение:
...
"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
На данный момент это отлично работает для меня в 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"
},
Самый полезный комментарий
На случай, если здесь останутся другие, вот как настроить его в
functions/package.json
чтобыtsc -w
запускался отдельно отfirebase serve
:Другими словами, запустите
tsc -w
и направьте вывод вfirebase serve
. Я не думаю, что труба действительно что-то отправляет; Я думаю, что при изменении источника tsc перезапускается, иfirebase serve
наблюдаетtsc
выходным каталогомlib
), поэтому он перезагружается. Так что труба действительно нужна только для управления процессами.