С помощью интерфейса командной строки с поддержкой платформы Firebase вы можете развернуть свое приложение Angular в Firebase и предоставлять динамический контент своим пользователям.
Прежде чем начать
Прежде чем приступить к развертыванию приложения в Firebase, ознакомьтесь со следующими требованиями и параметрами:
- Firebase CLI версии 12.1.0 или новее. Обязательно установите CLI, используя предпочитаемый вами метод.
Необязательно: в вашем проекте Firebase включена оплата (обязательно, если вы планируете использовать SSR).
Необязательно: AngularFire
Инициализировать Firebase
Для начала инициализируйте Firebase для вашего проекта платформы. Используйте интерфейс командной строки Firebase для нового проекта или измените firebase.json
для существующего проекта.
Инициализировать новый проект
- В интерфейсе командной строки Firebase включите предварительный просмотр веб-фреймворков:
firebase experiments:enable webframeworks
Запустите команду инициализации из CLI и следуйте инструкциям:
firebase init hosting
Ответьте утвердительно на вопрос «Хотите ли вы использовать веб-фреймворк? (экспериментально)».
Выберите исходный каталог хостинга; это может быть существующее приложение Angular.
При появлении запроса выберите Angular.
Инициализировать существующий проект
Измените конфигурацию хостинга в firebase.json
, чтобы иметь параметр source
, а не public
параметр. Например:
{
"hosting": {
"source": "./path-to-your-angular-workspace"
}
}
Размещать статический контент
После инициализации Firebase вы можете обслуживать статический контент с помощью стандартной команды развертывания:
firebase deploy
Предварительный рендеринг динамического контента
Чтобы выполнить предварительную отрисовку динамического контента в Angular, вам необходимо настроить Angular Universal. Firebase CLI ожидает, что Express Engine:
ng add @nguniversal/express-engine
Дополнительную информацию см. в руководстве Angular Universal .
Добавьте URL-адреса предварительной обработки
По умолчанию предварительно визуализируется только корневой каталог. Вы можете добавить дополнительные маршруты, найдя этап предварительной визуализации в angular.json
и добавив дополнительные маршруты:
{
"prerender": {
"builder": "@nguniversal/builders:prerender",
"options": {
"routes": ["/", "ANOTHER_ROUTE", "AND_ANOTHER"]
},
"configurations": {
/* ... */
},
"defaultConfiguration": "production"
}
}
Firebase также учитывает guessRoutes
или файл routes.txt
в корне хоста, если вам нужно выполнить дальнейшую настройку. Дополнительную информацию об этих параметрах см . в руководстве по предварительному рендерингу Angular .
Необязательно: добавьте серверный модуль
Развертывать
Когда вы развертываете с помощью firebase deploy
, Firebase создает пакет вашего браузера, пакет вашего сервера и выполняет предварительную визуализацию приложения. Эти элементы развертываются в функциях Hosting и Cloud Functions for Firebase .
Пользовательское развертывание
Интерфейс командной строки Firebase предполагает, что в вашей схеме с производственной конфигурацией есть этапы сервера, сборки и предварительной визуализации.
Если вы хотите адаптировать предположения CLI, настройте ng deploy
и отредактируйте конфигурацию в angular.json
. Например, вы можете отключить SSR и предоставлять исключительно предварительно обработанный контент, удалив serverTarget
:
{
"deploy": {
"builder": "@angular/fire:deploy",
"options": {
"browserTarget": "app:build:production",
"serverTarget": "app:server:production",
"prerenderTarget": "app:prerender:production"
}
}
}
Необязательно: интеграция с Firebase JS SDK.
При включении методов Firebase JS SDK как в серверные, так и в клиентские пакеты защитите себя от ошибок во время выполнения, проверив isSupported()
перед использованием продукта. Не все продукты поддерживаются во всех средах .
Необязательно: интеграция с Firebase Admin SDK.
Пакеты администратора не будут работать, если они включены в сборку вашего браузера, поэтому рассмотрите возможность предоставления их в серверном модуле и внедрения в качестве дополнительной зависимости:
// your-component.ts
import type { app } from 'firebase-admin';
import { FIREBASE_ADMIN } from '../app.module';
@Component({...})
export class YourComponent {
constructor(@Optional() @Inject(FIREBASE_ADMIN) admin: app.App) {
...
}
}
// app.server.module.ts
import * as admin from 'firebase-admin';
import { FIREBASE_ADMIN } from './app.module';
@NgModule({
…
providers: [
…
{ provide: FIREBASE_ADMIN, useFactory: () => admin.apps[0] || admin.initializeApp() }
],
})
export class AppServerModule {}
// app.module.ts
import type { app } from 'firebase-admin';
export const FIREBASE_ADMIN = new InjectionToken<app.App>('firebase-admin');
Предоставляйте полностью динамический контент с помощью SSR
Необязательно: интеграция с аутентификацией Firebase.
Инструмент развертывания Firebase с поддержкой веб-платформы автоматически синхронизирует состояние клиента и сервера с помощью файлов cookie. Объект Express res.locals
может дополнительно содержать аутентифицированный экземпляр приложения Firebase ( firebaseApp
) и текущего пользователя ( currentUser
). Его можно внедрить в ваш модуль через токен REQUEST (экспортированный из @nguniversal/express-engine/tokens).