Node.js Fehler: Modul Express kann nicht gefunden werden

145

Ich habe meine erste node.js-App geschrieben, aber sie kann keine Express-Bibliothek finden:

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)

Aber Express ist installiert (mit -gSchlüssel):

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)

Einige Informationen:

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)

Wie kann ich dieses Problem lösen? ( MUSS ich es ohne installieren -g?)

Dmitry
quelle

Antworten:

275

Sie müssen Express lokal im Kontext Ihrer Anwendung ( node_modulesOrdner) installieren :

$ npm install express

Der Grund dafür ist, dass Anwendungen immer in ihrem lokalen Kontext nach Abhängigkeiten suchen. Die globale Installation dient nur zum Einrichten systemweit verfügbarer Binärdateien, z. B. Unit-Test-Runner oder Bootstrapper oder ähnliches.

Bei der globalen Installation von Express erhalten Sie eine expressBinärdatei, mit der eine Anwendung für Sie gebootet werden kann. Geben Sie für weitere Informationen Folgendes ein

$ express --help

Um Ihre letzte Frage zu beantworten: JA , Sie müssen es ohne installieren -g.

Golo Roden
quelle
1
Das hat mir auch geholfen. Ich hatte winstonglobal installiert, was aus irgendeinem Grund beim Starten meiner App als normaler Benutzer funktionierte, aber beim Starten meiner App und eines Systeminitiierungsskripts funktionierte es nicht. Ich habe es behoben, indem ich Winston lokal im App-Verzeichnis installiert habe (und es zu package.json hinzugefügt habe).
Trusktr
3
Sie können eine global installierte Abhängigkeit per CD mit Ihrem Projektstammverzeichnis verknüpfen und dann "npm link <Name einer Abhängigkeit>" verwenden
khoi nguyen
11
npm installieren, nachdem Sie Ihre App erstellt haben. Es werden alle Abhängigkeiten installiert.
Danke, das hat wirklich geholfen. In den Ordner node_modules zu gehen und dann Express zu installieren, löste mein Problem
Megha
@Golo Roden Nach Ihrer Antwort habe ich es mit Ihrer Lösung versucht, aber es wird ein Fehler ausgegeben: 'npm ERR! tar.unpack bis Fehler C: \ Benutzer \ VV \ AppData \ Roaming \ npm-cache \ express \ 4.14.0 \ package.tgz npm ERR! Windows_NT 6.3.9600 npm ERR! argv "C: \\ Programme \\ nodejs \\\\ node.exe" "C: \\ Programme \\ nodejs \\ node_modules \\ npm \\ bin \\ npm-cli.js" "install" " express "
VjyV
20

Bei mir funktionierte es bei lokaler Installation von Express mit der Option --save wie folgt:

$ npm install express --save
Mustafamg
quelle
12

Überprüfen Sie expressmit diesem Befehl, ob Sie kein Installationsmodul sind :

 npm install express

und wenn sich Ihr node_modulesVerzeichnis an einem anderen Ort befindet, setzen Sie die NODE_PATHUmgebungsvariable:

 set NODE_PATH=your\directory\to\node_modules;%NODE_PATH%
Reza Ebrahimi
quelle
In Windows 10 kann npm nach der Installation von npm nicht automatisch zum Knotenpfad hinzugefügt werden. Sie müssen die Knotenmodule manuell hinzufügen.
Jane
5

Golo hat die Lösung gut erklärt, aber ich möchte eine Klarstellung hinzufügen:
Manchmal sind Knotenmodule in installiert

/usr/local/lib/node_modules

und wenn Sie den Knoten blabla.js starten, werden die Module durchsucht

/lib

Eine Lösung besteht also darin, eine symbolische Verbindung herzustellen:

sudo ln -s /usr/local/lib/node_modules/ /lib/node_modules
Luca Davanzo
quelle
1
einfacher Weg -> npm Link <Modul>
Amit G
4

