puoi ospitare un repository privato che la tua organizzazione può utilizzare con npm?


219

Npm suona come una grande piattaforma da utilizzare all'interno di un'organizzazione, curioso se è possibile un repository privato, come con Nexus / Maven. Non succede nulla su Google :(


1
Di seguito è riportata una documentazione abbastanza accurata, come farlo: clock.co.uk/tech-blogs/how-to-create-a-private-npmjs-repository Questo è lo stesso di pvorb spiegato nella sua risposta.
ramesh.mimit,

2
Nota che il post di clock.co.uk è un duplicato completo del registro npm. Per una cache locale delle dipendenze richieste, la migliore soluzione che ho trovato è npm_lazy . Il documento sul mio fork potrebbe essere leggermente più facile da seguire.
Jake Berger,

1
So di essere un po 'in ritardo alla discussione, ma vorrei solo aggiungere che abbiamo recentemente aggiunto il supporto del registro npm privato al nostro prodotto (gratuito) ProGet
Karl Harnagy,

2
Come indicato di seguito, Nexus ora supporta repository npm in hosting e proxy.
Zac Thompson,

8
Nel corso degli anni ci sono molte opzioni disponibili. Chiunque ritorni su questo dovrebbe leggere tutte le risposte e non solo quella che ho accettato nel 2011.
Adamo

Risposte:


100

Non penso che ci sia un modo semplice per farlo.

Uno sguardo alla documentazione di npm ci dice che è possibile:

Posso eseguire il mio registro privato?

Sì!

Il modo più semplice è replicare il database del divano e utilizzare lo stesso (o simile) documento di progettazione per implementare le API.

Se imposti la replica continua dal CouchDB ufficiale e poi imposti il ​​tuo CouchDB interno come configurazione del registro, sarai in grado di leggere tutti i pacchetti pubblicati, oltre a quelli privati, e per impostazione predefinita verranno pubblicati solo internamente. Se poi vuoi pubblicare un pacchetto che tutto il mondo possa vedere, puoi semplicemente ignorare la --registryconfigurazione di quel comando.

C'è anche un eccellente tutorial su come creare un repository npm privato nel blog di Clock.

EDIT (26-02-2017):

Non proprio nuovo, ma ora ci sono piani a pagamento per ospitare pacchetti privati ​​su NPM.

Nel corso degli anni, NPM è diventato un fattore anche per molte aziende non Node.js, attraverso l'enorme ecosistema di frontend basato su NPM. Se la tua azienda sta già eseguendo Sonatype Nexus per l'hosting di progetti Java internamente, puoi anche utilizzarlo per l'hosting di pacchetti NPM interni.

Altre opzioni includono JFrog Artifactory e Inedo ProGet , ma non le ho utilizzate.


201

https://github.com/isaacs/npmjs.org/ : nella versione npm v1.0.26 è possibile specificare gli URL dei repository git privati ​​come dipendenza nei file package.json. Non l'ho usato ma mi piacerebbe un feedback. Ecco cosa devi fare:

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

Il seguente post parla di questo: Debuggable: moduli npm privati


3
Questa è una grande funzionalità, ma ho accettato pvorb perché stavo chiedendo di ospitare un intero repository NPM, un repository Maven interno
adam,

2
Nota: attualmente NPM non supporta la specifica di un intervallo di versioni con questi URL git (ad es. 1.2.xo ^ 1.2.3). github.com/npm/npm/issues/3328
Clay

@Clay, puoi specificare un tag (v0.0.1), giusto?
dal

Sì, puoi fare un tag esatto.
Clay,

Esiste un modo per utilizzare le chiavi di distribuzione di GitHub per l'autenticazione con repository privati?
Sunknudsen,

91

C'è un pacchetto npm facile da usare per fare questo. https://www.npmjs.org/package/sinopia

In breve, Sinopia è un server di repository npm privato / di cache che è possibile impostare con configurazione zero.

La sinopia può essere usata per:

  • pubblicare i propri pacchetti privati ​​senza esporli al pubblico
  • memorizzare nella cache solo i pacchetti pubblici utilizzati (non è necessario replicare l'intero registro pubblico)
  • sovrascrivere i pacchetti pubblici con una versione modificata che sono stati prodotti internamente.

13
La sinopia sembra non essere più mantenuta. L'ultimo commit è stato effettuato oltre 8 mesi fa a partire da oggi (7 marzo 2016). Sembra fantastico e funziona bene, ma fai attenzione alla manutenibilità.
Ray Booysen,

45
Dai un'occhiata al verdaccio . È una forchetta mantenuta attivamente: github.com/verdaccio/verdaccio
Rotareti

1
verdaccio supporta una configurazione "solo privata", dove non verrà interrogato alcun registro pubblico?
MarkusSchaber

1
@MarkusSchaber È possibile disabilitare il proxy per altri registri. Funziona in modalità offline anche se il proxy tenta di accedere alla rete.
Juan Picado,

1
Credo davvero che Verdaccio meriti la propria risposta oggi stackoverflow.com/a/50815174/336753 Non ho nemmeno notato il commento qui prima.
kub1x,

40

Verdaccio è quello che stavo cercando e merita la sua risposta;) È un fork attivamente mantenuto della Sinopia (risposta altamente votata qui ). È un registro npm come pacchetto npm e può essere trovato

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


2
Questo! grazie -> docker run -it --rm --detach --name verdaccio -p 4873: 4873 verdaccio / verdaccio
mwm

1
@mwm Grazie. Aggiunta la versione docker all'elenco.
kub1x,

28

Il 14 aprile (2015) sono stati introdotti i moduli privati ​​npm .

Quando paghi per moduli privati, puoi:

  • Ospita tutti i pacchetti privati ​​che desideri
  • Consentire l'accesso in lettura o in lettura / scrittura per tali pacchetti a qualsiasi altro utente a pagamento
  • Installa e utilizza tutti i pacchetti a cui altri utenti a pagamento ti hanno concesso l'accesso in lettura
  • Collabora a tutti i pacchetti a cui altri utenti a pagamento ti hanno dato accesso in scrittura

Ovviamente non è gratuito - attualmente 7 $ al mese, per utente.

Ed è ancora un servizio piuttosto nuovo. Ad esempio, manca il supporto per gli account dell'organizzazione (a giugno 2015):

Attualmente, i pacchetti privati ​​sono disponibili solo per singoli utenti, ma il supporto per gli account dell'organizzazione è in arrivo. Nel frattempo, sentiti libero di creare un utente per la tua organizzazione e possiamo aggiornarlo a un'organizzazione quando il supporto è disponibile.

Quindi, sebbene non perfetta, è la soluzione npm ufficiale per mantenere i pacchetti privati, e questo vale la pena menzionarlo.

AGGIORNARE

I pacchetti privati ​​di Npm sono ora disponibili, con piani sia per singoli utenti che per organizzazioni :

  • Numero illimitato di pacchetti pubblici e privati
  • $ 7 / mese / sviluppatore
  • Include un nome ambito, basato sul nome dell'organizzazione
  • Pubblica e controlla l'accesso a @ org-name / foo

(esonero di responsabilità: nemmeno affiliato a distanza in alcun modo con npm, Inc. )


20

Gestori del repository con supporto per i registri npm privati:


4
Solo le versioni a pagamento supportano i repository npm; le versioni gratuite no.
Boon,

12
La versione gratuita di Sonatype Nexus 3.0 supporta, infatti, i repository npm (insieme ai repository bower e docker).
n8n8baby,

10

Immagino che questo thread abbia bisogno di un aggiornamento. Se guardi uno qualsiasi dei registri npm disponibili, sono estremamente pesanti e hanno bisogno di couchdb. Gemfurry e altri hanno bisogno che tu ti riporti dai repository pubblici. Alcuni degli npm come shadow-npm non hanno commit recenti .

Quindi, abbiamo trovato Reggie . Ha una buona attività di commit, estremamente facile da installare e utilizzare e ha un buon supporto della comunità . È estremamente leggero e non devi occuparti di couchdb, ecc.


9

Scusami se non capisco bene la tua domanda, ma ecco la mia risposta:

È possibile creare un modulo npm privato e utilizzare i normali comandi di npm per installarlo. La maggior parte degli utenti di node.js usano git come repository, ma puoi usare qualunque repository funzioni per te.

  1. Nel tuo progetto, vorrai lo scheletro di un pacchetto NPM. La maggior parte dei moduli di nodo ha repository git in cui puoi vedere come si integrano con NPM (il file package.json, credo sia parte di questo e il sito Web di NPM ti mostra come creare un pacchetto npm)
  2. Usa qualcosa di simile a Make per creare e tarball il tuo pacchetto affinché sia ​​disponibile da Internet o dalla tua rete per metterlo in scena per i download di installazione di npm.
  3. Una volta creato il pacchetto, utilizzare

    npm install * tarball_url *


5
Non hai ricevuto la sua domanda, ma la risposta è molto utile per me! :)
Eduardo Costa,

