Come posso risolvere l'errore "Impossibile trovare il modulo" utilizzando Node.js?


617

Dopo aver rimosso un modulo da GitHub e aver seguito le istruzioni per crearlo, provo a inserirlo in un progetto esistente usando:

> npm install ../faye

Questo sembra fare il trucco:

> npm list
/home/dave/src/server
└─┬ faye@0.7.1
  ├── cookiejar@1.3.0
  ├── hiredis@0.1.13
  └── redis@0.7.1

Ma Node.js non riesce a trovare il modulo:

> node app.js
node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: Cannot find module 'faye'
    at Function._resolveFilename (module.js:334:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:357:17)
    at require (module.js:368:17)
    at Object.<anonymous> (/home/dave/src/server/app.js:2:12)
    at Module._compile (module.js:432:26)
    at Object..js (module.js:450:10)
    at Module.load (module.js:351:31)
    at Function._load (module.js:310:12)
    at Array.0 (module.js:470:10)

Voglio davvero capire cosa sta succedendo qui, ma sono un po 'perplesso su dove guardare dopo. Eventuali suggerimenti?


8
La node_modulesdirectory dovrebbe trovarsi nella radice del progetto, insieme app.jsal caso. Perché hai utilizzato ..il percorso di installazione di npm?
Alex Wayne,

1
Dopo aver modificato "npm install ../faye" in "npm install ../faye/build", funziona come previsto. Non so quanto sia tipico, ma faye crea una directory di build quando viene creata e inserisce una copia di package.json. npm non si lamenta di package.json a livello di root, ma fa riferimento a file che non esistono a quel livello.
Dave Causey,

2
Ho risolto il problema, ma in realtà non ho ottenuto alcuna soluzione alla mia vera domanda, che era come risolvere questo problema. Proverò a trovare alcuni suggerimenti per migliorare npm e / o node per rendere più facile per i nuovi arrivati ​​evitare questa situazione.
Dave Causey,

1
Passa attraverso questo link , potresti avere un'idea di dove esattamente non riesca a cercare i tuoi moduli ..
Amol M Kulkarni

1
Controlla che tempo sei nella stessa cartella in cui l'hai installato? se non lo hai installato a livello globale.
Ashwani Panwar,

Risposte:


513

Utilizzando si npm installinstalla il modulo solo nella directory corrente (in una sottodirectory chiamata node_modules). App.js si trova sotto home/dave/src/server/? In caso contrario e si desidera utilizzare il modulo da qualsiasi directory, è necessario installarlo a livello globale utilizzando npm install -g.

Di solito installo la maggior parte dei pacchetti localmente in modo che vengano registrati insieme al mio codice di progetto.

Aggiornamento (8/2019):

Oggi è possibile utilizzare il file package-lock.json , che viene generato automaticamente quando npm modifica la directory node_modules. Pertanto, puoi tralasciare il check-in dei pacchetti, poiché package-lock.jsontiene traccia delle versioni esatte dei tuoi node_modules, attualmente in uso. Per installare i pacchetti package-lock.jsoninvece di package.jsonutilizzare il comando npm ci.

Aggiornamento (3/2016):

