Можете ли вы разместить частный репозиторий для вашей организации для использования с npm?


220

Npm звучит как отличная платформа для использования внутри организации, любопытно, возможно ли частное репо, как с Nexus / Maven. В Google ничего не появляется :(


1
Ниже приведена довольно аккуратная документация, как это сделать: clock.co.uk/tech-blogs/how-to-create-a-private-npmjs-repository Это то же самое, что pvorb объяснил в своем ответе.
ramesh.mimit

2
Обратите внимание, что сообщение clock.co.uk является полной копией реестра npm. Для локального кэша ваших необходимых зависимостей лучшее решение, которое я нашел, это npm_lazy . Документ на моей вилке может быть немного легче следовать.
Джейк Бергер

1
Я знаю, что немного опоздал к обсуждению, но я просто хотел бы добавить, что мы недавно добавили поддержку частного реестра npm в наш (бесплатный) продукт ProGet
Карл Харнаджи

2
Как отмечено ниже, Nexus теперь поддерживает размещенные и прокси-серверы npm.
Зак Томпсон

8
За прошедшие годы стало доступно много вариантов. Любой, кто вернется к этому, должен прочитать все ответы, а не только тот, который я принял в 2011 году.
Адам

Ответы:


101

Я не думаю, что есть простой способ сделать это.

Взгляд на документацию НПМ говорит нам, что это возможно:

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

Да!

Самый простой способ - реплицировать базу данных кушетки и использовать один и тот же (или похожий) проектный документ для реализации API.

Если вы установите непрерывную репликацию с официальной CouchDB, а затем установите свою внутреннюю CouchDB в качестве конфигурации реестра, то вы сможете читать любые опубликованные пакеты, в дополнение к вашим личным, и по умолчанию будут публиковать только для внутреннего использования. Если вы затем хотите опубликовать пакет для просмотра всем миром, вы можете просто переопределить --registryконфигурацию для этой команды.

В блоге часов также есть отличное руководство по созданию частного репозитория npm .

РЕДАКТИРОВАТЬ (2017-02-26):

Не совсем новый, но теперь есть платные планы для размещения частных пакетов на NPM.

За прошедшие годы NPM стал важным фактором для многих компаний, не являющихся Node.js, благодаря огромной экосистеме внешнего интерфейса, созданной на основе NPM. Если ваша компания уже использует Sonatype Nexus для внутреннего размещения Java-проектов, вы также можете использовать его для размещения внутренних пакетов NPM.

Другие варианты включают JFrog Artifactory и Inedo ProGet , но я не использовал их.


201

https://github.com/isaacs/npmjs.org/ : В версии npm v1.0.26 вы можете указать URL-адреса частных репозиториев git в качестве зависимости в файлах package.json. Я не использовал это, но хотел бы обратной связи. Вот что вам нужно сделать:

{
    "name": "my-app",
    "dependencies": {
        "private-repo": "git+ssh://git@yourgitserver.com:my-app.git#v0.0.1",
    }
}

Следующий пост рассказывает об этом: Debuggable: Private npm modules


3
Это отличная возможность, но я принял pvorb, потому что я спрашивал о размещении всего репозитория NPM, а именно внутреннего репозитория Maven
adam

2
Примечание. В настоящее время NPM не поддерживает указание диапазона версий с помощью этих URL-адресов git (например, 1.2.x или ^ 1.2.3). github.com/npm/npm/issues/3328
Глина

@Clay, вы можете указать тег (v0.0.1), правда?
МЧ

Да, вы можете сделать точный тег.
Глина

Есть ли способ использовать ключи развертывания GitHub для аутентификации в частных репозиториях?
Sunknudsen

91

Для этого существует простой в использовании пакет npm. https://www.npmjs.org/package/sinopia

Короче говоря, Sinopia - это частный / кэширующий сервер репозитория npm, который вы можете настроить с нулевой конфигурацией.

Синопия может быть использована для:

  • публиковать свои личные пакеты, не раскрывая их публике
  • кешировать только общедоступные пакеты, которые используются (нет необходимости дублировать весь публичный реестр)
  • переопределить общедоступные пакеты измененной версией, созданной для внутреннего использования.

13
Синопия, похоже, больше не поддерживается. Последний коммит был более 8 месяцев назад на сегодня (7 марта 2016 года). Он выглядит великолепно и хорошо работает, но будьте осторожны с ремонтопригодностью.
Рэй Бойзен

45
Проверьте Вердаччо . Это активно поддерживаемая
ветвь

1
Verdaccio поддерживает конфигурацию "только для частного использования", где он не будет запрашивать какой-либо публичный реестр?
MarkusSchaber

1
@MarkusSchaber Вы можете отключить прокси для других реестров. Он работает в автономном режиме, даже если прокси-сервер пытается получить доступ к сети.
Хуан Пикадо,

1
Я действительно считаю, что Вердаччо сегодня заслуживает своего собственного ответа stackoverflow.com/a/50815174/336753 Сначала я даже не заметил этот комментарий.
kub1x

40

Вердаччо - это то, что я искал, и оно заслуживает своего собственного ответа;) Это активно поддерживаемый форк Синопии (ответ здесь высоко одобрен ). Это реестр npm как пакет npm , и его можно найти

