Angular2 Нет провайдера для t! и Uncaught (в обещании): Error: DI Error

Я создал приложение на Angular 2 и столкнулся с проблемой. Я использовал angular CLI для создания своего приложения, я создал свои компоненты и службы с помощью Angular CLI, и я использую «ng serve» для локального запуска приложения, и все работает нормально. Чтобы создать сборку для PROD, я использую команду «ng build --Prod --base-href ./ --aot», она создает папку DIST и размещает эту папку в IIS. открывает приложение нормально. Когда я проверяю код в TFS, возникает событие, которое автоматически создает папку DIST с помощью jenkins и отправляет сборку на мой сервер. Теперь, если я просматриваю приложение для сервера, оно выдает следующие ошибки «Нет провайдера для t!» и Ошибка: DI Error. Я не знаю, что я здесь делаю не так.

Ниже приведены скриншоты ошибки.

введите описание изображения здесь

введите описание изображения здесь


Любая помощь приветствуется.


person Prasanna venkatesan.j    schedule 03.02.2017    source источник
comment
Попробуйте выполнить компиляцию с параметром --aot.   -  person Ben Richards    schedule 04.02.2017
comment
@BoyanKostadinov: с аот или без? Если он без --aot, я уже пробовал с --aot и разместил приложение в IIS, и оно сработало.   -  person Prasanna venkatesan.j    schedule 04.02.2017
comment
Тогда это проблема с вашей сборкой на сервере Jenkins.   -  person Ben Richards    schedule 04.02.2017
comment
@BoyanKostadinov Спасибо за ответ, проблему нашел. Я использовал ng2-Toastr в своем приложении, которое вызывало эту проблему с зависимостью. Удаление тостра решило проблему.   -  person Prasanna venkatesan.j    schedule 08.02.2017
comment
У меня такая же проблема, но я не использую ng2-Toastr ...   -  person Abhishek Subradeep    schedule 01.03.2017
comment
@ Prasannavenkatesan.j просто для того, чтобы дать вам некоторую информацию, не помещайте минифицированные сообщения об ошибках, потому что после минификации все имена переменных будут утеряны, например, SampleVariable станет t. так что запустите приложение до процесса минификации и удаления. Дает гораздо более четкое представление о том, что не так. С уважением   -  person Sumit Khanduri    schedule 05.04.2017


Ответы (4)


У меня была такая же проблема. Я смог решить эту проблему:

  1. работает ng serve -aot. Мне удалось узнать, что это за отсутствующий класс, поскольку он запускает AOT без запуска minify / uglify.
  2. Как только я это сделал, я смог просмотреть контекст ошибки, чтобы выяснить, у какого компонента возникли проблемы.
  3. Перейдите к рассматриваемому компоненту и начните удалять ссылки в конструкторе (где происходит разрешение зависимостей.

В моем случае у меня возникла проблема с использованием класса Logger в модуле angular2-logger / core. Как только я удалил ссылку из конструктора и перекомпилировал компиляцию, все заработало как шарм. Затем я проверил с ng serve -prod, чтобы убедиться, что это тоже было исправлено.

Одна вещь, которую я обнаружил, заключалась в том, что мне пришлось явно убить Angular CLI и перестроить. По какой-то причине, когда я изменил одну строку и сохранил, она сказала, что она перекомпилирована и все еще не работает. Только когда я убил его и снова запустил команду, я понял, что это действительно исправлено.

person Brian Bauman    schedule 14.05.2017

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

person Miller    schedule 20.06.2017

фиксированный ! в моем случае это произошло из-за того, что NotificationService для angular2-notifications

решение - просто удалить NotificationService из массива поставщиков внутри вашего модуля приложения.

но все же это должно быть подтверждено ранее angular в режиме AOT.

Спасибо!

person Hasan Daghash    schedule 01.10.2017

Вот один из способов определить ошибку - начните с отключения плагина uglify (который автоматически устанавливается для рабочей среды) - и нет способа сделать это с помощью angular-cli. Его можно временно закомментировать, выполнив поиск UglifyJSPlugin в каталоге node_modules. Найдя его (в файле common.js), закомментируйте

/*              
// Temporarily comment out this part (in common.js of node_modules) to pinpoint the error
                new UglifyJSPlugin({
                    sourceMap: buildOptions.sourceMap,
                    parallel: true,
                    cache: true,
                    uglifyOptions,
                }),
              */

Снова создайте свое приложение и запустите. Затем такая загадочная ошибка, как эта

Unhandled Promise rejection: StaticInjectorError(ne)[t -> t]: 
  StaticInjectorError(Platform: core)[t -> t]: 
    NullInjectorError: No provider for t! ; Zone: <root> ; Task: Promise.then ; Value: Error: StaticInjectorError(ne)[t -> t]: 
  StaticInjectorError(Platform: core)[t -> t]: 
    NullInjectorError: No provider for t!

становится

Unhandled Promise rejection: StaticInjectorError(AppModule)[TranslatorService -> Http]: 
  StaticInjectorError(Platform: core)[TranslatorService -> Http]: 
    NullInjectorError: No provider for Http! ; Zone: <root> ; Task: Promise.then ; Value: Error: StaticInjectorError(AppModule)[TranslatorService -> Http]: 
  StaticInjectorError(Platform: core)[TranslatorService -> Http]: 
    NullInjectorError: No provider for Http!
person Srikanth    schedule 25.05.2018