NPM non installa dipendenze del modulo


151

Questo è il mio package.jsonper il modulo che sto includendo nel progetto genitore:

{
  "version": "0.0.1",
  "name": "module-name",
  "dependencies": {
    "express": "3.3.4",
    "grunt": "0.4.1",
    "grunt-contrib-compass": "0.4.0",
    "grunt-contrib-copy": "0.4.1",
    "grunt-contrib-cssmin": "0.4.1",
    "grunt-contrib-jshint": "0.6.3",
    "grunt-contrib-requirejs": "0.4.1",
    "grunt-contrib-uglify": "0.2.2",
    "grunt-contrib-watch": "0.5.1",
    "grunt-express-server": "0.4.1",
    "grunt-karma": "0.4.5",
    "grunt-regex-replace": "0.2.5",
    "request": "2.25.0"
  },
  "scripts": {
    "postinstall": "grunt install"
  }
}

Una cosa da notare è che questo modulo è contenuto in un repository privato e lo includo nel genitore package.jsoncome:"module-name": "git+ssh://git@myserver:user/module-name.git"


Il tuo package.json sembra ok, così come la linea che usi per includerlo. Hai ricevuto un messaggio di errore? Git è sulla tua strada?
poida,

1
Non ricevo alcun errore per sa, il modulo si installa ma il mio postinstallscript non riesce perché i gruntpacchetti locali non vengono trovati in quanto non sono installati da NPM
Ahmed Nuaman

1
Questo problema persiste ancora nel novembre 2016. Avevo eseguito un'installazione pulita di un modulo funzionante su un nuovo computer. @ La risposta di Mohsen l'ha risolto.
Joe Lapp,

Risposte:


152

Sembra che tu abbia colpito un bug che esiste da un po 'di tempo e non ha ancora una soluzione. Esistono diversi problemi aperti per questo caso nel repository npm:

Nel primo le persone elencano diverse soluzioni alternative che puoi provare.