здесь: https://github.com/verdaccio/verdaccio ,
здесь: https://www.verdaccio.org ,
здесь: pnpm i -g verdaccioили
здесь:docker run -it --rm --detach --name verdaccio -p 4873:4873 verdaccio/verdaccio


2
этот! спасибо -> запуск докера -it --rm --detach --name verdaccio -p 4873: 4873 verdaccio / verdaccio
mwm

1
@ mwm Спасибо. Добавлена ​​версия докера в список.
kub1x

28

14 апреля (2015) были представлены частные модули npm .

Когда вы платите за частные модули, вы можете:

  • Размещайте столько личных пакетов, сколько хотите
  • Предоставить доступ на чтение или чтение-запись для этих пакетов любому другому платному пользователю
  • Установите и используйте любые пакеты, которые другие платные пользователи предоставили вам для чтения
  • Сотрудничайте над любыми пакетами, которые другие платные пользователи дали вам право на запись

Конечно, это не бесплатно - в настоящее время 7 $ в месяц на пользователя.

И это все еще довольно новый сервис. Например, поддержка учетных записей организации отсутствует (по состоянию на июнь 2015 года):

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

Так что, хотя и не идеально, это официальное решение npm для поддержки приватных пакетов, и это само по себе заслуживает упоминания.

ОБНОВИТЬ

Теперь доступны частные пакеты Npm с планами для отдельных пользователей и организаций :

  • Неограниченное количество публичных и частных пакетов
  • $ 7 / месяц / разработчик
  • Включает одно имя области, основанное на названии организации
  • Публикация и контроль доступа к @ org-name / foo

(отказ от ответственности: даже не имеет никакого отношения к npm, Inc. )


20

Менеджеры репозитория с поддержкой частных реестров npm:


4
Только платные версии поддерживают репозитории npm; бесплатных версий нет.
Благо

12
Бесплатная версия Sonatype Nexus 3.0 действительно поддерживает репозитории npm (наряду с репозиториями Bower и Docker).
n8n8baby

10

Я думаю, что эта тема нуждается в обновлении. Если вы посмотрите на любой из имеющихся реестров npm, они очень тяжелые и им нужен couchdb. Gemfurry и другим нужно, чтобы вы отключились от публичных репозиториев. Некоторые из npm, такие как shadow-npm, не имеют недавних коммитов .

Затем мы нашли Реджи . Он имеет хорошую активность коммитов, чрезвычайно прост в установке и использовании и имеет довольно хорошую поддержку сообщества . Это очень легкий и вам не нужно иметь дело с couchdb и т. Д.


9

Извините, если я плохо понимаю ваш вопрос, но вот мой ответ:

