Вот моя проблема. У нас есть частный реестр NPM, который работает только в VPN. Я хотел бы иметь резервный реестр https://registry.npmjs.org, чтобы он работал без проблем, когда у меня нет VPN.
PS В настоящее время я использую npmrc, который хорошо справляется с переключением между файлами .npmrc в качестве временного решения.
Ответы:
В вашем файле может быть несколько реестров для пакетов с ограниченной областью действия
.npmrc
. Например:@polymer:registry=<url register A> registry=http://localhost:4873/
Пакеты, входящие в
@polymer
область действия, будут получены с https://registry.npmjs.org , а остальные будут получены от вашего местного NPM.источник
В версии 4.4.1, если вы можете изменить имя пакета, используйте:
npm config set @myco:registry http://reg.example.com
Где
@myco
ваша посылка?Установить пакет можно следующим образом:
Для получения дополнительной информации: https://docs.npmjs.com/misc/scope
источник
Invalid package name "@npmjs/": name can only contain URL-friendly characters
когда бегуnpm i
Для тех, кто также ищет решение для аутентификации, я бы добавил решение с ограниченными пакетами, в котором вы можете иметь несколько строк в вашем
.npmrc
файле://internal-npm.example.com:8080/:_authToken=xxxxxxxxxxxxxxx //registry.npmjs.org/:_authToken=yyyyyyyyyy
Каждая строка представляет отдельный реестр NPM
источник
npm login --registry=npm.example.com
. Он будет хранить учетные данные для входа (authTokens) в файле .npmrc в вашей папке пользователя, поэтому вам не нужно иметь их в исходном коде ( docs.npmjs.com/cli/adduser )registry.npmjs.org
, это сработало для меняНе лучший способ, но если вы используете Mac или Linux даже в Windows, вы можете установить псевдонимы для разных реестров.
##############NPM ALIASES###################### alias npm-default='npm config set registry https://registry.npmjs.org' alias npm-sinopia='npm config set registry http://localhost:4873/'
источник
alias npm-sin=npm --registry https://localhost:4873/
Поскольку прошло уже несколько лет, и это не представляется возможным (используя только npm), решение этой проблемы - использовать Nexus Repository Manager. (от Sonatype). Nexus поддерживает несколько репозиториев, позволяет вам их заказывать, а также прокси / кеши для повышения скорости.
Существуют бесплатная версия, а также про / платная версия. Функция, поддерживающая это, описана по адресу: https://help.sonatype.com/repomanager3/node-packaged-modules-and-npm-registries.
Соответствующая информация дублируется ниже, поэтому, если / когда вышеуказанный URL / ссылка перестанет работать, информация все еще будет здесь.
Он позволяет создавать частные реестры npm
А также
Итак, краткий список вещей, которые вы должны сделать, чтобы это работало:
Установить Nexus
Создайте локальное / частное репо (или укажите на свое частное репо на другом сервере)
Создайте ГРУППУ, в которой перечислены ваше частное репо и публичное репо.
Настройте файл $ HOME / .npmrc так, чтобы он указывал на только что созданную «ГРУППУ».
Опубликуйте свои частные пакеты npm в локальном репо.
Теперь пользователи могут запускать однократную настройку.
npm config set registry https://nexus/content/groups/GROUP
npm install
.npm install my-private-package npm install lodash any-other-public-package
И ваши общедоступные и частные пакеты могут быть установлены с помощью простого
npm install
команды. Nexus находит пакет, просматривая каждое репо, настроенное в группе, и возвращает результаты. Таким образом, npm по-прежнему считает, что существует только один реестр, но за кулисами используется несколько репозиториев.ВАЖНОЕ ПРИМЕЧАНИЕ. Когда вы публикуете свои компоненты, вам необходимо указать
npm publish --registry https://nexus/content/repositories/private-repo my-private-package
команду, чтобы ваш пакет был опубликован в правильном репозитории.источник
npm-private
вместоnpm-group
), вы можете переопределитьregistry
-key вpackage.json
вашем проекте (см.https://blog.sonatype.com/using-nexus-3-as-your-repository-part-2-npm-packages
Подробности). Используя,npm config set registry <url>
вы можете установить его, напримерnpm-group
, который содержитnpm-registry
(репозиторий пересылки) иnpm-private
(ваш собственный репозиторий). Я использовал это решение, потому что получить артефакты из локального GitLab CE было слишком сложно.Вы можете использовать синтаксис нескольких репозиториев для
registry
записи в вашем.npmrc
файле:registry=http://serverA.url/repository-uri/ //serverB.url/repository-uri/ //serverC.url/repository-uri/:_authToken=00000000-0000-0000-0000-0000000000000 //registry.npmjs.org/
Это заставит ваш npm искать пакеты на разных серверах.
источник
serverA
,serverB
иserverC
пример хранилища все из нашей внутренней сети, не будет работать для вас. Я не знаю, подходит ли он вам, но если вы думаете, что это так, вы можете попробовать развернуть Nexus Repository Manager для внутренних репозиториев.Некоторые шаги вы можете попробовать. (это то, как мы это делаем на моем рабочем месте)
Надеюсь, это поможет.
источник
Для этого я использую инструменты Strongloop cli; см. https://strongloop.com/strongblog/switch-between-configure-public-and-private-npm-registry/ для получения дополнительной информации.
Переключение между репозиториями так же просто, как:
slc registry use <name>
источник
Я сталкиваюсь с той же проблемой, когда моя компания настраивает свой собственный реестр, поэтому я сильно переделал прокси-реестр в прокси-мульти-реестры, чтобы решить эту проблему. Надеюсь, это также поможет вам.
источник
По состоянию на 13 апреля 2020 года такая функциональность отсутствует, если вы не можете использовать другие области действия, но вы можете использовать сценарий postinstall в качестве временного решения. Она всегда выполняется, а после каждой НОЙ установки :
Скажем, у вас есть ваш .npmrc, настроенный для установки @ foo-org / foo-pack-private из вашего частного репозитория github, но общедоступный пакет @ foo-org / foo-pack-public находится в npm (в той же области: foo- org ).
Ваша постустановка может выглядеть так:
"scripts": { ... "postinstall": "mv .npmrc .npmrcc && npm i @foo-org/foo-pack --dry-run && mv .npmrcc .npmrc". }
Не забудьте удалить @ foo-pack / foo-org из массива зависимостей, чтобы убедиться, что npm install не пытается получить его из github, и добавить флаг --dry-run, который гарантирует, что package.json и package- lock.json остается без изменений после установки npm .
источник
Мой подход заключался в создании небольшого варианта командной строки, который добавляет переключатель реестра.
Я создал эти файлы в папке nodejs, где находится исполняемый файл npm:
npm-.cmd
:@ECHO OFF npm --registry https://registry.npmjs.org %*
npm-
:#!/bin/sh "npm" --registry https://registry.npmjs.org "$@"
Теперь, если я хочу выполнить операцию с обычным реестром npm (пока я не подключен к VPN), я просто набираю
npm-
там, где обычноnpm
.Чтобы проверить эту команду и просмотреть реестр пакета, используйте этот пример:
PS. Я работаю в Windows и тестировал это в Bash, CMD и Powershell. Я также
источник