Статья №8 — Развертывание Angular Firebase

Требования

  1. Доступ в Интернет. (точно)
  2. если вы следуете шагу 1, любому терминалу командной строки.
  3. Рекомендую прочитать «10 лучших терминалов командной строки» (необязательно)

Начнем…

Чего мы добьемся в этой статье?

Вы начинаете с создания начального приложения с помощью Angular CLI. В этом руководстве вы будете изменять и расширять это начальное приложение, чтобы создать универсальное веб-приложение Angular и развернуть его в firebase.

В этой части руководства вы сделаете следующее:

  1. Настройте свою среду.
  2. Создайте новую рабочую область и первоначальный проект приложения.
  3. Внесите изменения в приложение, чтобы создать рендеринг на стороне сервера.
  4. Развертывание в Firebase с использованием функций и хостинга.

Создайте новую рабочую область и начальное приложение

Таким образом, для создания универсального Angular доступно несколько механизмов и сторонних зависимостей, и среди них ниже приведены два наиболее распространенных способа создания приложения Angular SSR.

// FOR NEW ENV ONLY
npm i -g @angular/cli
// CREATE PROJECT (always prefer .scss over css)
ng new [projectName] --routing --style=scss

Итак, мы обсудим первый момент здесь, Angular Universal от Angular Team.

cd [projectName]
ng add @nguniversal/express-engine

После выполнения этих шагов вы можете создать универсальное приложение Angular, теперь давайте создадим модуль с именем компонента home с маршрутизацией отложенной загрузки.

ng g c welcome -m app.module

Таким образом, он создаст домашний модуль (welcome.module.ts) с домашним компонентом (welcome.component.ts) и домашней маршрутизацией. После создания домашнего модуля добавьте динамический метатег и метаописание в файл welcome.component.ts, как показано ниже.

ngOnInit(): void {
this.addMetaTags();
}
addMetaTags() {
this.title.setTitle(‘Welcome’);
this.meta.addTags([
{ name: ‘title’, content: ‘Welcome Page’ },
{ name: ‘description’, content: ‘This is Welcome Descrition’},
{ name: ‘twitter:card’, content: ‘Welcome Page’},
{ name: ‘og:url’, content: ‘/’ },
{ name: ‘og:title’, content: ‘Welcome Page’ },
{ name: ‘og:description’, content: ‘This is Welcome Descrition’ },
{ name: ‘og:image’, content: ‘/assets/images/welcome-meta.jpg’ }
]);
}

Итак, мы добавили образец метатега для домашней страницы, поэтому теперь давайте создадим проект облачных функций Firebase в нашем проекте.

Сначала установите инструменты Firebase, необходимые для создания проекта облачных функций.

//Only if you are new
npm install -g firebase-tools

Таким образом, он установит инструменты Firebase глобально, а затем даст приведенную ниже команду для создания проекта облачной функции в каталоге вашего проекта.

firebase init

# select hosting, functions // use space bar

Теперь сделайте свою общую папку dist/browser, но перепишите весь трафик в функции, чтобы ваш файл firebase.json выглядел так, как показано ниже.

{
  "hosting": {
    "public": "dist/browser",
     // ...
    "rewrites": [
      {
        "source": "**",
        "function": "ssr"
      }
    ]
  }
}

Скопируйте производственное приложение Angular (папку dist) в функциональную среду, и для этого выполните следующие шаги.

cd functions
npm i fs-extra

создайте имя файла cp-angular.js в каталоге функций, а затем добавьте этот код в этот файл.

функции/cp-angular.js

const fs = require('fs-extra');

(async() => {

    const src = '../dist';
    const copy = './dist';

    await fs.remove(copy);
    await fs.copy(src, copy);

})();

Измените команду сборки для функций в файле package.json.

функции/package.json

{
  "name": "functions",
  "engines": {
    "node": "8"
  },
  "scripts": {
    "build": "node cp-angular && tsc"
  }
}

Самой функции нужно только импортировать универсальное приложение в текущий рабочий каталог. Вот почему нам нужно скопировать его в окружение функции.

в основном добавьте это в файл functions/index[.js||.ts]. предпочитаю использовать сервер JavaScriptу меня предвзятое отношение к машинописному тексту, я не хочу, чтобы вы были экспертом в своем деле.

//const functions = require("firebase-functions"); // For .js only
//import * as functions from 'firebase-functions'; //FOR .ts only

const universal = require(`${process.cwd()}/dist/server`).app();

export const ssr = functions.https.onRequest(universal);

Итак, напишите теперь, экспортируйте функцию экспресс-приложения из файла server.ts, поэтому перейдите в файл server.ts в корневом каталоге и добавьте экспорт, который указан ниже. Более новая версия делает это автоматически, но убедитесь, что у вас есть экспорт перед функцией

function app() // replace it with below line
export function app()

После этого не давайте добавим команду сборки функции в файл package.json вашего корневого каталога.

Итак, перейдите в файл [projectName]/package.json и добавьте эти строки

"build:functions": "npm run --prefix functions build" // add "build:all": "npm run build:ssr && npm run build:functions" // add

Поэтому мы добавили команду сборки для рендеринга на стороне сервера, а также для сборки функций. Итак, мы закончили со всеми настройками, и теперь пришло время собрать и развернуть. Итак, чтобы создать и развернуть в облаке функцию, введите следующую команду.

npm run build:all // build command for SSR and Functions
firebase serve // test in local (optional)
firebase deploy // to deploy in Cloud function

Итак, теперь универсальное приложение Angular развернуто для его тестирования, перейдите по URL-адресу и нажмите «Просмотреть источник», и вы сможете увидеть детали метатега. Таким образом, это полный и простой процесс развертывания приложения Angular Universal Server Side Rendering в облачной функции.

Теперь, когда вы запускаете npm run build:all, ваш проект будет отображаться внутри dist, но в папке вашего [projectName], так почему бы не установить прямые ссылки на dist? вы должны предпочесть вручную удалить и вставить эти файлы в dist из [projectName]. потому что однажды ты совершишь большую ошибку. вам, возможно, придется показать своему клиенту, и у вас не будет даже того, что у вас есть! Я всегда рекомендую иметь базовую резервную копию на случай таких бедствий. Надеюсь, вам понравилась моя перспектива. В противном случае вы всегда можете сделать пожертвование в DIPESH BHOIR EDUCATION FUND через службу поддержки. ;)

ЛЮБОПЫТНЫЙ ФАКТ

Я ПРОЧИТАЮ СВОИ СТАТЬИ, КОГДА СЛУЧАЮ ОШИБКИ, ПОТОМУ ЧТО ОНИ ТАК ХОРОШО НАПИСАНЫ!

Надеюсь, эта статья помогла!

Благодарен? ХЛОП МОЖЕТ ПОМОЧЬ ЭТОМУ ПРИОБРЕСТИ БОЛЬШУЮ АУДИТОРИЮ!

Дипеш Бхоир

Instagram | Twitter | Github

^Помните! В основном не публикуется! основной для связи.

Другие темы, которые вы, возможно, захотите продолжить читать.