Библиотека Angular экспортирует некоторые неожиданные классы - PullRequest
1 голос
/ 11 июня 2019

В последние несколько дней я пытаюсь выделить классы из какого-либо проекта, чтобы превратить их в автономную библиотеку.После преодоления разных проблем я застрял на некоторых проблемах public_api.После сборки я получаю такой файл library.d.ts

export * from './public_api';
export { LoggerToken as ac } from './lib/components/logger/loger.token';
export { SomeService as ae } from './lib/services/some.service';
export { SomeModule as ah } from './lib/sub/some.module';

Я попытался переключить импорт / экспорт, чтобы использовать / не использовать бочечные файлы, так как я нашел некоторую информацию о том, что это может вызвать некоторыепроблемы.Также пробовал использовать разные угловые версии (началось с перенесения ng6 на 7 и 8, но всегда одинаковый результат)

Вот мои параметры компилятора

  "compilerOptions": {
    "outDir": "../../../out-tsc/lib",
    "target": "es2015",
    "module": "es2015",
    "moduleResolution": "node",
    "declaration": true,
    "sourceMap": true,
    "inlineSources": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "importHelpers": true,
    "types": [],
    "lib": [
      "dom",
      "es2018"
    ]
  },
  "angularCompilerOptions": {
    "fullTemplateTypeCheck": true,
    "annotateForClosureCompiler": true,
    "enableResourceInlining": true,
    "skipTemplateCodegen": true,
    "strictMetadataEmit": true,
    "strictInjectionParameters": true
  },

Сначала я попытался использовать экспорт бочек из индекса.ts файлы, но после прочтения того, что это может вызвать проблемы, я восстановил его, и каждый класс, который я хочу предоставить, напрямую экспортируется из public_api.ts

Я считаю, что эти экспорты не нужны, поскольку все они являются внутренними классами длябиблиотека (например, экспортированный модуль в library.d.ts содержит только некоторые импортированные файлы из внешней библиотеки, и, кроме того, они конфликтуют с некоторыми другими ошибками создания библиотек после того, как я пытаюсь использовать свою библиотеку в проекте с параметром --aot (-prod).), режим разработки работает нормально.

Я почти уверен, что что-то испортил либо в компиляторе, либо в экспорте, но не могу его найти.

1 Ответ

0 голосов
/ 11 июня 2019

Я почти уверен, что что-то напутал либо в компиляторе, либо в экспорте, но я не могу его найти.

Вы не допустили никаких ошибок.

export { LoggerToken as ac } from './lib/components/logger/loger.token';
export { SomeService as ae } from './lib/services/some.service';
export { SomeModule as ah } from './lib/sub/some.module';

Выше приведены все ссылки для инъекций .

Хотя они внутренние для вашего проекта.Angular нужна ссылка для определения поставщиков.Поскольку провайдеры идентифицируются по instance , им может быть присвоен псевдоним (ac, ae, ah), и Angular все еще может их использовать.

Вы найдете ссылки на (ac, ae, ах) в пачках webpack, но никто другой не будет их использовать.

...