Errore Node.js: impossibile trovare il modulo express


145

Ho scritto la mia prima app node.js, ma non riesco a trovare la libreria express:

C:\ChatServer\Server>node server.js

module.js:340
    throw err;
          ^
Error: Cannot find module 'express'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (C:\ChatServer\Server\server.js:6:9)
    at Object.<anonymous> (C:\ChatServer\Server\server.js:25:4)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)

Ma express è installato (con -gchiave):

C:\ChatServer\Server>npm install -g express
npm http GET https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/connect/2.7.11
npm http GET https://registry.npmjs.org/commander/0.6.1
npm http GET https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/mkdirp/0.3.4
npm http GET https://registry.npmjs.org/cookie/0.1.0
npm http GET https://registry.npmjs.org/buffer-crc32/0.2.1
npm http GET https://registry.npmjs.org/fresh/0.1.0
npm http GET https://registry.npmjs.org/methods/0.0.1
npm http GET https://registry.npmjs.org/send/0.1.0
npm http GET https://registry.npmjs.org/cookie-signature/1.0.1
npm http GET https://registry.npmjs.org/debug
npm http 304 https://registry.npmjs.org/mkdirp/0.3.4
npm http 304 https://registry.npmjs.org/range-parser/0.0.4
npm http 304 https://registry.npmjs.org/cookie/0.1.0
npm http 304 https://registry.npmjs.org/connect/2.7.11
npm http 304 https://registry.npmjs.org/commander/0.6.1
npm WARN package.json range-parser@0.0.4 No repository field.
npm http 304 https://registry.npmjs.org/buffer-crc32/0.2.1
npm http 304 https://registry.npmjs.org/fresh/0.1.0
npm http 304 https://registry.npmjs.org/methods/0.0.1
npm http 304 https://registry.npmjs.org/send/0.1.0
npm http 304 https://registry.npmjs.org/cookie-signature/1.0.1
npm WARN package.json methods@0.0.1 No repository field.
npm WARN package.json methods@0.0.1 No readme data.
npm WARN package.json fresh@0.1.0 No repository field.
npm WARN package.json send@0.1.0 No repository field.
npm WARN package.json cookie-signature@1.0.1 No repository field.
npm http 304 https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/mime/1.2.6
npm http GET https://registry.npmjs.org/qs/0.6.5
npm http GET https://registry.npmjs.org/send/0.1.1
npm http GET https://registry.npmjs.org/formidable/1.0.14
npm http GET https://registry.npmjs.org/cookie/0.0.5
npm http GET https://registry.npmjs.org/bytes/0.2.0
npm http GET https://registry.npmjs.org/pause/0.0.1
npm http 304 https://registry.npmjs.org/mime/1.2.6
npm http 304 https://registry.npmjs.org/bytes/0.2.0
npm WARN package.json bytes@0.2.0 No repository field.
npm http 304 https://registry.npmjs.org/pause/0.0.1
npm WARN package.json pause@0.0.1 No repository field.
npm http 304 https://registry.npmjs.org/formidable/1.0.14
npm http 304 https://registry.npmjs.org/qs/0.6.5
npm http 304 https://registry.npmjs.org/send/0.1.1
npm http 304 https://registry.npmjs.org/cookie/0.0.5
npm http GET https://registry.npmjs.org/mime
npm http 304 https://registry.npmjs.org/mime
C:\Users\Dmitry\AppData\Roaming\npm\express -> C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express\bin\express
npm WARN package.json policyfile@0.0.4 'repositories' (plural) Not supported.
npm WARN package.json Please pick one as the 'repository' field
npm WARN package.json assert-plus@0.1.2 No repository field.
npm WARN package.json ctype@0.5.2 No repository field.
express@3.2.6 C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express
├── methods@0.0.1
├── fresh@0.1.0
├── range-parser@0.0.4
├── cookie-signature@1.0.1
├── buffer-crc32@0.2.1
├── cookie@0.1.0
├── debug@0.7.2
├── commander@0.6.1
├── mkdirp@0.3.4
├── send@0.1.0 (mime@1.2.6)
└── connect@2.7.11 (pause@0.0.1, qs@0.6.5, bytes@0.2.0, cookie@0.0.5, formidable@1.0.14, send@0.1.1)