7

Questo è il modo più semplice che conosco: ospitalo nel cloud con il registro npm privato di Gemfury.

È gratuito e puoi accedere con il tuo account Github. Dovrebbe farti risparmiare molto tempo, rispetto alla creazione del tuo database.


non è gratuito però.
I.Tyger,

6

stiamo usando Sonatype Nexus, la versione è Nexus Repository ManagerOSS 3.6.1-02. E sono sicuro che supporta il repository privato NPM e memorizza nella cache il pacchetto.

inserisci qui la descrizione dell'immagine


5

Un po 'in ritardo alla festa, ma NodeJS (a partire dal ~ 14 novembre suppongo) supporta i repository NPM aziendali - puoi scoprire di più sul loro sito ufficiale .

A prima vista sembrerebbe che npmE consenta il mirroring fall-through del repository NPM, ovvero cercherà i pacchetti nel repository NPM reale se non riesce a trovarne uno sul proprio interno. Sembra molto utile!

npm Enterprise è una soluzione locale per la condivisione e la distribuzione sicura dei moduli JavaScript all'interno dell'organizzazione, dal team che gestisce npm e il registro npm pubblico. È progettato per i team che hanno bisogno di:

facile condivisione interna dei moduli privati ​​miglior controllo del flusso di lavoro di sviluppo e distribuzione sicurezza più rigorosa intorno all'implementazione dei moduli open source conformità ai requisiti legali per ospitare il codice locale

