С помощью дополнительной настройки вы можете расширить базовую функциональность CLI, учитывающую особенности фреймворков, и добавить поддержку интеграции с фреймворками, отличными от Angular и Next.js.
Предоставлять статический контент
Перед развертыванием статического контента необходимо настроить приложение.
Настройка
Для того чтобы знать, как развернуть ваше приложение, Firebase CLI должен уметь как собирать ваше приложение, так и знать, куда ваши инструменты размещают ресурсы, предназначенные для Hosting . Это достигается с помощью скрипта сборки npm и директивы каталогов CJS в package.json .
Учитывая следующий файл package.json:
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack",
"static": "cp static/* dist",
"prerender": "ts-node prerender.ts"
},
…
}
Интерфейс командной строки Firebase вызывает только ваш скрипт сборки, поэтому вам необходимо убедиться, что ваш скрипт сборки является исчерпывающим.
{
"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 Authentication
Инструменты развертывания Firebase, поддерживающие веб-фреймворки, автоматически синхронизируют состояние клиента и сервера с помощью файлов cookie. Для доступа к контексту аутентификации объект Express res.locals может содержать аутентифицированный экземпляр приложения Firebase ( firebaseApp ) и текущего вошедшего в систему пользователя ( currentUser ).