Обновление Angular 5 NullInjectorError: нет провайдера для InjectionToken LocaleId

У меня есть приложение Angular 4, которое я обновил до Angular 5 с CLI 1.5.4. У меня также есть общая библиотека, использующая ссылку npm. После обновления мне пришлось добавить это в мой tsconfig.app.json, чтобы снова получить сборку CLI:

  "include": [
    "./**/*.ts",
    "../node_modules/my-lib/src/**/*.ts",
    "../node_modules/my-lib/index.ts",
    "../node_modules/my-lib/ng2-icad-cf.ts"
  ],

После успешной сборки я получаю следующую ошибку при посещении локального хоста: 4200

NullInjectorError: No provider for InjectionToken LocaleId!

Я не смог найти никаких ссылок на LOCALE/LocaleId в моем проекте. Я подозреваю, что связанная библиотека может быть проблемой, так как у меня был тот же NullIjectorError для Http (библиотека использует Http, проект использует HttpClient), но с тех пор он исчез после добавления HttpClient в основной модуль библиотеки, даже после возврата назад и его удаления... очень странный.


person that_guy    schedule 28.11.2017    source источник


Ответы (2)


Я столкнулся с той же проблемой.

Во-первых, обязательно используйте «peerDependencies» для любых библиотек Angular, от которых зависит ваш модуль, как описано здесь: https://github.com/angular/angular-cli/issues/3854#issuecomment-274344771

Затем попробуйте запустить/создать приложение, передав --preserve-symlinks в Angular CLI. Например:

ng serve --preserve-symlinks

См. https://github.com/angular/angular-cli/issues/8677#issuecomment-347885068 для более подробной информации.

Кроме того, это может помочь: https://github.com/angular/angular-cli/wiki/stories-linked-library

person Max Tacco    schedule 22.12.2017
comment
Мне также пришлось использовать исправление плагина путей, описанное здесь: github.com/angular /angular-cli/issues/8117 - person that_guy; 28.12.2017
comment
чтобы сделать это более универсальным, вы можете отредактировать angular.json и установить preserveSymlinks: true в «параметрах» для browser. Также, чтобы иметь возможность запускать тесты, сделайте то же самое для karma builder - подробнее здесь stackoverflow.com/a/55023801/3021889 - person ciekawy; 06.03.2019

Импортируйте модуль LOCALE_ID в файл тестирования, а затем экспортируйте его как GLOBAL_PROVIDER.

import { LOCALE_ID } from '@angular/core';


export const GLOBAL_PROVIDER = [
  { provide: LOCALE_ID, useValue: 'en'}
];
person Samyak Jain    schedule 27.04.2020