firebase serve в функциях firebase не выполняет последние изменения

Я играю с функциями firebase. Прекрасно работает при развертывании на сервере firebase с помощью команды firebase deploy --only functions. Однако я, конечно, хотел бы протестировать свои функции локально перед развертыванием на сервере. Что я вижу при запуске firebase serve, так это то, что функции, "развернутые" локально, не имеют последних изменений, которые я сделал в indext.ts - они работают с последней собранной версией, которая находится в index.js.

Мой вопрос: как мне вручную создать свой проект функций firebase, чтобы протестировать их локально с последними изменениями? Следует ли firebase serve автоматически собрать проект перед его локальным развертыванием? Для меня это звучит как ошибка.


person lordneru    schedule 19.07.2018    source источник


Ответы (6)


Если вы хотите перезагрузить изменения в свой TypeScript при запуске firebase serve или firebase functions:shell, все, что вам нужно сделать, это снова создать свой проект, используя сценарий npm, который был создан для вас при инициализации проекта (см. Package.json):

cd functions
npm run build

Это перенесет ваш TypeScript в JavaScript, и изменения в JavaScript будут автоматически приняты эмулятором.

Кроме того, если вы более опытный пользователь TypeScript, вы можете запустить tsc --watch для автоматической компиляции TS в JS при изменении исходных файлов на диске. Подробнее об этом в этом блоге .

person Doug Stevenson    schedule 19.07.2018
comment
Спасибо, Дуг !! Работаю сейчас. Определенно, это то, что я искал !. Я пробовал с npm run build, но раньше не запускал cd functions. - person lordneru; 19.07.2018
comment
И нужно каждый раз строить? - person Teodor Ciuraru; 13.02.2020
comment
Или вы можете просто указать это как свой сценарий подачи npm: "serve": "npm run build && firebase emulators:start --only functions & tsc --watch". (Обратите внимание на добавление & tsc --watch в конце. - person Matthcw; 10.04.2020
comment
@Matthcw ты это тестировал? У меня не работает новый firebase init проект. Эта команда firebase emulators:start --only functions все еще активна, поэтому tsc --watch никогда не выполняется. Я пробовал & и && перед tsc --watch. Пока что я обнаружил, что мне нужно открыть новый терминал и каким-то образом запустить tsc --watch. - person Ash; 24.04.2020
comment
@Ash Это может быть ваша ОС и выбранный вами терминал. Я использую macOS Mojave v10.14.6 и Терминал. Использование single & мне подходит. Я узнал об этом здесь: bashitout.com/2013/ 18 мая / Ampersands-on-the-command-line.html - person Matthcw; 29.04.2020
comment
@Matthcw, конечно, это имеет смысл, поскольку я работаю в Windows. ОС была ключевой частью согласно той статье; This trailing ampersand directs the shell to run the command in the background, that is, it is forked and run in a separate sub-shell, as a job, asynchronously. и A single ampersand & can also delimit a list of commands to be run asynchronously - person Ash; 29.04.2020

firebase serve, похоже, не работает npm build. Но если вы посмотрите внутрь functions/package.json, вы увидите, что там уже есть serve скрипт, выполняющий npm run build && firebase serve --only functions. Итак, если вы просто сделаете:

cd functions
npm run serve

Вы можете создавать и обслуживать, не выполняя две отдельные команды.

person JYeh    schedule 10.11.2018

Если вы ищете горячую перезагрузку, я сделал это, как показано ниже:

"start:emulators": "firebase emulators:start --only functions",
"ts:watch": "tsc --watch",
"dev": "concurrently --kill-others \"npm run start:emulators\" \"npm run ts:watch\"",

Он будет запускать как firebase, так и ts watch параллельно, что поможет вам ускорить разработку.

person Chaitanya    schedule 20.04.2020
comment
Для использования вышеуказанного необходимо установить пакет npm concurrently pacakage. - person Rich Werden; 20.08.2020

Я не думаю, что вы можете просто переключаться между Javascript и Typescript в инициализированном проекте. Настройка Typescript немного отличается от Javascript. Вам нужно будет перенести свой проект Javascript на Typescript.

Чтобы перенести свой проект с JS на TS, следуйте этой документации по функциям firebase:

Перенос существующего проекта JavaScript Cloud Functions

Настройка проекта Typescript:

Настройка проекта машинописного текста

person Ashu    schedule 19.07.2018
comment
Процесс транспиляции выполняется командой firebase cli, когда я выполняю развертывание firebase, но не когда я выполняю firebase serve для локального запуска функций. Итак, я понимаю, для этого должна быть ручная сборка или автоматическая сборка при выполнении команды firebase serve. - person lordneru; 19.07.2018
comment
'firebase serve' иногда не выполняет горячую перезагрузку изменений и вместо этого использует данные кеша. пробовали ли вы очистить кеш окна браузера или повторно выполнить команду? - person Ashu; 19.07.2018
comment
Это не связано с браузером. Я вижу старую версию index.js в IDE. - person lordneru; 19.07.2018
comment
не знаю чувак. просто жди лучшего ответа. Между тем, вы можете сделать резервную копию своего проекта и попробовать миграцию, если хотите. без вреда :) - person Ashu; 19.07.2018

Перейдите в папку функций, откройте package.json и добавьте новый ключ: "hotReload": "tsc --watch"

затем запустите npm run hotReload в той же папке функций и оставьте терминал открытым. Это будет обновлять *.js при любых изменениях в *.ts файле. Помните, что облачные функции запускаются из *.js файла, а не из *.ts файла. Следовательно, файл * .ts необходимо сначала скомпилировать до *.js.

Затем откройте новый терминал, перейдите в основную папку проекта и запустите firebase serve (для параллельного запуска функций хостинга +) или firebase serve --only functions

person GorvGoyl    schedule 01.12.2019

Просто используйте эту команду, когда вы впервые используете команду npm serve

firebase emulators:start
person Hammad ul Hasan    schedule 13.01.2021