czy możesz hostować prywatne repozytorium dla swojej organizacji do korzystania z npm?

219

Npm brzmi jak świetna platforma do wykorzystania w organizacji, ciekawa, czy możliwe jest prywatne repo, jak w Nexus / Maven. Nic nie pojawia się w Google :(

Adam
źródło
1
Poniżej znajduje się dość schludna dokumentacja, jak to zrobić: clock.co.uk/tech-blogs/how-to-create-a-private-npmjs-repository To samo, co pvorb wyjaśniono w jego odpowiedzi.
ramesh.mimit
2
Zauważ, że post clock.co.uk jest kompletnym duplikatem rejestru npm. W przypadku lokalnej pamięci podręcznej wymaganych zależności najlepszym rozwiązaniem, jakie znalazłem, jest npm_lazy . Dokument na moim widelcu może być nieco łatwiejszy do naśladowania.
Jake Berger,
1
Wiem, że jestem trochę spóźniony do dyskusji, ale chciałbym dodać, że niedawno dodaliśmy obsługę prywatnego rejestru npm do naszego (darmowego) produktu ProGet
Karl Harnagy
2
Jak wspomniano poniżej, Nexus obsługuje teraz repozytorium npm hostowanych i proxy.
Zac Thompson,
8
Z biegiem lat pojawiło się wiele dostępnych opcji. Każdy, kto do tego wróci, powinien przeczytać wszystkie odpowiedzi, a nie tylko te, które zaakceptowałem w 2011 roku.
Adam

Odpowiedzi:

100

Nie sądzę, że istnieje prosty sposób, aby to zrobić.

Spojrzenie na dokumentacji npm mówi nam, że jest to możliwe:

Czy mogę uruchomić własny rejestr prywatny?

Tak!

Najprostszym sposobem jest replikacja bazy danych couch i użycie tego samego (lub podobnego) dokumentu projektowego do implementacji interfejsów API.

Jeśli skonfigurujesz ciągłą replikację z oficjalnej CouchDB, a następnie ustawisz wewnętrzną CouchDB jako konfigurację rejestru, będziesz mógł czytać dowolne opublikowane pakiety, oprócz prywatnych, i domyślnie będą publikować tylko wewnętrznie. Jeśli chcesz opublikować pakiet dla całego świata, możesz po prostu przesłonić --registrykonfigurację tego polecenia.

Istnieje również doskonały samouczek na temat tworzenia prywatnego repozytorium npm na blogu z zegarem.

EDYCJA (26.02.2017):

Nie bardzo nowe, ale teraz są płatne plany hostowania prywatnych pakietów na NPM.

Z biegiem lat NPM stał się również czynnikiem dla wielu firm spoza Node.js, dzięki ogromnemu ekosystemowi frontendowemu, który jest zbudowany na NPM. Jeśli Twoja firma już działa Sonatype Nexus do wewnętrznego hostingu projektów Java, możesz go również użyć do hostowania wewnętrznych pakietów NPM.

Inne opcje to JFrog Artifactory i Inedo ProGet , ale nie korzystałem z nich.

pvorb
źródło
201

https://github.com/isaacs/npmjs.org/ : W npm wersji v1.0.26 możesz określić adresy URL prywatnych repozytoriów git jako zależność w plikach package.json. Nie korzystałem z niego, ale chciałbym poznać opinie. Oto, co musisz zrobić:

{
    "name": "my-app",
    "dependencies": {
        "private-repo": "git+ssh://[email protected]:my-app.git#v0.0.1",
    }
}

Następujący post mówi o tym: Debuggable: Prywatne moduły npm

ebdr
źródło
3
To świetna funkcja, ale zaakceptowałem pvorb, ponieważ pytałem o hosting całego repozytorium NPM, a la wewnętrznego repozytorium Maven
adam
2
Uwaga: NPM obecnie nie obsługuje określania zakresu wersji za pomocą tych adresów URL git (np. 1.2.x lub ^ 1.2.3). github.com/npm/npm/issues/3328
Clay
@Clay, możesz jednak podać tag (v0.0.1), prawda?
mcha
Tak, możesz zrobić dokładny tag.
Clay
Czy istnieje sposób użycia kluczy wdrażania GitHub do uwierzytelnienia w prywatnych repozytoriach?
sunknudsen
91

Do tego celu jest łatwy w użyciu pakiet npm. https://www.npmjs.org/package/sinopia

W skrócie, Sinopia jest prywatnym / buforującym serwerem repozytorium npm, który można skonfigurować przy zerowej konfiguracji.

Sinopia może być używana do:

  • publikuj własne prywatne pakiety bez ujawniania ich publicznie
  • buforuj tylko używane pakiety publiczne (nie ma potrzeby replikacji całej rejestru publicznego)
  • zastępuj pakiety publiczne zmodyfikowaną wersją, które zostały wyprodukowane wewnętrznie.
TiQP
źródło
13
Sinopia wydaje się już nie utrzymywana. Ostatnie zatwierdzenie miało miejsce ponad 8 miesięcy temu na dzień dzisiejszy (7 marca 2016 r.). Wygląda świetnie i działa dobrze, ale należy zachować ostrożność w zakresie konserwacji.
Ray Booysen
45
Sprawdź verdaccio . To aktywnie utrzymany rozwidlenie: github.com/verdaccio/verdaccio
Rotareti
1
czy verdaccio obsługuje konfigurację „tylko do użytku prywatnego”, w której nie będzie sprawdzał żadnego rejestru publicznego?
MarkusSchaber
1
@MarkusSchaber Możesz wyłączyć proxy do innych rejestrów. Działa w trybie offline, nawet jeśli serwer proxy próbuje uzyskać dostęp do sieci.
Juan Picado,
1
Naprawdę uważam, że Verdaccio zasługuje dziś na swoją własną odpowiedź stackoverflow.com/a/50815174/336753 Nie zauważyłem tu nawet tego komentarza.
kub1x
40

Verdaccio jest tym, czego szukałem i zasługuje na swoją własną odpowiedź;) Jest to aktywnie utrzymany rozwidlenie Sinopii ( tutaj wysoko oceniana odpowiedź ). Jest to rejestr npm jako pakiet npm i można go znaleźć

