Как вы развертываете приложения Angular?

143

Как вы развертываете Angular 2 приложения, когда они достигают фазы производства?

Все руководства, которые я видел до сих пор (даже на angular.io), рассчитывают на Lite-сервер для обслуживания и browserSync, чтобы отражать изменения, но когда вы заканчиваете разработку, как вы можете опубликовать приложение?

Я импортирую все скомпилированные файлы .js на странице index.html или могу ли я их минимизировать с помощью gulp? Будут ли они работать? Мне нужна SystemJS вообще в производственной версии?

Теги:
angular
production
systemjs

11 ответов

65
Лучший ответ

Вы на самом деле здесь касаетесь двух вопросов в одном. Во-первых, как разместить свое приложение. И как @toskv упомянул о своем очень широком вопросе, на который нужно ответить, и зависит от множества разных вещей. Второй - более конкретный - как вы готовите версию приложения для развертывания. Здесь у вас есть несколько вариантов:

  • Развертывание как есть. Просто это - никакая минификация, конкатенация, название mangling и т.д. Транспарируйте весь ваш проект ts, скопируйте все полученные в результате js/css/... источники + зависимости с сервером хостинга, и ваши успехи идут.
  • Развертывание с использованием специальных инструментов для комплектации. Как webpack или systemjs builder. Они приходят со всеми возможностями, которые отсутствуют в # 1. Вы можете упаковать весь свой код приложения в пару файлов js/css/..., которые вы укажете в своем html. Systemjs builder даже позволяет избавиться от необходимости включать systemjs как часть вашего пакета развертывания.

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

Я знаю, что это звучит грязно - чтобы помочь вам начать С# 2, вот два действительно хороших примера приложений:

Конструктор SystemJS: angular2 seed

WebPack: angular2 webpack startter

Посмотрите, как они это делают - и, надеюсь, это поможет вам найти способ объединения приложений, которые вы делаете.

  • 1
    Я также рекомендовал бы JSPM ( jspm.io ): информация здесь gist.github.com/robwormald/429e01c6d802767441ec и начальный проект здесь github.com/madhukard/angular2-jspm-seed
  • 0
    После 6 месяцев, когда Angular2 находится в rc5 и скоро будет выпущен, этот ответ по-прежнему актуален, поскольку он ссылается на начальный проект angular2. Отличный проект, много участников!
Показать ещё 9 комментариев
63

Простой ответ. Используйте CLI Angular и выполните

ng build 

в корневом каталоге вашего проекта. Сайт будет создан в каталоге dist, и вы можете развернуть его на любом веб-сервере.

Это будет создаваться для тестирования, если у вас есть производственные настройки в вашем приложении, вы должны использовать

ng build --prod

Это создаст проект в каталоге dist, и его можно будет нажать на сервер.

Многое произошло с тех пор, как я впервые опубликовал этот ответ. CLI, наконец, находится на уровне 1.0.0, поэтому следуя этому руководству, обновите свой проект, прежде чем пытаться его построить. https://github.com/angular/angular-cli/wiki/stories-rc-update

  • 0
    Как ты это делаешь? После быстрого запуска Angular 2 я запускаю эту команду вместо 'npm start' и получаю 'ng command not found'
  • 1
    @NateBunney Я новичок в сцене веб-разработки. Я сбит с толку. ng build производит кучу файлов в папке dist. Скажем, вы используете весеннюю загрузку в качестве веб-сервера, просто скопируйте и вставьте эти файлы в общедоступную папку web-inf при весенней загрузке? Или вам нужен сервер nodejs перед весенней загрузкой для обслуживания ng2 dist?
Показать ещё 9 комментариев
10

