Come installare un modulo NPM privato senza il mio registro?


329

Ho preso del codice condiviso e l'ho inserito in un modulo NPM, uno che non voglio caricare nel registro centrale. La domanda è: come posso installarlo da altri progetti?

Il modo ovvio è probabilmente quello di impostare il mio registro NPM, ma secondo la documentazione, ciò comporta molta seccatura.

Posso semplicemente installare un modulo NPM che si trova sul filesystem locale, o forse anche da Git?

npm install --from-git git@server:project

Risposte:


263
cd somedir
npm install .

o

npm install path/to/somedir

somedirdeve contenere l' package.jsoninterno.

Conosce anche git:

npm install git://github.com/visionmedia/express.git

4
Il tipo di soluzione path / to / somedir funziona, ma è un po 'orribile perché tutte le istruzioni richieste devono includere quel percorso relativo o assoluto. Per favore, correggimi se sto facendo qualcosa di sbagliato ...
Luke Bayes,

3
@ Luca sì, ti sbagli. Dopo che npm installtutti i file sono stati copiati nella directory del progetto. Quindi i percorsi nelle requireistruzioni saranno relativi solo alla directory del progetto.
mihai,

4
Sono confuso dalla parte superiore e l'unica ragione per cui non l'ho provato io stesso è che sto ancora imparando e non ho un modulo privato su cui lavorare. Ad ogni modo, cambiando la directory in cui si trova il modulo e quindi chiamando installnon si installerebbe lì e non per il progetto per il quale si desidera utilizzarlo?
Adam Beck,

11
Nota a margine: (a) quando si usano i repository git, è possibile specificare un ramo / commit / tag aggiungendo #<ref>a alla fine dell'URL git, ad esempio git://github.com/visionmedia/express.git#v0.0.1; (b) Per sicurezza aggiungi "private": trueal pacchetto.json dei tuoi repository privati. Questo assicurerà che npm non ti permetterà mai di pubblicare accidentalmente la tua salsa segreta nel registro ufficiale di npm. (secondo debuggable.com/posts/… )
Rafael Xavier il

9
Cordiali saluti, se stai servendo il tuo git up tramite http dovrai farlo npm i git+http://all/the/things.gitanche se git clone http://all/the/things.gitfunziona bene
slf

527

Nei tuoi moduli npm privati aggiungi

"private": true 

al tuo package.json

Quindi per fare riferimento al modulo privato in un altro modulo, utilizzalo nel tuo package.json

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://git@github.com:myaccount/myprivate.git#v1.0.0",
    }
}

59
Questa è la vera risposta corretta se si desidera che package.json mantenga l'elenco delle dipendenze dei repository privati, che è una buona cosa (tm) che si dovrebbe fare.

6
Nell'esempio fa riferimento a un tag specifico, ma se non ne hai uno, per impostazione predefinita sarà master. (vedi git-scm.com/book/en/Git-Basics-Tagging )
250R

4
Non capisco come questa riga di comando possa scaricare codice da un repository github privato se non sto applicando le mie credenziali! Quindi, come posso passare le mie credenziali github?
Renato Gama,

28
Si noti che la "private": trueparte non è necessaria, ma aiuterà a impedire che il proprio repository privato venga pubblicato accidentalmente nel registro npm pubblico.
evanrmurphy,

2
npm cerca anche diverse variabili d'ambiente. Dal manuale nella npm install <git remote url>sezione, ci sono opzioni come GIT_ASKPASSe. GIT_SSHUn esempio di utilizzo per scegliere una chiave diversa dall'id_rsa predefinito:GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:npm/npm.git
Jasmine Hegman,

62

Posso semplicemente installare un pacchetto NPM che si trova sul filesystem locale, o forse anche da Git?

Si, puoi! Dai documenti https://docs.npmjs.com/cli/install

Un pacchetto è:

  • a) una cartella contenente un programma descritto da un file package.json
  • b) un tarball gzip contenente (a)
  • c) un URL che si risolve in (b)
  • d) a <name>@<version>che è pubblicato nel registro con (c)
  • e) a <name>@<tag>che indica (d)
  • f) a <name>che ha un tag "più recente" soddisfacente (e)
  • g) a <git remote url>che si risolve in (b)