tutaj: https://github.com/verdaccio/verdaccio ,
tutaj: https://www.verdaccio.org ,
tutaj: pnpm i -g verdacciolub
tutaj:docker run -it --rm --detach --name verdaccio -p 4873:4873 verdaccio/verdaccio

kub1x
źródło
2
to! dziękuję -> docker run -it --rm --detach - name verdaccio -p 4873: 4873 verdaccio / verdaccio
mwm
1
@mwm Dziękuję. Dodano wersję dokera do listy.
kub1x
28

14 kwietnia (2015) wprowadzono moduły prywatne npm .

Płacąc za moduły prywatne, możesz:

  • Hostuj tyle prywatnych pakietów, ile chcesz
  • Przyznaj dostęp do odczytu lub odczytu i zapisu dla tych pakietów innym płatnym użytkownikom
  • Zainstaluj i korzystaj z pakietów, do których dostęp otrzymali inni płatni użytkownicy
  • Współpracuj nad wszelkimi pakietami, do których inni płatni użytkownicy dali ci dostęp do zapisu

Oczywiście nie jest to bezpłatne - obecnie 7 $ miesięcznie na użytkownika.

I wciąż jest to całkiem nowa usługa. Na przykład brakuje obsługi kont organizacji (stan na czerwiec 2015 r.):

Obecnie prywatne pakiety są dostępne tylko dla indywidualnych użytkowników, ale wkrótce będzie dostępna obsługa kont organizacji. Tymczasem możesz utworzyć użytkownika dla swojej organizacji, a my możemy go uaktualnić do organizacji, gdy będzie dostępna pomoc.

Chociaż nie jest to idealne, jest to oficjalne rozwiązanie npm do utrzymywania prywatnych pakietów, i to samo w sobie sprawia, że ​​warto o tym wspomnieć.

AKTUALIZACJA

Prywatne pakiety Npm są teraz dostępne, z planami zarówno dla indywidualnych użytkowników, jak i organizacji :

  • Nieograniczona liczba pakietów publicznych i prywatnych
  • 7 USD / miesiąc / programista
  • Obejmuje jedną nazwę zakresu na podstawie nazwy organizacji
  • Publikuj i kontroluj dostęp do @ org-name / foo

(wyłączenie odpowiedzialności: nawet w żaden sposób nie powiązane zdalnie z npm, Inc. )

bardzusny
źródło
20

Menedżerowie repozytoriów z obsługą prywatnych rejestrów npm:

Abel Pastur
źródło
4
Tylko wersje płatne obsługują repozytoria npm; darmowe wersje nie.
Boon,
12
Darmowa wersja Sonatype Nexus 3.0 w rzeczywistości obsługuje repozytorium npm (wraz z repozytoriami bower i docker).
n8n8baby
10

Myślę, że ten wątek wymaga aktualizacji. Jeśli spojrzysz na którykolwiek z dostępnych rejestrów npm, są one bardzo ciężkie i potrzebują couchdb. Gemfurry i inni potrzebują odejścia od publicznych repozytoriów. Niektóre z npm jak np. Shadow-npm nie mają ostatnich zatwierdzeń .

Potem znaleźliśmy Reggie . Ma dobrą aktywność zatwierdzania, niezwykle łatwą instalację i obsługę oraz całkiem dobre wsparcie społeczności . Jest niezwykle lekki i nie musisz zajmować się couchdb itp.