Alcune informazioni:

C:\ChatServer\Server>npm --version
1.2.24

C:\ChatServer\Server>node --version
v0.10.9

C:\ChatServer\Server>npm --version
1.2.24

C:\ChatServer\Server>npm ls -g installed express
npm WARN package.json cookie-signature@1.0.1 No repository field.
npm WARN package.json fresh@0.1.0 No repository field.
npm WARN package.json methods@0.0.1 No repository field.
npm WARN package.json range-parser@0.0.4 No repository field.
npm WARN package.json send@0.1.0 No repository field.
npm WARN package.json policyfile@0.0.4 'repositories' (plural) Not supported.
npm WARN package.json Please pick one as the 'repository' field
npm WARN package.json bytes@0.2.0 No repository field.
npm WARN package.json pause@0.0.1 No repository field.
npm WARN package.json assert-plus@0.1.2 No repository field.
npm WARN package.json ctype@0.5.2 No repository field.
C:\Users\Dmitry\AppData\Roaming\npm
└── express@3.2.6


C:\ChatServer\Server>npm ls installed express
C:\ChatServer\Server
└── (empty)

Come posso risolvere questo problema? ( DEVO installarlo senza -g?)




Risposte:


275

È necessario installare Express localmente nel contesto dell'applicazione ( node_modulescartella):

$ npm install express

La ragione di ciò è che le applicazioni cercano sempre dipendenze nel loro contesto locale. L'installazione globale serve solo per impostare file binari disponibili a livello di sistema, come corridori di test unit o bootstrapper o cose del genere.

Con Express, quando lo installi a livello globale, ottieni un file expressbinario che può avviare un'applicazione per te. Per ulteriori informazioni, digitare

$ express --help

Quindi, per rispondere alla tua ultima domanda: , devi installarlo senza -g.


1
Anche questo mi ha aiutato. Avevo winstoninstallato a livello globale, il che ha funzionato per qualche motivo quando ho avviato la mia app come utente normale, ma quando ho avviato la mia app e uno script di inizializzazione del sistema non funzionava. L'ho risolto installando Winston localmente nella directory dell'app (e aggiungendolo a package.json).
trusktr,

3
puoi collegare una dipendenza globale installata via cd alla directory principale del tuo progetto e quindi utilizzare "npm link <nome della dipendenza>"
khoi nguyen,

11
npm install dopo aver creato la tua app. Installerà tutte le dipendenze.

Grazie, questo mi ha davvero aiutato. Andare nella cartella node_modules e quindi installare express ha risolto il mio problema
Megha

@Golo Roden Accodando la tua risposta, ho provato con la tua soluzione, ma sta generando un errore: 'npm ERR! tar.unpack untar error C: \ Users \ VV \ AppData \ Roaming \ npm-cache \ express \ 4.14.0 \ package.tgz npm ERR! Windows_NT 6.3.9600 npm ERR! argv "C: \\ Programmi \\ nodejs \\\\ node.exe" "C: \\ Programmi \\ nodejs \\ node_modules \\ npm \\ bin \\ npm-cli.js" "installa" " express "
VjyV,

20

Per me ha funzionato quando installato express localmente con l'opzione --save come segue:

$ npm install express --save

12

Controlla se non sei un expressmodulo di installazione , usa questo comando:

 npm install express

e se la tua node_modulesdirectory si trova in un altro posto, imposta la NODE_PATHvariabile di ambiente:

 set NODE_PATH=your\directory\to\node_modules;%NODE_PATH%

In Windows 10 dopo l'installazione di npm express, non può essere aggiunto automaticamente al percorso del nodo, è necessario aggiungere manualmente i moduli del nodo.
Jane,

5

Golo ha spiegato bene la soluzione, ma potrei aggiungere un chiarimento: a
volte i moduli di nodo sono installati

/usr/local/lib/node_modules

e quando si avvia il nodo, i moduli blabla.js vengono cercati

/lib

Quindi una soluzione è creare un collegamento simbolico:

sudo ln -s /usr/local/lib/node_modules/ /lib/node_modules

1
modo più semplice -> npm link <module>
Amit G

4