Вы можете создать частный модуль npm и использовать обычные команды npm для его установки. Большинство пользователей node.js используют git в качестве своего репозитория, но вы можете использовать любой репозиторий, который вам подходит.

  1. В вашем проекте вам понадобится скелет пакета NPM. Большинство узловых модулей имеют git-репозитории, где вы можете посмотреть, как они интегрируются с NPM (файл package.json, я полагаю, является частью этого, и на сайте NPM показано, как сделать пакет npm)
  2. Используйте что-то похожее на Make, чтобы сделать ваш пакет доступным через Интернет или вашу сеть, чтобы подготовить его для установки через npm.
  3. Как только ваша посылка сделана, используйте

    npm install * tarball_url *


5
Вы не получили его вопрос, но ответ очень полезен для меня! :)
Эдуардо Коста

7

Это самый простой способ, который я знаю - разместить его в облаке с Gemfury частного реестра npm.

Это бесплатно, и вы можете войти под своей учетной записью Github. Это должно сэкономить вам много времени по сравнению с настройкой собственной базы данных.


это не бесплатно, хотя.
I.Tyger

6

мы используем Sonatype Nexus, версия - Nexus Repository ManagerOSS 3.6.1-02. И я уверен, что он поддерживает частный репозиторий NPM и кэширует пакет.

введите описание изображения здесь


5

Немного опоздал на вечеринку, но NodeJS (по состоянию на ~ 14 ноября, я думаю) поддерживает корпоративные репозитории NPM - вы можете узнать больше на их официальном сайте .

На первый взгляд кажется, что npmE позволяет выполнять сквозное зеркалирование репозитория NPM, то есть он будет искать пакеты в реальном репозитории NPM, если не сможет найти ни одного в вашем внутреннем. Кажется очень полезным!

npm Enterprise - это локальное решение для безопасного совместного использования и распространения модулей JavaScript в вашей организации от команды, которая поддерживает npm и общедоступный реестр npm. Он предназначен для команд, которым необходимо:

простое внутреннее совместное использование частных модулей; лучший контроль над процессом разработки и развертывания; более строгая безопасность при развертывании модулей с открытым исходным кодом; соблюдение требований законодательства для локального размещения кода; npmE - это частная npm.

npmE - это реестр npm, который работает с тем же стандартным клиентом npm, который вы уже используете, но предоставляет функции, необходимые более крупным организациям, которые теперь с энтузиазмом принимают узел. Он создан npm, Inc., спонсором проекта с открытым исходным кодом npm и хостом общедоступного реестра npm.

К сожалению, это не бесплатно. Вы можете получить пробную версию, но это коммерческое программное обеспечение. Это не так уж и много для сольных разработчиков, но если вы сольный разработчик, у вас есть GitHub :-)


3

Этот пост рассказывает о том, как настроить частный реестр

  • убедитесь, что couchdb установлен в вашей системе
  • Для репликации npmjs.org используйте следующую команду

    curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://isaacs.iriscouch.com/registry/", "target":"registry", "continuous":true, "create_target":true}' -H "Content-Type: application/json"

Обратите внимание, что "continuous":trueв этой команде используется API _changes от CouchDB, и он будет извлекать любые новые изменения при уведомлении этого API.

Если вы когда-нибудь захотите остановить эти репликации, вы можете легко добавить "cancel":true. Тогда сценарий будет

    curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://isaacs.iriscouch.com/registry/", "target":"registry", "continuous":true, "create_target":true, "cancel":true}' -H "Content-Type: application/json"

Затем перейдите к npmjs.org ридми установить НПМ (убедитесь , nodejsи gitустановлен). Удар это все шаги

git clone git://github.com/isaacs/npmjs.org.git
cd npmjs.org
sudo npm install -g couchapp 
npm install couchapp 
npm install semver 
couchapp push registry/app.js http://localhost:5984/registry 
couchapp push www/app.js http://localhost:5984/registry 

1
URL isaacs.iriscouch.com/registry , к сожалению, сейчас мертв. Я попытался изменить его на skimdb.npmjs.com/registry , который, кажется, сначала работает, но он реплицирует только индекс реестра, а не
тарболы

В couchapp README заявляет , что couchapp теперь своего рода устаревшим, но он также говорит , что текущий способ отразить весь реестр является использование НПМ-реестра с полным содержанием жира
fuzzyTew

В итоге я использовал для этого статический реестр , который в отличие от решений couchdb вообще не требует настройки.
fuzzyTew


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.