У меня есть простое приложение angular2-cli (одна страница с управляемой моделью - никакой маршрутизатор не задействован). С «ng serve» все работает нормально. Я сделал производственную версию с ng build --product. Я скопировал содержимое папки ./dist в новую папку под C: \ inetpub \ wwwroot. Я сделал виртуальное приложение из консоли управления IIS. Файл приложения Defualt - index.html. Я просматриваю приложение uri и получаю только страницу с «Загрузка ...». Я пытаюсь построить без --product switch (только ng build), но результат тот же. Угловое приложение не загружается. Нужно ли что-нибудь еще для публикации углового приложения в IIS?Как развернуть приложение angular-cli на iis
ответ
Я пробовал подход ниже, чтобы он работал.
- Создать новый веб-сайт в IIS (через INETMGR)
- использования «нг построить --prod» - создания серийной версии кода
- копировать файлы в DIST папки затем вставьте его в корневой папке веб-сайта IIS (Дон Скопируйте папку и поместите ее в корневую папку веб-сайта IIS, которая вызовет проблему)
- Задайте учетные данные, авторизацию и т. д. с вашего конца.
- Установите разрешение доступа к корневой папке для «ИМЯ_КОМПЬЮТЕР \ IIS_IUSRS & ИМЯ_КОМПЬЮТЕР \ NETWORK SERVICE»
- Установить страницу по умолчанию как «index.html» в IIS
- Теперь вы можете просматривать веб-сайт.
У меня есть несколько настроек прокси в файле proxy.conf.js. После запуска «ng build --aot --prod» я развернул файлы dist как есть. Веб-сайт запущен, но страницы, использующие настройки прокси-сервера, все еще используют localhost. Как настроить параметры прокси-сервера в процессе производства? – user2347528
При открытии средства разработки вашего браузера, вы бы видели 404 сообщения, когда приложение пытается DONWLOAD в JS, CSS и т.д. файлы
Вам необходимо установить базовый HREF в index.html в
<base href="./">
это будет убедиться, что база матча относительно того, где ваш сайт живет в IIS. Вам также нужно использовать стратегию размещения хэшей, иначе IIS перехватит ваши URL-адреса URL-адреса маршрутизатора ng2 и попытается найти контроллер/действие для URL-адреса.
под импортом вашего app.module.ts:
RouterModule.forRoot(routerConfig, { useHash: true })
Я сделал эти 2 шага, и все прекрасно работает на Azure VM с IIS. Выполнение этого так же означает, что вам не нужно класть свой SPA на корневой центр, и вы можете много работать СПА рядом друг с другом (на разных сайтах в IIS)
Спасибо, но существует способ развертывания приложения без использования хэша? это моя главная проблема. Все работает отлично, но если вы хотите перейти к определенному маршруту (например, www.site.com/login), IIS возвращает 404 (ожидаемое поведение), но если навигация, сделанная с помощью приложения, отлично работает (проблема возникает с помощью навигации bar от проводника) –
Вот как я решаю эту ситуацию;
- Создание проекта с углового кли
- Построить приложение с
ng build
- Open IIS, создайте новый виртуальный каталог и показать
dist
папку - Set
base href
в вашем index.html из/
в/yourAliasNameOnIIS
Используйте этот файл web.config для перенаправления запросов на ваш индекс.HTML страница
<system.webServer> <rewrite> <rules> <rule name="AngularJS Routes" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" /> </conditions> <action type="Rewrite" url="/yourAliasNameOnIIS" /> </rule> </rules> </rewrite>
Преобразовать виртуальный каталог на веб-приложения
Вы также можете использовать ng build --deploy-url "/yourAliasNameOnIIS"
изменить путь Src в dist/index.html
.
Надеюсь, это поможет!
Просто примечание: '--deployUrl' больше не существует (не уверен, что он когда-либо был), теперь это' --deploy-url'. Кроме того, может быть полезно также использовать '--base-href' для фактического изменения базового href. Команда url для развертывания просто меняет места расположения скриптов src. – Sanity1123
Я следил за этим подходом, но получал 404 ошибки во всех файлах css, js и т. Д. – Flea
Можете ли вы также сделать эти шаги с помощью фиктивного проекта? Я имею в виду, вы можете просто создать новый пустой угловой проект и сделать эти шаги? – ulubeyn
Для меня это было очень просто:
- Выполните команду нг сборки. Он будет генерировать папку dist.
- href = ""index.html файл.
- Дайте путь папки dist к приложению IIS, и он будет работать.
Это делает его еще проще, вам не нужно изменять index.html файл:
ng build -prod --base-href
В дополнение к ответу ulubeyn, что в основном работал для меня, я добавил свой собственный повторно IIS -Write правила для того, чтобы:
1) начальное перенаправления из/дист с псевдонимом 2) Javascript загрузки из псевдонима и 3) Угловой маршрутизации на псевдоним
<rules>
<rule name="Redirect from blank URL to IIS Alias" stopProcessing="true">
<match url="^/?$" />
<action type="Rewrite" url="/MyDist" />
</rule>
<rule name="Redirect from /dist folder to IIS Alias" stopProcessing="true">
<match url="^(.*)/dist" />
<action type="Rewrite" url="/yourAliasNameOnIIS" />
</rule>
<rule name="Allow Angular URL Routing on IIS Alias" stopProcessing="true">
<match url="^yourAliasNameOnIIS/*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
</conditions>
<action type="Rewrite" url="/yourAliasNameOnIIS" />
</rule>
<rule name="Redirect to IIS Alias folder with parameters" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
</conditions>
<action type="Rewrite" url="/yourAliasNameOnIIS/{R:1}" appendQueryString="true" />
</rule>
</rules>
- 1. Как развернуть приложение-службу WCF на IIS
- 2. Развернуть приложение Asp.net на IIS 7
- 3. как развернуть приложение mvc4 + EntityFrame6 для iis?
- 4. Как развернуть приложение asp.net mvc для IIS
- 5. Как развернуть приложение Angular 2 на сервер Windows (IIS)?
- 6. Как развернуть приложение ASP.NET на localhost с помощью IIS?
- 7. Развернуть приложение MVC 6 в IIS
- 8. Развернуть приложение MVC для IIS 7.5
- 9. Как развернуть WCF службу на IIS 6.0
- 10. Как развернуть сайт на локальный IIS
- 11. Как развернуть веб-приложение
- 12. Как развернуть одностраничное приложение Asp.net в IIS 8.5
- 13. Как развернуть приложение IIS ASP .NET с полным доверием?
- 14. Развернуть приложение на Activemq
- 15. Как развернуть приложение Flask в IIS 8 (Windows Server 2012)
- 16. развернуть приложение на jboss
- 17. развернуть приложение на couchdb
- 18. Как развернуть приложение silverlight 4
- 19. Как развернуть .NET Web Project в IIS
- 20. Как развернуть приложение Mono?
- 21. Как развернуть приложение Symfony3?
- 22. Как развернуть приложение jRuby?
- 23. Как развернуть приложения и включить настройки IIS?
- 24. Как развернуть приложение MFC?
- 25. как развернуть приложение автоматически
- 26. Как развернуть консольное приложение
- 27. Как развернуть приложение QT5.2?
- 28. Как развернуть приложение mvc
- 29. Как развернуть приложение symfony2?
- 30. Как развернуть большое приложение
проверить консоль браузера на наличие ошибок, если он просто говорит «Загрузка ...» – PierreDuc
Я нашел, что не так. В index.html я должен иметь вместо . Когда я добавил точку, все начинает работать. –
PaulStanek
У вас возникнет проблема, если вы собираетесь использовать маршрутизатор. Но, как вы упомянули, вы этого не сделаете, что означает, что href = "." Должно быть достаточно. Вероятно, вы опубликовали свое приложение в подпапке. Вы также можете использовать это имя подпапки как base href – PierreDuc