С CLI Angular это легко. Пример для Heroku:

  • Создайте учетную запись Heroku и установите CLI

  • Переместите angular-cli dep в dependencies в package.json (чтобы он устанавливался, когда вы нажимаете на Heroku.

  • Добавьте postinstall script, который будет запускать ng build, когда код будет перенесен в Heroku. Также добавьте команду запуска для сервера Node, который будет создан на следующем шаге. Это поместит статические файлы для приложения в каталог dist на сервере и запустит приложение позже.

"scripts": {
  // ...
  "start": "node server.js",
  "postinstall": "ng build --aot -prod"
}
  1. Создайте сервер Express для обслуживания приложения.
// server.js
const express = require('express');
const app = express();
// Run the app by serving the static files
// in the dist directory
app.use(express.static(__dirname + '/dist'));
// Start the app by listening on the default
// Heroku port
app.listen(process.env.PORT || 8080);
  1. Создайте удаленное устройство Heroku и нажмите на приложение depoy.
heroku create
git add .
git commit -m "first deploy"
git push heroku master

Вот быстрый writeup. У меня было более подробно, в том числе, как заставить запросы использовать HTTPS и как обращаться с PathLocationStrategy:)

  • 0
    добавление angular-cli в зависимости увеличивает размер dist, как справиться с этим
7

Надеюсь, это может помочь, и, надеюсь, я попробую это в течение недели.

  • Создание веб-приложения на Azure
  • Создайте Angular 2 приложение в коде.
  • Webpack to bundle.js.
  • Загрузите профиль сайта Azure xml
  • Настройка Azure-deploy с использованием https://www.npmjs.com/package/azure-deploy с профилем сайта.
  • Deploy.
  • Вкус сливок.
  • 53
    Пожалуйста, не делайте подобных вещей в Microsoft, поскольку это просто совместимо с Azure. Это все равно что сказать, что если вы используете Angular, вы должны иметь возможность использовать только облачные сервисы Google.
  • 2
    Полезно знать, что для развертывания в Azure существует модуль npm.
Показать ещё 2 комментария
2

Вы получаете самую маленькую и самую быструю загрузочную комплектацию путем компиляции с компилятором Ahead of Time и древовидным встряхиванием/минимизацией с помощью накопителя, как показано в кулинарной книге angular AOT здесь: https://angular.io/docs/ts/latest/cookbook/aot-compiler.html

Это также доступно в Angular -CLI, как сказано в предыдущих ответах, но если вы не сделали свое приложение с помощью CLI, вы должны следовать поваренной книге.

У меня также есть рабочий пример с материалами и диаграммами SVG (с поддержкой Angular2), который включает в себя набор, созданный в кулинарной книге AOT. Вы также найдете все конфиги и скрипты, необходимые для создания пакета. Посмотрите здесь: https://github.com/fintechneo/angular2-templates/

Я сделал быстрое видео, демонстрирующее разницу между количеством файлов и размером скомпилированной сборки AoT и средой разработки. Он показывает проект из репозитория github выше. Вы можете увидеть это здесь: https://youtu.be/ZoZDCgQwnmQ

  • 0
    Спасибо за ссылку на документацию и за упоминание компиляции AOT. Значение звучит правдоподобно: "This cookbook describes how to radically improve performance by compiling Ahead of Time (AOT) during a build process."
  • 1
    Спасибо за отзыв - если вы не нашли время для тестирования AoT-компиляции самостоятельно, я добавил видео, показывающее разницу в количестве файлов и размере (используя проект github, указанный в ответе).
Показать ещё 1 комментарий
1

Развертывание Angular 2 в лазурие легко

  • Запустите ng build --prod, который будет генерировать папку dist со всем, что связано с несколькими файлами, включая index.html.

  • Создайте в нем группу ресурсов и веб-приложение.

  • Поместите файлы файлов dist с помощью FTP. В лазурном режиме он будет искать index.html для запуска приложения.

Что это. Приложение работает!

  • 0
    Только если вы начнете свой проект с angular-cli нет?
  • 0
    Не таким образом. Если вы не запустили свой проект angular2 с помощью angular-cli, вы можете создать проект для производства. Только вам нужно установить angular-cli на вашем компьютере во время сборки. Используйте npm install -g @ angular / cli для глобальной установки angular-cli.
1

