Вторичные точки входа библиотеки Angular, которые зависят друг от друга

#angular #typescript #angular-library #ng-packagr

#angular #typescript #angular-библиотека #ng-packagr

Вопрос:

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

У меня есть три модуля: A, B и C. A является автономным, но B зависит от C, что означает, что я должен import войти C.module.ts B.module.ts .

Я следил за этой статьей, поэтому у меня есть package.json , index.ts и public_api.ts файлы в каждом модуле.

Когда я пытаюсь создать библиотеку, я получаю следующую ошибку:

 ------------------------------------------------------------------------------
Building entry point '@org/library-name/src/lib/A'
------------------------------------------------------------------------------
Compiling TypeScript sources through ngc
Bundling to FESM2015
Bundling to UMD
Minifying UMD bundle
Writing package metadata
Built @org/library-name/src/lib/A

------------------------------------------------------------------------------
Building entry point '@org/library-name/src/lib/B'
------------------------------------------------------------------------------
Compiling TypeScript sources through ngc
ERROR: Unable to write a reference to CComponent in /.../projects/library-name/src/lib/C/C.component.ts from /.../projects/library-name/src/lib/C/C.module.ts
 

Есть идеи, как заставить это работать?
Заранее спасибо.

Комментарии:

1. Вы нашли какое-либо решение? У меня такая же проблема..

2. Можете ли вы предоставить репозиторий с базой кода для просмотра?

Ответ №1:

Я могу рассказать вам, как я решил эту проблему.

Проблема здесь в том, чтобы понять, как ng-packagr строятся наши библиотеки в зависимости от точек входа / структуры папок.

В моей конкретной ситуации у меня была следующая структура:

folder_structure

На выходе получается 2 куска, верно? my-lib/common и my-lib/common/big-chunk

Бывает, что вторичные точки входа создаются ПЕРЕД основной, поэтому, имея общую логику, мне нужно будет поместить ее (и экспортировать) во вторичную точку входа my-lib/common/big-chunk и использовать ее на основной my-lib/common .

Если вы столкнулись с необходимостью совместного использования логики, подумайте о создании точки shared входа.

Я обнаружил, что очень сложно использовать и внедрять вторичные точки входа, и могут потребоваться некоторые рефакторинги, чтобы заставить их работать и извлечь всю пользу, которую они могут принести, но в целом я думаю, что это того стоит 🙂

Комментарии:

1. можете ли вы объяснить некоторые дополнительные детали с помощью примера, в случае, если компонент C является общим для всех, так как мы можем использовать с компонентом B и в то же время с компонентом.

2. @MiguelSsSRrR, в моем случае мне нужно использовать общий одноэлементный сервис для двух разных независимых точек входа (скажем, модуля A и B). Можете ли вы помочь мне понять, как вызвать общий одноэлементный сервис в двух независимых модулях.

3. @dhana @sarangan Я думаю, что у вас обоих одинаковый вариант использования, и это продолжение того, что я объяснил выше — вам нужно создать отдельную точку входа только для общей логики (не имеет значения, является ли это сервисом, компонентом или просто функцией) и импортировать ее напотребители. — Предположим, вы создаете точку my-lib/common/shared входа с логикой, которой хотите поделиться. — Для потребителя A или B вам нужно будет import {FantasticLogic} from 'my-lib/common/shared'

4. @MiguelSsSRrR большое спасибо. Он работает так, как ожидалось