С помощью некоторой дополнительной настройки вы можете расширить базовую функциональность CLI, поддерживающую фреймворк, чтобы расширить поддержку интеграции на фреймворки, отличные от Angular и Next.js.
Прежде чем начать
Прежде чем приступить к развертыванию приложения в Firebase, ознакомьтесь со следующими требованиями и параметрами:
- Firebase CLI версии 12.1.0 или более поздней. Убедитесь, что вы устанавливаете CLI выбранным вами способом.
- Необязательно: включите выставление счетов в вашем проекте Firebase (обязательно, если вы планируете использовать SSR)
Инициализировать Firebase
Для начала инициализируйте Firebase для своего проекта фреймворка. Используйте Firebase CLI для нового проекта или измените firebase.json
для существующего проекта.
Инициализировать новый проект
- В Firebase CLI включите предварительный просмотр веб-фреймворков:
firebase experiments:enable webframeworks
Запустите команду инициализации из CLI и следуйте инструкциям:
firebase init hosting
Ответьте «да» на вопрос «Хотите ли вы использовать веб-фреймворк? (экспериментально)»
Выберите исходный каталог хостинга; это может быть существующее веб-приложение.
При появлении запроса выберите Express.js / custom.
Инициализировать существующий проект
Измените конфигурацию хостинга в firebase.json
, указав параметр source
вместо public
. Например:
{
"hosting": {
"source": "./path-to-your-express-directory"
}
}
Подавать статический контент
Перед развертыванием статического контента вам необходимо настроить приложение.
Настроить
Чтобы знать, как развернуть ваше приложение, Firebase CLI должен уметь как собирать его, так и знать, где ваши инструменты размещают ресурсы, предназначенные для Hosting . Это достигается с помощью скрипта сборки npm и директивы CJS directories в package.json
.
Дан следующий package.json:
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack",
"static": "cp static/* dist",
"prerender": "ts-node prerender.ts"
},
…
}
Firebase CLI вызывает только ваш скрипт сборки, поэтому вам нужно убедиться, что ваш скрипт сборки является исчерпывающим.
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack && npm run static && npm run prerender",
"static": "cp static/* dist",
"prerender": "ts-node prerender.ts"
},
…
}
Если ваш фреймворк не поддерживает предварительную отрисовку по умолчанию, рассмотрите возможность использования инструмента, например Rendertron . Rendertron позволит вам отправлять запросы Chrome к локальному экземпляру вашего приложения без интерфейса, что позволит сохранить полученный HTML-код для размещения на Hosting .
Наконец, разные фреймворки и инструменты сборки хранят свои артефакты в разных местах. Используйте directories.serve
, чтобы указать CLI, куда ваш скрипт сборки выводит полученные артефакты:
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack && npm run static && npm run prerender",
"static": "cp static/* dist",
"prerender": "ts-node prerender.ts"
},
"directories": {
"serve": "dist"
},
…
}
Развертывать
После настройки приложения вы можете обслуживать статический контент с помощью стандартной команды развертывания:
firebase deploy
Подавать динамический контент
Чтобы обслуживать приложение Express в Cloud Functions for Firebase , убедитесь, что ваше приложение Express (или обработчик URL в стиле Express) экспортировано таким образом, чтобы Firebase мог найти его после упаковки вашей библиотеки с помощью npm.
Для этого убедитесь, что ваша директива files
включает все необходимое для сервера, и что ваша основная точка входа правильно настроена в package.json
:
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack && npm run static && npm run prerender",
"static": "cp static/* dist",
"prerender": "ts-node tools/prerender.ts"
},
"directories": {
"serve": "dist"
},
"files": ["dist", "server.js"],
"main": "server.js",
...
}
Экспортируйте свое приложение Express из функции с именем app
:
// server.js
export function app() {
const server = express();
…
return server;
}
Или, если вы предпочитаете экспортировать обработчик URL в стиле Express, назовите его handle
:
export function handle(req, res) {
res.send(‘hello world’);
}
Развертывать
firebase deploy
Это развернет ваш статический контент на Firebase Hosting и позволит Firebase использовать ваше приложение Express, размещенное на Cloud Functions for Firebase .
Дополнительно: интеграция с аутентификацией Firebase
Инструментарий развертывания Firebase, совместимый с веб-фреймворком, автоматически синхронизирует состояние клиента и сервера с помощью файлов cookie. Для доступа к контексту аутентификации объект Express res.locals
может содержать аутентифицированный экземпляр приложения Firebase ( firebaseApp
) и данные текущего пользователя ( currentUser
).