In Ihrem Fall ist Ihr expressModul unter installiert C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express, aber Sie müssen dieses Modul in Ihr Projektverzeichnis aufnehmen. Sie sollten also die Datei, aus der die expressModulordner stammen, C:\Users\Dmitry\AppData\Roaming\npm\node_modules\in Ihr Projektverzeichnis kopieren : C:\ChatServer\Server\node_modules. Wenn Sie keinen Ordner mit dem Namen 'node_modules' in Ihrem Projektordner haben, erstellen Sie ihn zuerst und fügen Sie diese Dateien in diesen Ordner ein. Diese Methode funktionierte für mich auf meinem Windows-PC. Starten Sie Ihren Knotenserver neu und führen Sie den Befehlsknoten erneut aus C:\ChatServer\Server>node server.js. Es sollte jetzt funktionieren !!!!

Rahul Gupta
quelle
Arbeitete auch unter Windows 10!
Victor Michael Kosgei
3

Unter Ubuntu-basierten Betriebssystemen können Sie es versuchen

sudo apt-get install node-express

Es funktioniert für mich bei Mint

Nickolay Savchenko
quelle
3

Wenn Sie einen Knoten auf Ihrem System installiert haben, installieren Sie Express lokal für Ihr Projekt unter Verwendung der folgenden Optionen für Windows:

npm install express

oder

npm install express --save

Sie können ihm globalen Zugriff gewähren, indem Sie Folgendes verwenden:

npm install -g express --save
Krishna Ganeriwal
quelle
2

Ich hatte diesen Fehler in vscode, obwohl die Module installiert waren. Ich benutze Typoskript und Express. In den server.tsDateien hatten alle Importe rote, schnörkellose Unterstreichungen. Es stellte sich heraus, dass ich eine fehlerhafte tsconfig.jsonDatei hatte.

{
    "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"
    ]
}
Adrian Moisa
quelle
1

Erstellen Sie einen Ordner auf Ihrer Festplatte, z. B. sample1, und gehen Sie zur Eingabeaufforderung Typ: cd. Geben Sie den Pfad des Beispiel1-Ordners an und installieren Sie dann alle Module ...

npm install express

npm Jade installieren

npm install socket.io

und dann, was auch immer Sie erstellen, speichern Sie im Ordner sample1

Versuch es...

Dev
quelle
1

Wechseln Sie in Ihr Anwendungsverzeichnis und installieren Sie das Express-Modul mit dem folgenden Befehl npm install express --save. Listen Sie dann das gesamte Installationsmodul mit dem folgenden Befehl auf. npm ls Sie sehen alle lokal installierten Module.

Anayatullah Khan
quelle
1

Die globale Installation von Express funktioniert in Ihrem lokalen Projekt nicht. Sie müssen es daher lokal installieren, um es verwenden zu können.

npm install express

Hoffe das wird funktionieren

Danke dir

MD SHAYON
quelle
0

Ich habe das gleiche Problem. Ich hatte Express global unter / usr / local / bin / installiert. Wenn ich 'npm install' mache, wurde Express nicht in den Knotenmodulen des lokalen Verzeichnisses erstellt.

  1. Überprüfen Sie, ob Sie den Dateinamen .npmrc in Ihrem $ HOME haben
  2. Wenn es 'global = true' hat, wechseln Sie zu 'global = false'.
  3. Führen Sie nun 'npm install' im Anwendungsverzeichnis durch. Wahrscheinlicher ist, dass Sie alle paketabhängigen Module in node_modules (lokal) im Anwendungsverzeichnis installieren.
user2512153
quelle
0
  • Sudo Brew Deinstallationsknoten
  • Gebräu-Update
  • Gebräu-Upgrade
  • Aufräumen brauen
  • Installationsknoten brauen
  • sudo chown -R $ (whoami) / usr / local
  • Brew Link - Knoten überschreiben
  • Sudo Brew Postinstall-Knoten

Dies funktionierte für mich unter MacOS X Sierra

Durul Dalkanat
quelle
0

Ich bin nicht stolz darauf, dies zu teilen, aber in meinem Fall hatte ich:

 require('express.handlebars')

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

Ich hatte den gleichen Fehler nach dem Beispiel in diesem Buch: "Kubernetes Up & Running".
Ich sehe viele Antworten, die vorschlagen, Express "von Hand" zu installieren , aber ich bin nicht überzeugt, dass dies die beste Lösung ist.
Da wir package.json verwenden (ich kann es in den Protokollen sehen) und die richtige Methode zum Erstellen der App ausgeführt wird npm install, habe ich die Express- Abhängigkeit in die Datei package.json eingefügt .

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

Ich bekomme die aktuelle Version mit npm search express.

Alex 75
quelle