Nel tuo caso il tuo expressmodulo è installato su C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express, ma devi metterlo nella directory del tuo progetto. Così si dovrebbe copiare il file delle expresscartelle dei moduli da C:\Users\Dmitry\AppData\Roaming\npm\node_modules\nella directory di progetto come: C:\ChatServer\Server\node_modules. Se non hai una cartella denominata 'node_modules' nella cartella del tuo progetto, creala prima e incolla quei file in questa cartella. Questo metodo ha funzionato per me sul mio PC Windows. Riavviare il server dei nodi ed eseguire nuovamente il nodo comandi C:\ChatServer\Server>node server.js. Dovrebbe funzionare ora !!!!


Ha funzionato anche su Windows 10!
Victor Michael Kosgei,

3

Sul sistema operativo basato su Ubuntu puoi provare

sudo apt-get install node-express

sta lavorando per me su Mint


3

Dato che hai installato il nodo sul tuo sistema, installa Express localmente per il tuo progetto usando quanto segue per Windows:

npm install express

o

npm install express --save

Potresti dargli accesso globale usando:

npm install -g express --save

2

Ho riscontrato questo errore in vscode, sebbene i moduli fossero installati. Sto usando dattiloscritto ed express. Nei server.tsfile tutte le importazioni avevano sottolineature rosse. Si scopre che avevo un tsconfig.jsonfile difettoso .

{
    "compileOnSave": false,
    "compilerOptions": {
        "module": "commonjs", // Previously this value was `es6`
        "target": "es6",
        "allowSyntheticDefaultImports": true,
        "baseUrl": "public",
        "sourceMap": true,
        "outDir": "dist",
        "jsx": "react",
        "strict": true,
        "preserveConstEnums": true,
        "removeComments": true,
        "noImplicitAny": true,
        "allowJs": true
    },
    "exclude": [
        "node_modules",
        "build"
    ]
}

1

creare una cartella nel disco rigido, ad esempio sample1 e andare al tipo di prompt dei comandi: cd e fornisce il percorso della cartella sample1 e quindi installare tutti i moduli ...

npm install express

npm install jade

npm install socket.io

e quindi qualunque cosa tu stia creando, salva l'applicazione nella cartella sample1

Provalo...


1

vai nella directory dell'applicazione e installa il modulo express usando il comando npm install express sotto - salva quindi elenca tutti i moduli di installazione usando il comando npm ls qui sotto vedrai tutti i moduli di installazione locale.


1

l'installazione di express a livello globale non funzionerà sul progetto locale, quindi è necessario installarlo localmente per l'uso.

npm install express

Spero che questo funzioni

Grazie


0

Ho colpito lo stesso problema. Avevo Express installato globalmente su / usr / local / bin /. Quando eseguo 'npm install', express non è stato creato in node_modules della directory locale.

  1. Controlla se hai il nome del file .npmrc in $ HOME
  2. Se ha "global = true", cambia in "global = false"
  3. Ora fai 'npm install' nella directory dell'applicazione. Più probabilmente, dovresti avere tutti i moduli dipendenti dal pacchetto installati in node_modules (locale) all'interno della directory dell'applicazione.

0
  • nodo di disinstallazione sudo brew
  • aggiornamento della birra
  • aggiornamento birra
  • pulire la birra
  • brew install node
  • sudo chown -R $ (whoami) / usr / local
  • brew link: sovrascrivi il nodo
  • nodo postinstall sudo brew

Questo ha funzionato per me su MacOS X Sierra


0

Non sono orgoglioso di condividere questo, ma nel mio caso ho avuto:

 require('express.handlebars')

 //and the correct form is:
 require('express-handlebars'); //Use dash instead.

0

Ho avuto lo stesso errore seguendo l'esempio di questo libro: "Kubernetes Up & Running".
Vedo molte risposte che suggeriscono di installare express "a mano" ma non sono convinto che sia la soluzione migliore.
Poiché stiamo usando package.json (lo vedo nei registri) e il modo giusto per creare l'app è in esecuzione npm install, ho aggiunto la dipendenza espressa nel file package.json .

 "dependencies": {
    "express": "^4.17.1"
}

Ottengo la versione corrente con npm search express.

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.