npm установка частного пакета завершается неудачно, когда пакет имеет публичные зависимости
Допустим, у меня есть частный репозиторий npm, размещенный в артефакте JFrog: https://my-domain.com/artifactory/api/npm/my-repo
, В этом репозитории я опубликовал один пакет npm: my-package
, который строит нормально. my-package
имеет зависимость (или больше) от общедоступных пакетов npm, например lodash
,
Тем не менее, когда я создаю новый проект и пытаюсь установить my-package
Я получаю следующую ошибку:
$ npm install my-package --registry https://my-domain.com/artifactory/api/npm/my-repo
npm ERR! code E404
npm ERR! 404 Not Found - GET https://my-domain.com/artifactory/api/npm/my-repo/lodash - not_found
npm ERR! 404
npm ERR! 404 'lodash^4.17.11' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404 It was specified as a dependency of 'my-package'
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\<username>\AppData\Roaming\npm-cache\_logs\2019-04-29T12_47_51_647Z-debug.log
Кажется, будто npm
ищет в моем личном репозитории все зависимости my-package
требует, когда я указываю --registry
вариант при запуске npm install
, Тем не мение, my-package
зависит от публичных зависимостей, которых нет в моем личном реестре.
Мой вопрос
Как установить пакет npm из частного реестра, который имеет публичные зависимости? Возможно, это тоже проблема JFrog?
Любая помощь будет принята с благодарностью!
2 ответа
Указав реестр с помощью: --registry https://my-domain.com/artifactory/api/npm/my-repo
npm пытается разрешить все необходимые пакеты по имени и версии из вашего личного хранилища: domain.com/artifactory/api/npm/my-repo
,
Чтобы разрешить эти публичные зависимости, от которых зависит ваша личная библиотека, у вас есть два варианта:
- Настройте виртуальный реестр Npm. (Рекомендую этот подход)
- Упакуйте все необходимые зависимости в вашем личном репозитории.
Виртуальный репозиторий, определенный в Artifactory, агрегирует пакеты из локальных и удаленных репозиториев. Это позволяет получать доступ как к локально размещенным пакетам npm, так и к удаленным прокси-серверам npm из одного URL-адреса, определенного для виртуального репозитория.
Установив виртуальный репозиторий, который ссылается как на ваше личное хранилище, так и на общедоступное местоположение npmjs по умолчанию, вы сможете загружать свои частные библиотеки, а также любой публичный пакет npm, указав свой вышеупомянутый реестр.
Так как вы упомянули JFrog
взгляните на их страницу слияния, которая проведет вас через процесс создания виртуального хранилища.
Однако, если вы решите использовать вариант 2, вам придется упаковать все необходимые зависимости в вашем личном репозитории. Тогда ваша личная библиотека сможет правильно извлекать зависимости, от которых она зависит. Я бы посоветовал против этого подхода, так как вы будете дублировать работу, уже предоставленную npmjs
и вам также придется постоянно обновлять свой личный репозиторий, чтобы включать новые библиотеки или более новые версии существующих библиотек.
Надеюсь, это поможет!
Мое решение...
связано с обновлением моего.npmrc
файл:
Я изменился
к@my-private-scope:registry=https://npm.pkg.my-domain.com
Вот почему
В нем я указал, чтоregistry=https://npm.pkg.my-domain.com
(за которым следует мой токен авторизации), чтобы я мог импортировать частный пакет из области @my-private-scope. Однако, так как я ушел в@my-private-scope:
часть, я менял URL для всех приличий, а не только для тех, которые являются частью моей частной организации. Я внес изменение, чтобы указать URL-адрес моего домена только для зависимостей в этой области.