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.