Подтвердить что ты не робот

Могу ли я запустить частный репозиторий npm без репликации публичного репозитория?

Я пишу несколько фрагментов кода (для внутреннего использования) с помощью node.js и хочу хранить модули (упакованные для npm) в репозитории пакетов для каждого дистрибутива на различные машины, которые они будут установлен на.

В идеале я бы хотел найти решение, подобное репозиториям Debian apt, в которых я могу запустить сервер частных репозиториев и настроить npm на использование списка репозиториев для установки (при установке "foo", если известно "foo" моим личным сервером установите его там, иначе установите его с общедоступного сервера).

Однако, похоже, что ключ конфигурации npm registry принимает только один URL.

Есть ли способ достичь того, чего я хочу?

Ближе всего я смог найти:

  • Зеркальное отображение публичного репозитория локально и добавление моих пакетов поверх него... но я не хочу, чтобы этот объем данных (2.5G и все еще загружаемый) был реплицирован на AWS.
  • Хостинг всех моих пакетов в репозиториях git и установка оттуда (что более сложно).
  • Хостинг статических пакетов по HTTP (насколько я могу судить, это помешало бы мне автоматически получать "последнюю версию". Я полагаю, что могу что-то делать с символическими ссылками, но это все же менее гибко, чем git, требует полные URL-адреса (которые необходимо обновлять) и не предоставляют поисковый репозиторий.
4b9b3361

Ответ 1

Я просто задал это для своей работы. Вот что я сделал:

  • Установить пустой реестр NPM. Я выполнил инструкции из этой версии npmjs.org, которая добавляет большую улучшенную документацию.

  • Настройка Kappa. Я использовал Kappa, отличный прокси-сервер npm от Paypal. (Я предполагаю, что у них очень похожий случай использования для большинства людей, которые хотят получить частный репозиторий, это именно то, что я хотел).

  • Настройка npm_lazy (необязательно): мне нужен хороший кэш часто используемых пакетов в случае, когда npmjs.org пошел, поэтому я добавил npm_lazy перед всем, как слой кеширования.

Целая вещь заняла два дня (иш), чтобы встать и бежать. В качестве побочного примечания, если вы беспокоитесь о том, что люди случайно нажали на публичный реестр, я рекомендую добавить это к вашему package.json:

"publishConfig": { "registry": "http://my-registry.example.com" },

Это действительно немного паранойя; как только вы настроите свой npm на ваш экземпляр Kappa/npm_lazy, Kappa обрабатывает публикацию в вашем частном репозитории для вас.

Примечание. Kappa будет публиковать только каждый первый репозиторий в конфигурации. Если вам нужно публиковать как ваш частный реестр, так и общественность, вам нужно будет разработать собственное решение.

Ответ 2

В вашем пакете .json вы можете использовать любой url, который указывает на действительный упакованный модуль npm. Я использую s3 с именем ведра, которое трудно догадаться.

npm pack
s3cmd put *.tgz s3://path-to-your bucket

S3 - просто пример, вы можете использовать любое среднее значение, которое может помещать файл на веб-сервер, его можно даже защитить с помощью базового auth.

Ответ 3

Я считаю, что проект Paypal Kappa подойдет вам.

Вот статья, описывающая проект Paypal Kraken и то, как Kappa подходит.

Я понимаю, что он не был доступен во время вопроса Квентина, но, возможно, это будет полезно для других, которые приходят сюда.

Ответ 4

npm-registry-client Проблема GitHub № 42 перечисляет несколько способов создания вашего собственного зеркала репозитория. а именно:

В целом мне кажется, что вы можете получить наилучшие ответы, просмотрев проблемы в репозиториях, принадлежащих https://github.com/npm, или задав свой вопрос там

Ответ 5

Основываясь только на прослушивании недавнего эпизода NodeUp (# 37?), я думаю, вы можете взглянуть на irisnpm. Из того, что я помню, это сервис, который дает вам объединенный набор открытых модулей и ваших собственных частных модулей.

Ответ 7

Вы можете реплицировать нужные вам модули, а затем написать прокси-сервер, который ищет модуль в вашей репликации. Если модуль не существует, он может передать запрос в NPM и вернуть результат оттуда.