Angular 2 Развертывание в страницах Github

Тестирование Развертывание Angular2 Webpack в ghpages

Сначала получите все соответствующие файлы из папки Dist вашего приложения

для меня это были файлы css в папке с ресурсами main.bundle.js polyfills.bundle.js vendor.bundle.js

Затем нажмите эти файлы в созданном вами репо.

1 - Если вы хотите, чтобы приложение запускалось в корневом каталоге - создайте специальное репо с именем [yourgithubusername].github.io и запустите эти файлы в главной ветке

2 - Если вы хотите создать эту страницу в подкаталоге другого брака, кроме корневого, создайте ветки gh-pages и вставьте эти файлы в эту ветвь.

В обоих случаях способ доступа к этим развернутым страницам будет другим.

В первом случае это будет https://[yourgithubusername].github.io, а во втором случае это будет [yourgithubusername].github.io/[ Имя репо].

Если предполагается, что вы хотите развернуть его с помощью кода sefcond, обязательно измените базовый url pf на файле index.html на dist, поскольку все сопоставления маршрутов зависят от пути, который вы указываете, и его следует установить в [/branchname ].

Ссылка на эту страницу

https://rahulrsingh09.github.io/Deployment

Git Repo

https://github.com/rahulrsingh09/Deployment

1

Чтобы развернуть ваше приложение Angular2 на производственном сервере, прежде всего, убедитесь, что ваше приложение выполняется локально на вашем компьютере.

Приложение

Angular2 также может быть развернуто как приложение node.

Итак, создайте файл точки входа node server.js/app.js(в моем примере используется экспресс)

var express = require('express'),
    path = require('path'),
    fs = require('fs');

var app = express();
var staticRoot = __dirname + '/';

app.set('port', (process.env.PORT || 3000));

app.use(express.static(staticRoot));

app.use(function(req, res, next){

    // if the request is not html then move along
    var accept = req.accepts('html', 'json', 'xml');
    if(accept !== 'html'){
        return next();
    }

    // if the request has a '.' assume that it for a file, move along
    var ext = path.extname(req.path);
    if (ext !== ''){
        return next();
    }

    fs.createReadStream(staticRoot + 'index.html').pipe(res);

}); 

app.listen(app.get('port'), function() {
    console.log('app running on port', app.get('port'));
});

Также добавьте express в качестве зависимости в файле package.json.

Затем разверните его в предпочтительной среде.

Я собрал небольшой блог для развертывания в IIS. выполните ссылка

0

По состоянию на 2017 год лучше всего использовать angular-cli (v1.4.4) для вашего проекта angular.

ng build --prod --env=prod --aot --build-optimizer --output-hashing none

Вам не нужно добавлять -aot явно, поскольку он включен по умолчанию с -prod.And использование -output-hashing соответствует вашим личным предпочтениям в отношении разрыва кеша.

Вы можете явно добавить поддержку CDN, добавив:

 --deploy-url "https://<your-cdn-key>.cloudfront.net/"

если вы планируете использовать CDN для хостинга, который значительно быстрее.

0

Для быстрого и дешевого способа размещения приложения angular я использую хостинг Firbase. Это бесплатно на первом уровне и очень легко развертывать новые версии с использованием Firebase CLI. В этой статье описываются необходимые шаги для развертывания вашего приложения angular 2 в Firebase: https://medium.com/codingthesmartway-com-blog/hosting-angular-2-applications-on-firebase-f194688c978d

Короче говоря, вы запускаете ng build --prod, который создает папку dist в пакете и что папка, которая развертывается в Firebase Hosting.

  • 0
    Спасибо - это был самый простой способ, который я мог найти.
-3

Просто следуйте приведенной ниже ссылке,

Измените страницу Index.html Script Пути файлов Измените путь component.html, чтобы получить ошибку, которая не могла найти местоположение

https://angular.io/docs/ts/latest/guide/deployment.html#!#dev-deploy

Ещё вопросы

Сообщество Overcoder
Наверх
Меню