Ho ricevuto molte critiche per la mia risposta, in particolare che controllo i pacchetti da cui dipende il mio codice. Qualche giorno fa, qualcuno non ha pubblicato tutti i suoi pacchetti ( https://kodfabrik.com/journal/i-ve-just-liberated-my-modules ) che hanno rotto React, Babel e praticamente tutto il resto. Spero che ora sia chiaro che se si dispone di un codice di produzione, non è possibile fare affidamento sul fatto che NPM mantenga effettivamente le proprie dipendenze.


264
"Di solito installo la maggior parte dei pacchetti localmente in modo che vengano archiviati insieme al mio codice di progetto." Di solito è meglio fare un package.jsonelenco da quali moduli npm si dipende e ignorare la node_modulescartella. Quindi semplicemente npm installper ottenere l'installazione dopo aver clonato il repository.
Alex Wayne,

53
Oltre a package.jsonelencare le dipendenze, mi piace tenere note valide delle cose da cui dipendo. Lo spazio su disco è economico e se npm o il pacchetto scompare da npm, avrò ancora un progetto pienamente funzionante nel mio repository.
Bill,

165
Come vecchio sviluppatore ho quasi soffocato quando ho letto il "paradigma" degli sviluppatori Node che "lo spazio su disco è economico". Ho delle librerie che sto usando. L'idea che potrei avere 100 copie (o peggio, PROSSIME copie) mi fa girare lo stomaco. Lo spazio su disco è economico, ma i tempi di manutenzione sono costosi. Forse se stai realizzando un progetto giocattolo unico, la manutenzione è economica. Per lavori reali, tuttavia, la manutenzione è costosa e non influisce sul costo dello spazio su disco.
Lloyd Sargent,

66
Non capisco davvero questo ultimo commento. Nessuno sta dicendo di avere 100 copie di qualsiasi pezzo di codice, solo per avere 1 copia del codice da cui dipende il progetto. L'alternativa è avere un progetto non funzionale se NPM o la dipendenza scompare un giorno. Penso che riscrivere una dipendenza da zero sia anche piuttosto costoso. Per inciso, ho lavorato in Microsoft per 10 anni e abbiamo sempre avuto dipendenze di terze parti verificate nel nostro albero dei sorgenti.
Bill

33
@LloydSargent Avere "NEAR copia" non è peggio, è meglio , perché ogni progetto ha una dipendenza specifica, che hai definito, e il resto del tuo codice si basa. Se tu avessi le stesse versioni su più progetti poi se si aggiorna qualsiasi cosa si deve aggiornare tutto . L'inserimento delle dipendenze consente aggiornamenti frammentari, una manutenzione sostanzialmente inferiore . Lavori reali, progetti non giocattolo.
Dave Newton,

459

Ho avuto un problema molto simile. Rimozione dell'intera node_modulescartella e reinstallazione ha funzionato per me:

rm -rf node_modules
npm install

13
Farei anche una cache npm pulita, proprio come una cosa di sicurezza :)
Tony Tai Nguyen,

1
Probabilmente un buon primo passo di risoluzione dei problemi ogni volta che un problema di dipendenza strano appare che npm install/ npm updatenon risolverà. Ciò ha risolto un problema a causa del quale Error: Cannot find module 'http-errors'ho iniziato a mostrare casualmente quando ho provato a eseguire la mia app Express.
Matt Vukas,

Incredibile, la risposta di @ carelesslyChoosy ha risolto una dipendenza mancante. Sembra che l'aggiornamento e il downgrade con l'installazione di npm in atto non mantengano le cose in ordine.
Eel GhEEz,

3
Un passaggio mancante qui è rimuovere il file package-lock.json prima di eseguirlo npm install.
Rick Quantz,

questo non ha funzionato per me, nemmeno riavviato il computer;)
Jason G

83
npm install --save module_name

Ad esempio, se l'errore è:

{[Errore: Impossibile trovare il modulo '/root/.npm/form-data'] codice: 'MODULE_NOT_FOUND'}

quindi è possibile risolvere questo problema eseguendo il comando npm install --save form-data.


1
sembra che quando l'ho installato a livello globale la cartella npm / node-modules fosse vuota e stavo cercando di usarla ng new project-namemostrava alcuni moduli mancanti ... ho dovuto installarli ciascuno usando il comando dato.Quindi ha risolto il problema ma è c'è qualche singolo comando per installarli tutti in una volta?
Vishal Nair,

25

Per gli utenti di TypeScript, se si importa un modulo Node incorporato (come http, patho url) e si riceve un errore del tipo, "Cannot find module "x"l'errore può essere risolto eseguendo

npm install @types/node --save-dev

Il comando importerà le definizioni TypeScript NodeJS nel progetto, consentendo di utilizzare i moduli integrati di Node.


18

Questo succede quando un primo npm installazione di è arrestata in modo anomalo per qualche motivo (SIGINT di npm) o se il ritardo era troppo lungo o i dati sono danneggiati. Provare di nuovo a installare npm non salverà il problema.

Qualcosa non ha funzionato al primo controllo di npm, quindi la scelta migliore è quella di rimuovere il file e riavviare npm install.


16
questo mi ha diagnosticato il problema. ho finito per fare npm cache cleare cancellare nodo_moduli seguito da npm installper risolvere il mio problema.
Meklarian,

9

Se si utilizza nvm, verificare che i nodi_moduli esistenti che sono collegamenti ad altre librerie siano compilati per la versione corretta di Node.js.

Stavo avendo lo stesso errore. Il motivo era il seguente: usiamo nvm poiché stiamo eseguendo due app su un server, una richiede Node.js 5.6 perché utilizza node-gd (che per ora non funziona su Node.js 6), l'altra richiede Node.js 6. Node.js 6 è l' installazione apt-get .

Inoltre utilizziamo lo strumento pm2 per distribuire.

Quindi, l'impostazione predefinita è che il processo pm2 si avvia quando nvm non è attivo, quindi utilizza l'installazione apt-get di Node.js (versione 6). Quindi il demone pm2 principale inizia con Node.js 6. Se eseguo applicazioni in modalità fork, si avviano in processi separati e le impostazioni nvm sono attive. Quando eseguo applicazioni in modalità cluster, ereditano l'ambiente non nvm.

Quindi, quando ho provato a passare alla modalità cluster, l'applicazione non è stata avviata perché i collegamenti compilati per 5.6 falliscono con questo messaggio.

Ho risolto il problema riavviando pm2 quando sono attive le impostazioni nvm. Anche gli script di avvio dovrebbero essere corretti.


Come lo controlli?
tamj0rd2,

8

Controlla se la variabile di ambiente NODE_PATH è impostata correttamente e punta al percorso node_modules. nodejs utilizza questa variabile per cercare le librerie


Ho upvoted questo come ha risolto il mio problema immediato, e mi ha portato a questa documentazione node.js . Ma penso che questa non sia una risposta generale, poiché la documentazione indica strategie alternative per individuare i moduli.
Graham Klyne,

6

Ho riscontrato questo errore ieri. Mi ci è voluto un po 'per capire che la mainvoce package.jsonstava puntando a un file che avevo spostato. Una volta ho aggiornato che l'errore è scomparso e il pacchetto ha funzionato.


2
Santa mucca ... per disperazione ho digitato "Errore: impossibile trovare il modulo" in google e ho trovato questa domanda. La tua risposta ha risolto il mio problema. Non riesco a credere che un termine di ricerca così vago abbia dato la risposta giusta. Complimenti a te e a Google!
Jamon Holmgren,

1
Molto questo Sono riuscito a puntare la mainvoce per il mio sottomodulo in una directory che è stata esclusa dal suo repository, quindi quando ho cercato di includerlo tramite npm installesso ha funzionato, ma non sono state trovate esportazioni quando richiesto in! Mille grazie per questa ovvia ma utile risposta.
Dragos,

Grazie per questo. Ho avuto questa situazione durante l'utilizzo delle aree di lavoro di Yarn, quindi cercavo dappertutto algoritmi di risoluzione del percorso e ogni sorta. :) Sono stato gettato dal modo in cui il messaggio di errore parla di "localizzare" il modulo, e anche che ESLint stava dando simili messaggi di errore. E poi ho visto la tua risposta e ho capito che ero un cretino. Grazie!
Mark Birbeck,

5

Rimuovere la node_modulecartella principale dal progetto (ad es myApp.:). Vai alla myAppcartella e quindi digita sotto il comando dal terminale

>myApp>npm install

Installerà tutti i moduli di dipendenza richiesti per il tuo progetto.


Potresti per favore elaborare di più la tua risposta aggiungendo un po 'più di descrizione sulla soluzione che offri?
Abarisone,

5

Questo errore può essere riscontrato se si sta requireeseguendo un modulo che ha un maincampo mancante o errato nel suo package.json. Sebbene il modulo stesso sia installato, npm / node deve utilizzare un singolo file .js come punto di accesso al modulo. Se il maincampo non è presente, per impostazione predefinita cerca index.jsnella cartella del modulo. Se il file principale del tuo modulo non si chiama index.js, non sarà in grado di farlorequire farlo.

Scoperto durante la trasformazione di un browserifymodulo basato su un requiremodulo CommonJS; browserifynon importava il maincampo mancante , quindi l'errore era passato inosservato.


4

Specificare il percorso della cartella restler, che si troverà nella cartella node_modules come: var rest = require ('./ node_modules / restler');

Questo ha funzionato per me.


3

Se si utilizza dattiloscritto e si riceve un errore dopo l'installazione di tutti i moduli del nodo, rimuovere package-lock.json. E poi corri npm install.


2

SUGGERIMENTO PRO:

Questo errore mi è successo mentre combattevo affaticamento e malattia lieve, perché ho digitato node blahinvece dinpm blah .

Il messaggio di errore ricevuto non era abbastanza arrabbiato da avvisarmi della mia follia!


2

Ho riscontrato lo stesso problema quando qualcun altro nel team si è aggiornato package.jsonin SVN. La semplice rimozione della node_modulesdirectory non ha aiutato. Come ho risolto il problema è:

rm -rf node_modules
rm package.json
rm package-lock.json
svn up
npm install
ng build --env=prod

Spero che questo aiuti qualcuno!


Grazie per il promemoria. Nel mio caso è stato pacchetto-lock.json a rovinare di nuovo le cose, ma dopo averlo eliminato e node_modules, quindi eseguire di nuovo npm installtutto va bene.
TaeKwonJoe,

6
Se rimuovi package.jsoncome fa NPM a sapere cosa installare?
Michał,

1

Posso aggiungere un altro posto da controllare; il pacchetto che stavo cercando di usare era un altro dei miei pacchetti che avevo pubblicato in un repository NPM privato. Avevo dimenticato di configurare correttamente la proprietà 'main' in package.json. Quindi, il pacchetto era lì nella cartella node_modules del pacchetto che consumava, ma stavo ottenendo "Impossibile trovare il modulo". Mi ci sono voluti alcuni minuti per rendermi conto del mio errore. :-(


1

Nel mio caso ho UNMET PEER DEPENDENCY redux@^3.0.0causato questo messaggio di errore, vedere tutti e installare nuovamente i moduli mancanti usando --save

npm install redux --save

1

Rimuovere il nodo / npm e quindi reinstallare la versione stabile (non l'ultima) ha funzionato per me.

sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*}

https://nodejs.org/en/download/

1

In Appsome Solutions abbiamo avuto lo stesso problema con la configurazione del nostro progetto dattiloscritto e aggiunto "moduleResolution": "node",in un tsconfig.json risolto.


0

Stavo cercando di pubblicare il mio pacchetto e quindi includerlo in un altro progetto. Ho avuto quel problema a causa di come ho costruito il primo modulo. Sto usando l'esportazione ES2015 per creare il modulo, ad esempio diciamo che il modulo si presenta così:

export default function(who = 'world'){
    return `Hello ${who}`;
}

Dopo aver compilato con Babele e prima essere stato pubblicato:

'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});

exports.default = function () {
    var who = arguments.length <= 0 || arguments[0] === undefined ? 'world' : arguments[0];


    return 'Hello ' + who;
};

Quindi dopo npm install module-nameun altro progetto (nessuno ES2015) ho dovuto fare

var hello = require('module-name').default;

Per ottenere effettivamente il pacchetto importato.

Spero che aiuti!


0

Si è verificato questo problema durante l'utilizzo webpackcon webpack-dev-middleware.

Aveva trasformato un singolo file in una cartella .

L'osservatore sembrava non vedere la nuova cartella e il modulo mancava.

Risolto riavviando il processo.


0

Ho appena trovato uno scenario insolito che potrebbe essere utile a qualcuno ed è una specie di aringa rossa.

Stavo anche ricevendo l'errore Impossibile trovare il modulo, ma stranamente tutto ha funzionato perfettamente nel mio ambiente Node.js locale (ospitato da Mac). Questo problema è apparso solo quando il codice è stato distribuito sul nostro server Linux.

Bene ... si è rivelato un errore di battitura che (apparentemente) l'installazione di Node.js basata su Mac era perfettamente felice di ignorare.

L'inclusione sembrava così:

var S3Uploader = require('./S3Uploader.class');

Ma il file vero e proprio si chiamava "s3Uploader.class.js"

Notare la differenza di maiuscolo tra 's' e 'S' tra il codice e il nome file.

Quindi - nella strana possibilità che nessuna delle altre soluzioni qui risolva il tuo problema, controlla tre volte che non stai inserendo erroneamente i caratteri nel tuo nome file incluso! :)

e DUH!


1
Di default il filesystem osx (HFS +) non fa distinzione tra maiuscole e minuscole ... scoperto non molto tempo fa, è sicuramente configurabile però
giulp

0

