Пространства имен библиотеки Angular 9

Я наткнулся на проблему с пространством имен при обновлении пакетов NPM до Angular 9. В случае, если библиотека использовалась приложением напрямую, все работало, как ожидалось, но в противном случае, в случае, если библиотека использовалась другой библиотекой, я столкнулся с сбой нулевого провайдера в ядре Angular.

ERROR TypeError: token.toString is not a function
    at stringify (core.js:489)
    at NullInjector.get (core.js:1076)
    at R3Injector.get (core.js:16629)
    at R3Injector.get (core.js:16629)
    at R3Injector.get (core.js:16629)
    at NgModuleRef$1.get (core.js:36024)
    at R3Injector.get (core.js:16629)
    at NgModuleRef$1.get (core.js:36024)
    at Object.get (core.js:33773)
    at getOrCreateInjectable (core.js:5805)

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

Решение

Наконец выяснилось, что у IVY есть проблема с методом, который я использовал для экспорта пространств имен.

// previous problematic export
barel.ts
// contains all the stuff exported under the namespace XYZ_FOO
export * from './model/models';
export * from './api/api';
index.ts
// this is how I defined my namespace in ng8 and before
import * as XYZ_FOO from './barel';
export {XYZ_FOO};

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

// new corrected export
xyz-foo.ts
// contains all the stuff exported under the namespace XYZ.FOO
export * from './model/models';
export * from './api/api';
index.ts
// updated way of exporting the namespace (works for both libs/apps)
import * as _foo from './xyz-foo';
import * as _bar from './xyz-bar';
export namespace XYZ{
    export import FOO = _foo;
    export import BAR = _bar;
}

Если у вас возникла та же проблема, я надеюсь, что это поможет вам.

См. также:  Как использовать «yield» в Python?
Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: