npm установка частного пакета завершается неудачно, когда пакет имеет публичные зависимости - PullRequest
2 голосов
/ 29 апреля 2019

Допустим, у меня есть частный репозиторий npm, размещенный в JFrog artifactory : 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?

Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 29 апреля 2019

Указывая реестр с помощью: --registry https://my-domain.com/artifactory/api/npm/my-repo npm пытается разрешить все необходимые пакеты по имени и версии из вашего личного хранилища : domain.com/artifactory/api/npm/my-repo.

Чтобы разрешить эти публичные зависимости, от которых зависит ваша личная библиотека, у вас есть два варианта:

  1. Настройка виртуального реестра Npm. (Рекомендую этот подход)
  2. Упакуйте все необходимые зависимости в вашем личном репозитории.

A Виртуальный репозиторий , определенный в Artifactory , агрегирует пакеты как из локальных, так и из удаленных репозиториев. Это позволяет получать доступ как к локально размещенным пакетам npm, так и к удаленным проксируемым реестрам npm из одиночный URL , определенный для виртуального хранилища.

Установив виртуальный репозиторий, который ссылается как на ваше частное местоположение репозитория, так и на общедоступное местоположение npmjs по умолчанию , вы сможете загружать как свои частные библиотеки, так и любой публичный пакет npm, указав свой вышеупомянутый реестр. ,

Поскольку вы упомянули JFrog, взгляните на их слияние страница , которая проведет вас через процесс создания виртуального хранилища.

Однако, если вы решите использовать опцию 2, вам придется упаковать все необходимые зависимости в вашем личном репозитории. Тогда ваша личная библиотека сможет правильно извлекать зависимости, от которых она зависит. Я бы посоветовал не использовать этот подход, поскольку вы будете дублировать работу, уже предоставленную npmjs, и вам также придется постоянно обновлять свой личный репозиторий, чтобы включать новые библиотеки или более новые версии существующих библиотек.

Надеюсь, это поможет!

...