Npm non è brillante?


2
Nota che se scegli l' opzione b), in realtà deve essere un tarball compresso con zip, un semplice archivio zip non lo farà. Vale a dire se crei il tuo pacchetto con tar -czf my-package.tar.gz dist(supponendo che la tua distcartella contenga anche un package.jsonfile appropriato ), puoi farlo npm install ../my-lib/my-package.tar.gzdall'altro tuo progetto.
Dániel Kis-Nagy,

48

Aggiornamento gennaio 2016

Oltre ad altre risposte , a volte esiste lo scenario in cui si desidera avere moduli privati ​​disponibili in un contesto di squadra.

Sia Github che Bitbucket supportano l'idea di generare una chiave API del team . Questa chiave API può essere utilizzata come password per eseguire richieste API come questo team.

Nei tuoi moduli npm privati aggiungi

"private": true 

al tuo package.json

Quindi per fare riferimento al modulo privato in un altro modulo, utilizzalo nel tuo package.json

    {
        "name": "myapp",
        "dependencies": {
            "private-repo":
"git+https://myteamname:aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myprivate.git",
        }
    }

dove nome squadra = myteamname e API Key = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

Qui faccio riferimento a un repository bitbucket, ma è quasi identico anche usando github.

Infine, in alternativa, se davvero non ti dispiace pagare $ 7 al mese (al momento della scrittura), puoi ora avere moduli NPM privati ​​pronti all'uso .


Puoi usarlo se vuoi avere un modulo globale?
PI.

Questo non funziona per me, temo. Non sono stati trovati sia il telecomando che il repository. Qualche idea?
Thomas Bormans,

@ThomasBormans - hai ancora problemi? Incolla (mescola il nome del tuo team / chiave api) ciò che hai come linea nella sezione delle dipendenze del tuo package.json - come da istruzioni sopra. Ho trovato che funziona bene sia per i repository privati ​​di github che bitbucket. Che stai usando?
ArcSeldon,

@arcseldon "name": "git + key: x-oauth-basic@bitbucket.org/user/repo.git " restituisce EISDIR: operazione illegale su una directory, leggi . E "name": "git + user: key@bitbucket.org/repo.git " restituisce diversi errori tra cui queste parole remote: Not Found, fatal: repository, Command fallito: git clone . Qualche idea?
Thomas Bormans,

Prova a seguire il formato "esatto" che ho fornito in risposta: "git + https: // <miodo_programma>: <mio_key> @ bitbucket.org / <mio_repo_nome> .git Come hai generato la chiave API? Hai verificato due volte è corretto nelle impostazioni di bitbucket ... mi dispiace chiedere l'ovvio, ma ho quasi il 100% di fiducia che dovrebbe funzionare
arcseldon,

30

FWIW: Ho avuto problemi con tutte queste risposte quando ho avuto a che fare con un repository di organizzazioni private.

Per me ha funzionato:

npm install -S "git+https://username@github.com/orgname/repositoryname.git"

Per esempio:

npm install -S "git+https://blesh@github.com/netflix/private-repository.git"

Non sono del tutto sicuro perché le altre risposte non ha funzionato per me in questo un caso, perché sono quello che ho provato prima , prima mi ha colpito Google e ho trovato questa risposta. E le altre risposte sono ciò che ho fatto in passato.

Spero che questo aiuti qualcun altro.


2
Puoi usare una sottocartella del repository git?
Chris,

Ha funzionato per me nel 2019! Ma dovevo assicurarmi che git avesse le credenziali per accedere a quell'account. (Ad esempio testare due volte il clone di git https://e assicurarsi che la password non sia necessaria alla seconda esecuzione. Allora sei a posto!)
joeytwiddle,

9