Una soluzione alternativa potrebbe essere (un po 'hacker) per elencare esplicitamente le dipendenze come dipendenti di primo livello. Ciò richiede di mantenere l'elenco, ma praticamente deve essere fatto molto raramente.


1
@ Flame2057 è bello sapere che sei sfortunato, anche se non troppo informativo. Puoi andare avanti e formulare una domanda, speriamo che la comunità abbia le conoscenze da risolvere. Divertiti!
allprog,

Era necessario un ulteriore passo per me. Ho dovuto fare clic con il pulsante destro del mouse su "Dipendenze" nel mio progetto e scegliere "Ripristina pacchetti" dopo aver eseguito gli altri passaggi indicati qui (eliminare node_modules e package.lock.json, quindi installare npm).
Taersious

114

Ho avuto un problema molto simile, rimuovere l'intera node_modulescartella e reinstallare ha funzionato per me. Ho imparato questo trucco dallo spettacolo IT Crowd !

rm -rf node_modules
npm install

Questo ha funzionato davvero per me. Penso che sia davvero strano - cosa sta causando quel glitch? Indipendentemente da ciò, se cancello la cartella e rieseguo l'installazione di npm, allora funziona. In precedenza, nulla avrebbe installato in quella sottodirectory. Ora, tutto viene installato lì.
CtheGood,

Grazie @Moshen. Avevo rimosso una vecchia versione di Node e fatto un'installazione pulita. Ho rimosso tutti i miei node_modules / a livello globale, ma ho dimenticato di rimuoverlo da alcune app esistenti. Ho dovuto eliminare la cartella node_modules nella directory di ogni app esistente, quindi eseguire npm install.
Wilblack,

Il buon vecchio "hai provato a ricominciare da zero ?". Questo ha funzionato alla grande per me.
Marco Aurélio Deleu,

Sebbene sia bello sapere che esiste una soluzione alternativa, questo ha davvero il sapore di "riavviare il computer e riprovare" e nasconde il vero problema. Ho un problema simile con l'installazione di NPM (il processo termina immediatamente senza alcun messaggio) e una delle soluzioni alternative è eliminare la cartella node_modules e reinstallarla; il che non mi riempie di fiducia nel capire cosa sta succedendo qui.
Kelly S. francese,

1
Questo ha funzionato per me. Se potessi fare nuovamente +1 per il riferimento alla folla IT, lo farei.
texelate

33

Sto usando Windows Machine.

  1. Ho eliminato la cartella node_modules.
  2. In qualche modo, viene creato il file package.lock.json. Ho cancellato quel file.
  3. Quindi installa npm.
  4. Build pulito.
  5. Correre.

14
Questa risposta deve ottenere più amore. Il file package.lock.json mi stava fregando.
mwilcox,

16

se hai ereditato questo codice, è possibile che dipendenze e versioni siano state bloccate e che tu abbia un file ./npm-shrinkwrap.json.

se la tua dipendenza non è elencata in quel file, non verrà mai installata con il npm installcomando.

sarà necessario installare manualmente i pacchetti ed eseguirli npm shrinkwrapper aggiornare il file shrinkwrap.


2
Ho avuto un problema in cui l'installazione manuale di un pacchetto aveva creato un package-lock.jsonfile dopo l'aggiornamento al nodo 8.0.0 e npm 5.0.0. Dopodiché, l'esecuzione funzionerebbe npm installsempre e solo su quel pacchetto anziché su tutte le mie dipendenze. L'eliminazione package-lock.jsone la riesecuzione hanno npm installrisolto il problema per me.
Monkpit,

1
@Monkpit Che ha risolto anche per me, grazie! package-lock.jsonsi stava mettendo in mezzo.
VirtualWolf,

10

Ho il sospetto che tu stia affrontando il problema in cui il tuo package.jsonfile non è nella stessa directory del tuo Gruntfile.js. Quando esegui i tuoi grunt xxxcomandi, ricevi un messaggio di errore come:

Local Npm module "xxx" not found. Is it installed?

Per ora, la soluzione è:

  • Crea package.json nella stessa directory di Gruntfile.js
  • Definisci i moduli richiesti dal tuo progetto grunt
  • Eseguire npm installper caricarli localmente
  • Ora il comando grunt richiesto dovrebbe funzionare.

IMHO, è triste che non possiamo avere moduli di risoluzione grugniti caricati da un modulo npm genitore (cioè package.json in una directory genitore all'interno dello stesso progetto). La discussione qui sembra indicare che è stato fatto per evitare il caricamento di moduli "globali" ma penso che invece vogliamo caricare dai moduli "il mio progetto".


Quindi questa è la struttura del mio progetto genitore (che è quello che importa il progetto del sottomodulo): cl.ly/image/020E0b3I0t1A e la struttura del mio progetto del sottomodulo : cl.ly/image/2q0L3l1v0s40 ; puoi vedere che entrambi contengono Gruntfile.jsed entrambi contengono package.jsonlo stesso livello.
Ahmed Nuaman,

1
Questo non è un problema grunt, è un problema con l' npminstallazione non ricorsiva delle dipendenze nel mio progetto del modulo secondario.
Ahmed Nuaman,

9

OP può essere vero per una versione precedente del nodo. Tuttavia, ho affrontato lo stesso anche con il nodo 4.4.1.

Può benissimo essere collegato alla versione del nodo che si sta utilizzando. Prova ad aggiornare a una versione più recente. Alcune dipendenze non vengono caricate in modo transitorio se sono incompatibili con la versione del nodo.

L'ho trovato correndo npm update .

Dopo l'aggiornamento all'ultima versione (4.4 -> 5.9); questo è stato risolto.


8

Nel mio caso ha aiutato a rimuovere node_modulesepackage-lock.json .

Dopodiché basta reinstallare tutto con npm install.


8

Controlla anche che il nome del tuo pacchetto sia accettato correttamente:

SBAGLIATO:

{
    "name":"My Awesome Package"
}


CORRETTA

{
    "name": "my-awesome-package-name"
}

1
Sì, avevo uno spazio nel nome e non è stato installato correttamente.
Ansjovis86,

1
non solo per lo spazio, riguarda anche il '-' che ha usato nel nome, ho anche affrontato lo stesso problema, messo - o _ nel nome, funzionerà.
Molagbal

4

Potrebbe essere necessario installare grunt-cli, provare prima di eseguire un'installazione npm:

sudo npm install -g grunt-cli

Ciò risolve il fatto che il grugnito non esca per me, avrai anche bisogno di un file grugnito valido.

Fonte: https://stackoverflow.com/a/16456467/241294


Cosa succede quando si prova il comando 'grunt' al prompt dei comandi? Esiste sul tuo cammino? Hai ragione, sembra che sia installato dal tuo pastebin. L'hai installato con sudo e -g?
poida,

Non è un problema con grugnito:~ ᐅ which grunt /opt/local/bin/grunt
Ahmed Nuaman,

Anche quando clonare il repository stesso, anziché tramite NPM ed eseguo npm installe grunt install, funziona benissimo. Il problema è che NPM non sembra installare le dipendenze del repository come specificato inpackage.json
Ahmed Nuaman,

In quale directory stai cercando le dipendenze dei pacchetti? Non dovrebbero essere al livello più alto ma sotto: pacchetto di livello superiore / nodo_moduli / nome-modulo / nodo_moduli. Potrebbe essere che grunt non trovi il file grunt perché funziona nella directory sbagliata?
poida,

Non è un problema con grunt, quando si installano moduli con NPM, di solito fornisce un riepilogo alla fine di tutte le dipendenze di quel modulo che sono già state installate; quando installo il modulo in questione non ricevo un riepilogo di alcun modulo di dipendenza installato.
Ahmed Nuaman,

4

Nel caso in cui qualcuno soffra di questa situazione e capita di commettere lo stesso errore asanino che ho fatto, ecco cosa è successo nel mio caso. Dopo aver sbattuto la testa contro il muro per un'ora, mi sono reso conto che il mio json era annidato in modo errato e che le "dipendenze" chiave erano all'interno del "repository" chiave.
Inutile dire che non sono stati rilevati errori e non sono stati installati moduli.


3

Un altro modo per aggirare il problema è aggiungerlo nella package.jsonsezione degli script del modulo

"preinstall": "npm install {Packages You depend on}"

ciò che farà è, installerà tutti i pacchetti necessari per il modulo e non otterrai questo errore.


3

succede con la vecchia versione del nodo. usa l'ultima versione del nodo in questo modo:

$ nvm use 8.0
$ rm -rf node_modules
$ npm install
$ npm i somemodule

modifica: assicurati anche di te save.
per esempio:npm install yourmoduleName --save


2

Stavo ricevendo questo errore quando ho installato un ambiente di sviluppo Node pulito su Windows.

Per risolvere questo problema, sono andato nella mia nuova directory di progetto (con cui ho appena impalcato yo angular) e ho digitato due comandi:

npm install -g grunt --save-dev

Ciò installerà le dipendenze grugniti locali sul tuo progetto. Il prossimo:

npm install

Ciò garantirà l'installazione di tutte le dipendenze del tuo (nuovo) progetto.

Tada!


2

Vale la pena ricordare che le tue dipendenze dovrebbero essere nella dependenciestua parte package.json(al contrario di devDependencies).

Il mio problema era sostanzialmente lo stesso di OP:

  • installazione di un repository privato (chiamiamolo repo1) tramite "module-name": "git+ssh://git@myserver:user/my-repo-name.git"in un altro repository (chiamiamolo repo2),
  • in repo2's node_modules, una dipendenza del pacchetto darepo1 non c'era.
  • Il mio sciocco errore! ... repo1stava elencando quella dipendenza devDependenciesinvece didependencies
  • Spostare la dipendenza nei miei repo1's package.jsonda devDependencies adependencies
  • Nel mio repo2, ho rimosso il mio node_modulese package-lock.json, fatto npm install, un voilà! ... la dipendenza era lì!

Avevo dichiarato la variabile di ambiente di produzione NODE_ENV = nel mio Dockerfile sopra il comando npm install, che non consente l'installazione di devDependencies
Pieter De Clercq

0

Ho avuto lo stesso problema. Ma sulla stessa macchina un progetto aveva un buon package.json, dove tutte le mie dipendenze sono state installate con successo. E in un altro progetto le mie dipendenze package.json non sono state installate, qualunque cosa io faccia. Ho appena copiato il package.json e incollato in quell'altro progetto. E ha funzionato! La differenza che ho trovato era solo una riga vuota all'inizio del file. Non so o influenza qualcosa, forse qualche altro problema. Ma il problema era solo il file package.json.


0

Penso di aver affrontato anche questo problema e la migliore soluzione che ho trovato è stata quella di guardare la mia console e capire l'errore che veniva lanciato. Quindi, l'ho letto attentamente e ho scoperto che il problema era che non avevo specificato il repository, la descrizione e il nome valido nel mio package.json. Ho aggiunto quelle informazioni e tutto è andato bene.

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.