Forse come me hai impostato "view engine" in express su un motore che non esiste o hai provato a utilizzare un motore di template non registrato. Assicurati di usare: app.engine('engine name',engine) app.set('view engine','engine name')


0

Installa la nuova CLI v3 (npm install -g ionic @ latest).

Se questo problema persiste nella CLI v3. Grazie!


0

Se il pacchetto è stato installato correttamente, vai alla cartella node_modules, quindi controlla il file e il percorso. Quindi importare. Spero che sia di aiuto.


-3

Prima di tutto, sì, una parte della mia risposta è sicuramente utile per risolvere l' errore pubblicato da OP. In secondo luogo, dopo aver provato il passaggio seguente, ho riscontrato un paio di altri errori e quindi ho scritto anche la soluzione di quelli.

(Psst! Non sono sicuro se ho aiutato con successo a risolvere l'errore sopra, o se ho infranto qualche regola o formato di risposta, ma ho affrontato l'errore sopra e alcuni altri e ho impiegato molto tempo per trovare le soluzioni adeguate per quegli errori. Sto scrivendo la soluzione completa perché, nel caso, se qualcun altro affronta anche questi errori, si spera che ottenga una soluzione qui.)

Quindi aggiungendo ed elaborando la risposta fornita da PrashanthiDevi e aggiungendo anche la mia esperienza personale, eccola qui:

Sono nuovo di tutto e2e e parte dei test unitari. Ho iniziato a esaminare questa parte da Goniometro . Ora avevo già i file in cui erano scritti i test, ma dovevo eseguire i test.

Avevo già installato tutti i software e gli strumenti necessari, ma quando inizialmente ho eseguito il codice per l'esecuzione dei test gulp itest, ho visualizzato l' errore "Impossibile trovare il modulo" . Dopo aver affrontato diverse domande su SO, ho trovato una risposta che pensavo potesse aiutare a ottenere una soluzione.

La persona mi aveva suggerito di eseguire il comando npm installnella cartella del mio progetto.

Il motivo per farlo è stato aggiornare la cartella dei moduli del nodo , all'interno della cartella del nostro progetto, con tutti i file e le dipendenze necessari e necessari.

(La parte sotto potrebbe non essere pertinente con questa domanda, ma potrebbe essere utile se qualcuno si imbattesse nella stessa situazione che ho affrontato.)

Il passaggio precedente ha sicuramente risolto il mio errore precedente, ma ne ha lanciato uno nuovo! Questa volta l'errore èCould not find chromedriver at '..\node_modules\protractor\selenium\chromedriver' .

Tuttavia, la soluzione di questo errore è stata piuttosto sciocca (e divertente) per me. Avevo già il file chromedriver nella mia cartella di selenio . Ma, scopre che l'errore di cui sopra era venuta perché i miei chromedriver file erano dentro il selenio cartella e non all'interno chromedriver cartella. Quindi, creando una cartella chromedriver e copiando i file chromedriver lì ho risolto il mio problema!

Inoltre, per l' errore: Timeout in attesa del server WebDriver , è possibile aggiungere questa riga di codice al file conf.js all'interno exports.config{}:

seleniumAddress: 'http://localhost:8080/'

Spero che sia di aiuto!


-4

Ho ottenuto la soluzione semplice per risolvere questo problema.

Rimuovi C: \ Users \ Nomeutente \ AppData \ Roaming \ npm \

e quindi installare il nodo.

Ora il tuo problema sarà risolto.


Sta usando Unix. Non Windows.
Saif Al Falah,

-4

Esegui solo il comando seguente:

npm install

Installerà tutti i moduli richiesti nella node_modulescartella.


-5
rm -rf node_modules
npm install
npm fund

quel lavoro per me.


-38

Modificare la directory e selezionare la cartella del progetto corrente, quindi "npm install". .

Ciò installerà tutte le dipendenze e i moduli nella cartella del progetto.


2
questa risposta non sembra essere sbagliata, ritengo che il voto negativo sia il risultato di alcuni preconcetti e del sostegno a commenti sarcastici.
Muqsith,

2
che molti downvotes sono un po 'troppo. Non è del tutto vago. Si riferisce alla risposta accettata. Tutta la risposta dice è fare npm installnella directory corretta. Non c'è nulla di così negativo al riguardo
shinobi il
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.