Развертывание конвейера CI/CD AngularJS1.5.11 на веб-сайтах Azure с ошибкой Не удалось создать экземпляр модуля app.core из-за неизвестного поставщика: ENV_VARS

после развертывания приложения «AngularJs_1.5.11» на «веб-сайтах Azure» с использованием непрерывной интеграции и развертывания «azure-devops» возникает ошибка:

[$injector:modulerr] Failed to instantiate module app due to: Error: [$injector:modulerr] Failed to instantiate module app.core due to: Error: [$injector:unpr] Unknown provider: ENV_VARS

ниже приведен снимок экрана с ошибкой при доступе к лазурному веб-сайту AngularJS: ошибка при доступе к azure-веб-сайту AngularJS также найдите ниже скриншот моего конвейера сборки в azure-devops, который развертывает сборку приложения AngularJS в " azure-websites" создать конвейер в azure-devops На снимке экрана ниже показан код моего приложения в VSCode код приложения в VSCode Я только начал работать над этим новым проектом, в котором используется AngularJS_1. 5.11, так что я понятия не имею, что происходит. Я попробовал эти ссылки неизвестный поставщик ENV в AngularJS из стека, но поскольку я новичок в AngularJS Я понятия не имею, где применить изменения в моем коде, упомянутые в ссылке.

Любые предложения будут очень полезны.

Изменить:

@Mark, если вы посмотрите на скриншоты ниже, вы узнаете, как мы устанавливаем «ENV_VARS» в коде, используя файл «gulp.js, env.config.js, config.json» введите здесь описание изображения< /а>

Редактировать1:

@Mark, пожалуйста, найдите скриншот файла «config.js», который создается в задаче gulp «ng-config» с использованием исходного файла «config.json» в «./src/client/app/config.js»   файлы конфигурации


person Vijay Ande    schedule 04.06.2019    source источник


Ответы (1)


Вот документы, касающиеся знаний, относящихся к этой проблеме.

Где-то в вашей программе он пытается сослаться на один или несколько членов, определенных в поставщике angular, зарегистрированном как «ENV_VARS». Поставщики — это объекты angularjs, которые доступны во время компиляции (см. строку таблицы для «объекта, доступного на этапе конфигурации» в этом SO answer)

Я бы поискал источник приложения, чтобы узнать, был ли этот провайдер дополнительно настроен в другом месте (вы можете выполнить поиск по его имени «ENV_VARS»), поскольку он может не отправляться вместе с другими вашими исходными файлами.

Чтобы попытаться быстро исправить:

В первой строке вашего app.module.js измените его на это

angular.module('app.config', []).constant("ENV_VARS", {});

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

person Mark Clark    schedule 04.06.2019
comment
спасибо @Mark за быстрый ответ. ваши комментарии действительно полезны. Я постараюсь реализовать то, что вы упомянули. Отметить Прошу вас взглянуть на мой обновленный исходный пост в разделе Редактировать:, чтобы увидеть код, который мы используем для установки ENV_VARS в нашем проекте. Если будет справедливо установить ENV_VARS в проекте, как вы думаете, сработает ли изменение кода, которое вы упомянули в своих комментариях? или мне нужно установить или внедрить ENV_VARS где-нибудь еще в проекте. Спасибо за ваше время для ответа на этот пост. Прошла неделя, я работаю над этой проблемой, но не могу найти какое-либо решение в Интернете. - person Vijay Ande; 05.06.2019
comment
@Vijay Если я правильно понимаю ваши скриншоты, похоже, что gulp создает исходный файл для настройки рассматриваемого провайдера. Затем этот исходный файл передается в задачу gulp ngConfig, которая генерирует «app.config» как константу. Единственное, в чем я не уверен, так это в том, где находится этот файл (config.client+'app') и связывает ли ваше веб-приложение его так, чтобы он присутствовал при загрузке angularjs на клиенте. - person Mark Clark; 05.06.2019
comment
вы правы, что задача gulp создает исходный файл config.json, и этот файл передается в задачу gulp ngConfig, которая генерирует config.js, который находится в папке .\src\client\app. Я прикрепил скриншот для справки к моему исходному сообщению в разделе Edit1:. Теперь вопрос в том, что веб-приложение связывает его так, чтобы оно присутствовало, когда angularjs загружается на клиенте? если нет, то как это сделать, чтобы связать его. Если вы посмотрите на мой конвейер CI / CD в моем исходном посте, я использую задачу сборки gulp для создания пакета, а затем перемещаю пакет на веб-сайт Azure. - person Vijay Ande; 05.06.2019
comment
он отлично работает в моем локальном ящике, когда я развертываю его на веб-сайте Azure с помощью CI / CD, он дает мне ошибку ENV_VARS, что он не может ее найти. - person Vijay Ande; 06.06.2019
comment
Убедитесь через scm/kudu или ftp, что файл config.js присутствует, и когда вы загружаете сайт, убедитесь, что он загружается браузером. - person Mark Clark; 06.06.2019
comment
Отметьте, что все файлы js и css в проекте минимизируются и объединяются, когда я запускаю сборку gulp в папку сборки, которая загружается на веб-сайт Azure. я обнаружил, что задача gulp ng-config создает файл config.js во время конвейера сборки devops, но когда запускается сборка gulp, она не берет содержимое файла и не вводит его в мини-файл js. В результате в файле отсутствует постоянная переменная ENV_VARS, что вызывает сообщение об ошибке на веб-сайте Azure. - person Vijay Ande; 07.06.2019
comment
Извините за задержку с ответом. Это не должно иметь значения, попадет ли он в минифицированный файл или нет. Пока он присутствует на клиенте после angular.js и минимизированного js вашего приложения, он все равно должен выполняться во время конфигурации. Что вам нужно проверить, так это то, что config.js попадает в развернутый каталог и отправляется в клиентский браузер. Если бы создатели этого шаблона хотели, чтобы файл config.js был минимизирован вместе с приложением, вероятно, это уже было бы настроено для gulp. Вот еще что нужно проверить: где находится config.js в корневом html-макете вашего шаблона? - person Mark Clark; 26.06.2019