Первая проблема
Вы получаете эту ошибку, потому что ваш тестовый проект не имеет этих зависимостей, установленных в его каталоге 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!