Angular 9 - у целевой точки входа отсутствуют зависимости - PullRequest
13 голосов
/ 13 февраля 2020

Я обновил библиотеку Angular до Angular 9. Однако, когда я пытаюсь использовать эту библиотеку в другом проекте Angular 9, я получаю ошибку, подобную этой:

Целевая точка входа У «mycomponents / entity-selector» отсутствуют зависимости:

 - mycomponents/shared-services
 - mycomponents/spinner
 - mycomponents/text-input

Пакет. json

{
  "$schema": "../../../node_modules/ng-packagr/package.schema.json",
  "name": "entity-selector",
  "version": "0.0.0",
  "ngPackage": {
    "lib": {
      "entryFile": "public_api.ts"
    },
    "dest": "../../../dist/mycomponents/entity-selector"
  }
}

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

В проекте библиотеки мне нужно определить зависимости в ng-packgr или где-то еще? Модуль для компонента выбора объекта импортирует соответствующий модуль для других компонентов. Эта проблема возникла с Angular 9.

Спасибо заранее.

Ответы [ 4 ]

2 голосов
/ 28 марта 2020
ERROR in The target entry-point "primeng" has missing dependencies: - chart.js

ERROR in The target entry-point "primeng" has missing dependencies: - quill

ERROR in The target entry-point "primeng" has missing dependencies: - @fullcalendar/core


npm install --save chart.js
npm install --save quill
npm install --save @fullcalendar/core
0 голосов
/ 06 мая 2020

У меня была такая же проблема. Это произошло после добавления символической ссылки, поэтому мне пришлось использовать

npm unlink *@your/package*

или просто глобально

npm unlink
0 голосов
/ 05 мая 2020

Первая проблема

Вы получаете эту ошибку, потому что ваш тестовый проект не имеет этих зависимостей, установленных в его каталоге node_modules/. Но я считаю, что поступать так, как предлагает @Renato, и заставлять пользователей вашей библиотеки вручную устанавливать эти зависимости - неправильный подход.

Чтобы автоматически установить отсутствующие зависимости, необходимо необходимо добавить сторонние зависимости вашей библиотеки в двух местах (внутри самой библиотеки):

  • package.json в root библиотеки. Я верю, что вы уже сделали это. Размещение всех пакетов здесь гарантирует, что при запуске проекта для разработки существует только один каталог node_modules/ в root.
  • projects/entity-selector/package.json - это файл, который используется в качестве основы для пакета. Файл json, который Angular генерирует при сборке библиотеки. Здесь необходимо добавить зависимости, чтобы потребители вашей библиотеки знали, какие пакеты им (ну, их диспетчеру пакетов) нужно загрузить. Я считаю, что это то, что вы в настоящее время упускаете.

Вторая проблема

После правильного добавления моих зависимостей в оба места я получил ошибки сборки, говорящие мне, что я должен использовать " peerDependencies ", а не" зависимости "для моей библиотеки.

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

  • projects/entity-selector/package.json
  • projects/entity-selector/ng-package.json.


В projects/entity-selector/package.json должно быть:

{
  "$schema": "../../../node_modules/ng-packagr/package.schema.json",
  "ngPackage": {
    "lib": {
      "entryFile": "public_api.ts"
    },
    "dest": "../../../dist/mycomponents/entity-selector",
    "whitelistedNonPeerDependencies": [
      "mycomponents/shared-services",
      "mycomponents/spinner",
      "mycomponents/text-input"
    ]
  }
}

В projects/entity-selector/ng-package.json должно быть:

{
  "$schema": "./node_modules/ng-packagr/package.schema.json",
  "lib": {
    "entryFile": "public_api.ts"
  },
  "whitelistedNonPeerDependencies": [
    "mycomponents/shared-services",
    "mycomponents/spinner",
    "mycomponents/text-input"
  ]
}

Наконец, не забудьте построить свой проект с ng build --prod, иначе вы получите ошибку о новом компиляторе Ivy при попытке опубликовать sh в NPM!

0 голосов
/ 21 апреля 2020

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

Например:

import {xxx} from 'src/xxx/xxx.module';

до:

import {xxx} from '../../xxx/xxx.module';
...