Pradeep Mahdevu
źródło
9

Wybacz mi, jeśli nie rozumiem twojego pytania, ale oto moja odpowiedź:

Możesz utworzyć prywatny moduł npm i użyć normalnych poleceń npm, aby go zainstalować. Większość użytkowników node.js używa git jako swojego repozytorium, ale możesz użyć dowolnego repozytorium, które Ci odpowiada.

  1. W swoim projekcie potrzebujesz szkieletu pakietu NPM. Większość modułów węzłów ma repozytoria git, w których można zobaczyć, jak integrują się z NPM (plik package.json, uważam, że jest częścią tego, a strona internetowa NPM pokazuje, jak zrobić pakiet npm)
  2. Użyj czegoś podobnego do Make i stwórz swój pakiet, aby był dostępny w Internecie lub w sieci, aby przygotować go do pobrania npm.
  3. Po utworzeniu paczki użyj

    npm install * tarball_url *

EhevuTov
źródło
5
Nie dostałeś jego pytania, ale odpowiedź jest dla mnie bardzo przydatna! :)
Eduardo Costa
7

Jest to najprostszy sposób, jaki znam - hostuj go w chmurze za pomocą prywatnego rejestru npm Gemfury .

Jest bezpłatny i możesz zalogować się na swoje konto Github. Powinno to zaoszczędzić dużo czasu w porównaniu z konfiguracją własnej bazy danych.

Alex Urdea
źródło
nie jest za darmo.
I.Tyger
6

korzystamy z Sonatype Nexus, wersja to Nexus Repository ManagerOSS 3.6.1-02. I jestem pewien, że obsługuje prywatne repozytorium NPM i buforował pakiet.

wprowadź opis zdjęcia tutaj

Xin Meng
źródło
5

Trochę za późno na imprezę, ale NodeJS (jak sądzę od dnia 14 listopada) obsługuje korporacyjne repozytoria NPM - więcej informacji można znaleźć na ich oficjalnej stronie .

Z pobieżnego spojrzenia mogłoby się wydawać, że npmE pozwala na dublowanie repozytorium NPM - to znaczy, przeszuka pakiety w prawdziwym repozytorium NPM, jeśli nie będzie w stanie znaleźć go w twoim wewnętrznym. Wydaje się bardzo przydatny!

npm Enterprise to lokalne rozwiązanie do bezpiecznego udostępniania i dystrybucji modułów JavaScript w twojej organizacji, od zespołu, który utrzymuje npm i publiczny rejestr npm. Jest przeznaczony dla zespołów, które potrzebują:

łatwe wewnętrzne udostępnianie prywatnych modułów lepsza kontrola przebiegu prac programistycznych i wdrożeniowych ściślejsze bezpieczeństwo wokół wdrażania modułów open source zgodność z wymogami prawnymi do hosta kodu lokalnego npmE to prywatne npm

npmE jest rejestrem npm, który działa z tym samym standardowym klientem npm, którego już używasz, ale zapewnia funkcje potrzebne większym organizacjom, które teraz entuzjastycznie adoptują węzeł. Jest zbudowany przez npm, Inc., sponsora projektu open source npm i hosta publicznego rejestru npm.

Niestety nie jest za darmo. Możesz uzyskać wersję próbną, ale jest to oprogramowanie komercyjne. To nie jest świetny kawałek dla programistów solo, ale jeśli jesteś programistą solo, masz GitHub :-)

Dan Pantry
źródło
3

Ten post mówi o tym, jak skonfigurować prywatny rejestr

  • upewnij się, że couchdb jest zainstalowany w twoim systemie
  • Replikując npmjs.org, użyj następującego polecenia

    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"

Zauważ, że jest "continuous":truew poleceniu, to wykorzystuje interfejs API _changes CouchDB i pobierze wszelkie nowe zmiany, gdy ten interfejs API zostanie powiadomiony.

Jeśli kiedykolwiek chcesz zatrzymać te replikacje, możesz łatwo dodać "cancel":true. Wtedy skrypt byłby

    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"

Następnie przejdź do npmjs.org readme zainstalować NPM (upewnij się, nodejsa gitjest zainstalowany). Cios to wszystkie kroki

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 
nickleefly
źródło
1
Adres isaacs.iriscouch.com/registry jest niestety martwy. Próbowałem zmienić go na skimdb.npmjs.com/registry , który wydaje się na początku działać, ale replikuje tylko indeks rejestru, a nie
archiwum tar
W couchapp stany readme couchapp jest teraz trochę przestarzałe, ale także mówi, że obecny sposób odzwierciedlać cały rejestr jest użycie NPM-fullfat-rejestru
fuzzyTew
Skończyło się na tym, że użyłem do tego statycznego rejestru , który w przeciwieństwie do rozwiązań couchdb nie wymaga żadnej konfiguracji.
fuzzyTew