Служба не находится под ‘rootDir’ в угловой вторичной точке входа

#angular #angular-library #ng-packagr

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

Вопрос:

При компиляции библиотеки Angular я получаю эту ошибку, касающуюся rootDir моих вложенных библиотек

library/services/src/public-api.ts:31:15 - error TS6059: File 'C:/libname/library/services/src/orders/orders.service.ts' is not under 'rootDir' 'C:/libnamelibraryclassessrc'. 'rootDir' is expected to contain all source files.

Я пришел к пониманию, что не рекомендуется использовать относительный импорт внутри библиотеки Angular между отдельными вторичными записями. Итак, я разделил свой код на вторичные записи пути настройки в TSConfig

Структура кода

 library
  services
    src
      public-api.ts
    package.json
  models
    src
      public-api.ts
    package.json
  src
    public-api.ts
  package.json
 

TSConfig

 {
  "rootDir": "./library/",
  "paths": {
    "@core/services": [ "library/services/src/public-api.ts" ]
  }
}
 

angular.json

 {
  "projects": {
    "lib": {
      "root": "library",
      "sourceRoot": "library"
    }
  }
}
 

Итак, вопрос в том, как исправить импорт между отдельными вторичными точками входа или файловой структурой и обеспечить правильную компиляцию проекта? Я понимаю, что компиляция вторичных точек входа является отдельной и «рассматривается как отдельный проект», отсюда и ошибка. Должен ли я поэтому добавлять отдельные вторичные точки входа в качестве одноранговых зависимостей?

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

Ответ №1:

вы можете использовать относительный импорт, который приводит к файлу за пределами корневого каталога вторичной точки входа, например. import Users from "../../models/src/public_api.ts"

Вместо этого импортируйте модуль, используя имя библиотеки, например. import Users from "library/models"

Этот выпуск из репозитория ng-packagr содержит хорошие примеры кода.

Ответ №2:

также может произойти, когда помощник по импорту IDE генерирует нерелятивный путь (например, «src / услуги / ..» вместо «.. / .. / services»)

на самом деле возникла проблема в части первичной точки входа библиотеки, когда компонент импортировал службу, используя этот тип автоматически сгенерированного пути (однако при компиляции вторичной точки входа возникает ошибка, поди разберись …)