Angular cli: подготовка к работе

Я написал свое первое приложение на Angular 2 и хотел бы разместить его на тестовом сервере.

Недавно я преобразовал его в проект Angular-cli и построил его с помощью команды:

ng build --prod

Насколько я понимаю, я должен иметь возможность вставить содержимое папки «/dist» на тестовый сервер и запустить его с помощью

ng serve

Однако, если папка «/dist» может работать автономно, почему я не могу запустить ее на своем компьютере как отдельное приложение (т. е. я не могу скопировать содержимое папки dist в другое место на компьютере и запустить ее.)

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


person Seeker    schedule 27.01.2017    source источник


Ответы (3)


Вы не должны, и я думаю, что не можете использовать ng serve для публикации своей сборки. Файлы, созданные с помощью ng build, можно загрузить на веб-сервер и обслуживать оттуда.

  1. Беги ng build -e=prod --prod --no-sourcemap --aot

Хотя в последней версии angular-cli по умолчанию исходные карты отсутствуют, это стоит отметить. -e=prod позаботится о том, чтобы использовалась производственная среда, определенная в папке environments. Последнее - это --aot. Если в вашем проекте не происходит ничего особенного, есть большая вероятность, что вы можете предварительно скомпилировать его с помощью компилятора с опережением времени. Однако вы можете столкнуться с проблемами, и вы можете устранить их с помощью ng serve --aot или полностью удалить --aot.

  1. Затем вы можете продолжить копирование содержимого папки dist на свой веб-сервер. Однако стоит отметить, что вы должны убедиться, что все несуществующие файловые запросы на сервере будут перенаправляться на index.html, а URL-адрес, указывающий на ваше приложение, находится в корне.

Это означает, что для перенаправления index.html, например, на nginx, вы можете поместить это в блок конфигурации вашего сервера:

location / {
  try_files $uri $uri/ /index.html;
}

Это если www.example.com обслуживает index.html, созданный в папке dist. Если по какой-то причине вы хотите обслуживать свое приложение из подпапки, например, www.example.com/subfolder, вам следует изменить тег <base> внутри сгенерированного index.html, чтобы он указывал на эту подпапку.

Если вы хотите протестировать производственную сборку локально, одним из вариантов является установка lite-server.

npm install -g lite-server

Затем перейдите в консоли к path/to/project/root/dist и запустите lite-server. Это создаст веб-сервер, откроет ваш браузер и будет обслуживать сгенерированные index.html

Если вы используете nginx и хотите быть крутым и обслуживать сгенерированные файлы .gz статически, вы можете поместить это в свою конфигурацию nginx gzip:

gzip on;
gzip_static on;
person Poul Kruijt    schedule 27.01.2017
comment
Спасибо большое. Он работает на lite-сервере (хотя загрузчик не загружается, поэтому мне нужно выполнить некоторые настройки). Все остальные тоже помогли, но ваше предложение lite-server было особенно полезным. Отметив это как ответ. - person Seeker; 27.01.2017

nb build --prod поместите все необходимые файлы в папку dist.

Вам не нужно ng serve для запуска построенного проекта.

Вам нужно будет поместить dist контент на любой сервер (даже на какой-нибудь локальный хост)

ng serve предназначен только для разработки с перезагрузкой в ​​реальном времени.

person DDRamone    schedule 27.01.2017

У вас есть два варианта: вы можете скопировать свое приложение и запустить ng serve --prod (что, я думаю, немного избыточно), или вы можете скопировать свое ./dist на другой сервер и использовать какое-либо серверное программное обеспечение (например, nginx, apache, express - их много , вы можете выбрать тот, с которым вы знакомы). Все, что вам нужно, это передать все запросы, которые не запрашивает файл, в index.html, поскольку угловое приложение является SPA. Вот пример .htaccess для сервера Apache:

RewriteEngine On  
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]

# If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html
person Ledzz    schedule 27.01.2017
comment
Хотя этот файл .htaccess в основном работает, если я использую такие маршруты, как /members, он будет перенаправлять их на /index.html, если я напрямую введу их в адресную строку браузера. Это не то, что я хочу, и не то, что делает ng serve. Может быть, вы знаете способ поддержки путей? - person LetzFlow; 10.08.2017