Ho avuto lo stesso problema e dopo alcune ricerche ho trovato Reggie ( https://github.com/mbrevoort/node-reggie ). Sembra piuttosto solido. Consente la pubblicazione leggera di moduli NPM su server privati. Non perfetto (nessuna autenticazione al momento dell'installazione), ed è ancora molto giovane, ma l'ho testato localmente e sembra fare quello che dice che dovrebbe fare.

Cioè ... (e questo solo dai loro documenti)

npm install -g reggie
reggie-server -d ~/.reggie

quindi cd nella directory del modulo e ...

reggie -u http://<host:port> publish 
reggie -u http://127.0.0.1:8080 publish 

infine, puoi installare i pacchetti da Reggie semplicemente usando quell'URL o in un comando di installazione diretta di npm, o all'interno di un pacchetto.json ... in questo modo

npm install http://<host:port>/package/<name>/<version>
npm install http://<host:port>/package/foo/1.0.0

o..

dependencies: {
    "foo": "http://<host:port>/package/foo/1.0.0"
}

7

Strutturare il codice in modo accessibile come di seguito. Se questo è possibile per te.

  • NodeProjs \ Apps \ MainApp \ package.json

  • NodeProjs \ Modules \ DataModule \ package.json

All'interno di MainApp @ NodProjs \ Apps \ MainApp \

npm install --S ../../Modules/DataModule

Potrebbe essere necessario aggiornare package.json come:

 "dependencies": {
       "datamodule": "../../Modules/DataModule"
}

Questo ha funzionato per la mia situazione.


5

Npm ora fornisce moduli hosted privati illimitati per $ 7 / utente / mese usati in questo modo

cd private-project
npm login

nel pacchetto json set "name": " @username/private-project"

npm publish

quindi per richiedere il tuo progetto:

cd ../new-project
npm install --save @username/private-project

1
Ciò richiede un passaggio di accesso sul lato client?
Aidan Hoolachan,

Qual è un'alternativa a questo? Ad esempio, se vuoi ospitare il tuo "pacchetto" su S3 e tirare da lì.
Con Antonakos,

4

A partire dalla risposta di arcseldon , ho scoperto che il nome del team era necessario nell'URL in questo modo:

npm install --save "git+https://myteamname@aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myteamname/myprivate.git"

E nota che la chiave API è disponibile solo per il team, non per i singoli utenti.


2

Configura per l'installazione dal repository Github pubblico, anche se la macchina è protetta da firewall:

dependencies: {
   "foo": "https://github.com/package/foo/tarball/master"
}

2

Uso quanto segue con un repository github privato:

npm install github:mygithubuser/myproject

2

Questo era quello che stavo cercando :

# Get the latest from GitHub, public repo:
$ npm install username/my-new-project --save-dev
# Bitbucket, private repo:
$ npm install git+https://token:x-oauth-basic@github.com/username/my-new-project.git#master
$ npm install git+ssh://git@github.com/username/my-new-project.git#master

#  or from Bitbucket, public repo:
$ npm install git+ssh://git@bitbucket.org/username/my-new-project.git#master --save-dev
# Bitbucket, private repo:
$ npm install git+https://username:password@bitbucket.org/username/my-new-project.git#master
$ npm install git+ssh://git@bitbucket.org/username/my-new-project.git#master
# Or, if you published as npm package:
$ npm install my-new-project --save-dev

2

A questo scopo è possibile utilizzare Verdaccio, che è un registro proxy npm privato leggero incorporato in Node.js. Inoltre è gratuito e open-source. Usando Verdaccio non comporta molta seccatura come farebbe un semplice registro npm privato.

Puoi trovare informazioni dettagliate su come installarlo ed eseguirlo sul loro sito Web, ma ecco i passaggi:

Richiede node >=8.x.

    // Install it from npm globally
    npm install -g verdaccio

    // Simply run with the default configuration that will host the registry which you can reach at http://localhost:4873/
    verdaccio

    // Set the registry for your project and every package will be downloaded from your private registry
    npm set registry http://localhost:4873/

    // OR use the registry upon individual package install
    npm install --registry http://localhost:4873

Ha anche una finestra mobile in modo da poterlo pubblicare facilmente sulla finestra mobile disponibile pubblicamente e voilà hai un repository npm privato che può essere distribuito ad altri in un modo mentre lo configuri!


0

Molto semplice -

npm config set registry https://path-to-your-registry/

In realtà imposta registry = "https://path-to-your-registry"questa linea su/Users/<ur-machine-user-name>/.npmrc

Tutto il valore impostato in modo esplicito o impostato per impostazione predefinita può essere visualizzato da - npm config list

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.