npmE è un registro npm che funziona con lo stesso client npm standard che già usi, ma fornisce le funzionalità necessarie per le organizzazioni più grandi che ora stanno adottando con entusiasmo il nodo. È costruito da npm, Inc., sponsor del progetto open source npm e host del registro pubblico npm.

Sfortunatamente, non è gratuito. Puoi ottenere una versione di prova, ma è un software commerciale. Questo non è un granché per gli sviluppatori solisti, ma se sei uno sviluppatore solista, hai GitHub :-)


3

Questo post parla di come impostare un registro privato

  • assicurati che couchdb sia installato nel tuo sistema
  • Replica npmjs.org usa il seguente comando

    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"

Nota che c'è "continuous":truenel comando, questo utilizza l'API _changes di CouchDB e tirerà tutte le nuove modifiche quando questa API viene notificata.

Se mai vuoi interrompere queste repliche, puoi facilmente aggiungere "cancel":true. Quindi la sceneggiatura sarebbe

    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"

Quindi vai al file Leggimi di npmjs.org per installare npm (assicurati nodejsche gitsia installato). Il colpo è tutti i passaggi

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
L'URL isaacs.iriscouch.com/registry è purtroppo morto ora. Ho provato a cambiarlo in skimdb.npmjs.com/registry , che all'inizio sembra funzionare, ma sta replicando solo l'indice di registro e non i tarball ...
fuzzyPiù

Il readme di couchapp afferma che couchapp è ora un po 'deprecato, ma afferma anche che il modo attuale di eseguire il mirroring dell'intero registro è utilizzare npm-fullfat-register
fuzzyTew

Ho finito per usare static-register per questo, che a differenza delle soluzioni couchdb non richiede alcuna configurazione.
fuzzy Pochi


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.