Erreur Node.js: impossible de trouver le module express

145

J'ai écrit ma première application node.js, mais elle ne trouve pas de bibliothèque 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)

Mais express est installé (avec -gclé):

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)

Des informations:

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)

Comment puis-je résoudre ce problème? ( Dois- je l'installer sans -g?)

Dmitry
la source
2
duplication possible de NodeJS - Impossible d'importer les modules globaux
Evan Carroll
1
Copie
Thusila Bandara

Réponses:

275

Vous devez installer Express localement dans le contexte de votre application ( node_modulesdossier):

$ npm install express

La raison en est que les applications recherchent toujours dans leur contexte local toutes les dépendances. L'installation globale sert uniquement à configurer les binaires disponibles à l'échelle du système, tels que les exécuteurs de tests unitaires ou les bootstrappers ou des choses comme ça.

Avec Express, lorsque vous l'installez globalement, vous obtenez un expressbinaire qui peut démarrer une application pour vous. Pour plus d'informations, saisissez

$ express --help

Donc, pour répondre à votre dernière question: OUI , vous devez l'installer sans -g.

Golo Roden
la source
1
Cela m'a aidé aussi. J'avais winstoninstallé globalement, ce qui fonctionnait pour une raison quelconque lors du démarrage de mon application en tant qu'utilisateur normal, mais lors du démarrage de mon application et d'un script d'initialisation système, cela ne fonctionnait pas. Je l'ai corrigé en installant winston localement dans le répertoire de l'application (et en l'ajoutant à package.json).
trusktr
3
vous pouvez lier une dépendance globale installée par cd au répertoire racine de votre projet, puis utiliser "lien npm <un nom de dépendance>"
khoi nguyen
11
npm install après avoir créé votre application. Il installera toutes les dépendances.
Merci cela a vraiment aidé. Aller dans le dossier node_modules et installer express a résolu mon problème
Megha
@Golo Roden Accodant votre réponse, j'ai essayé avec votre solution mais c'est une erreur de lancement: 'npm ERR! Erreur de décompression tar.unpack C: \ Users \ VV \ AppData \ Roaming \ npm-cache \ express \ 4.14.0 \ package.tgz npm ERR! Windows_NT 6.3.9600 npm ERR! argv "C: \\ Program Files \\ nodejs \\\\ node.exe" "C: \\ Program Files \\ nodejs \\ node_modules \\ npm \\ bin \\ npm-cli.js" "install" " express "
VjyV
20

Pour moi, cela a fonctionné lorsqu'il est installé express localement avec l'option --save comme suit:

$ npm install express --save
Mustafamg
la source
12

Vérifiez si vous n'installez pas le expressmodule, utilisez cette commande:

 npm install express

et si votre node_modulesrépertoire est à un autre endroit, définissez la NODE_PATHvariable d'environnement:

 set NODE_PATH=your\directory\to\node_modules;%NODE_PATH%
Reza Ebrahimi
la source
Dans Windows 10 après l'installation express de npm, il ne peut pas être ajouté automatiquement au chemin du nœud, vous devez y ajouter manuellement les modules de nœud.
Jane
5

Golo a bien expliqué la solution, mais je pourrais ajouter une précision:
parfois des modules de nœuds sont installés dans

/usr/local/lib/node_modules

et lorsque vous lancez le nœud, les modules blabla.js sont recherchés dans

/lib

Une solution est donc de créer un lien symbolique:

sudo ln -s /usr/local/lib/node_modules/ /lib/node_modules
Luca Davanzo
la source
1
moyen plus facile -> lien npm <module>
Amit G
4

Dans votre cas, votre expressmodule est installé sur C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express, mais vous devez obtenir ce module dans le répertoire de votre projet. Donc , vous devez copier le fichier des expressdossiers du module de C:\Users\Dmitry\AppData\Roaming\npm\node_modules\répertoire de votre projet: C:\ChatServer\Server\node_modules. Si vous n'avez pas de dossier nommé 'node_modules' dans votre dossier de projet, créez-le d'abord et collez ces fichiers dans ce dossier. Cette méthode a fonctionné pour moi sur mon PC Windows. Redémarrez votre serveur de nœuds et exécutez à nouveau le nœud de commande C:\ChatServer\Server>node server.js. Cela devrait fonctionner maintenant !!!!

Rahul Gupta
la source
A travaillé aussi sur Windows 10!
Victor Michael Kosgei
3

Sur le système d'exploitation basé sur Ubuntu, vous pouvez essayer

sudo apt-get install node-express

ça marche pour moi sur Mint

Nickolay Savchenko
la source
3

Étant donné que vous avez installé le nœud sur votre système, installez Express localement pour votre projet en utilisant les éléments suivants pour Windows:

npm install express

ou

npm install express --save

Vous pouvez lui donner un accès global en utilisant:

npm install -g express --save
Krishna Ganeriwal
la source
2

J'ai eu cette erreur dans vscode, bien que les modules aient été installés. J'utilise dactylographié et express. Dans les server.tsfichiers, toutes les importations avaient des soulignements ondulés rouges. Il s'avère que j'avais un tsconfig.jsonfichier défectueux .

{
    "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
la source
1

créez un dossier sur votre disque dur, par exemple sample1 et accédez au type d'invite de commande: cd et donne le chemin du dossier sample1, puis installez tous les modules ...

npm installer express

npm installer jade

npm installer socket.io

puis tout ce que vous créez, enregistrez l'application dans le dossier sample1

essayez-le ...

Dev
la source
1

allez dans le répertoire de votre application et installez le module express en utilisant la commande ci-dessous npm install express --save puis listez tous les modules d'installation en utilisant la commande ci-dessous npm ls, vous verrez tous les modules installés localement.

Anayatullah Khan
la source
1

l'installation d'express globalement ne fonctionnera pas sur votre projet local, vous devez donc l'installer localement pour l'utiliser.

npm install express

J'espère que cela fonctionnera

Je vous remercie

MD SHAYON
la source
0

J'ai rencontré le même problème. J'avais installé express globalement dans / usr / local / bin /. Quand je fais 'npm install', express n'a pas été créé dans node_modules du répertoire local.

  1. Vérifiez si vous avez le nom de fichier .npmrc dans votre $ HOME
  2. S'il a 'global = true', changez en 'global = false'
  3. Maintenant, faites «npm install» dans le répertoire de l'application. Plus probablement, vous devriez installer tous les modules dépendants du package dans node_modules (local) dans le répertoire de l'application.
user2512153
la source
0
  • noeud de désinstallation sudo brew
  • mise à jour de la bière
  • mise à niveau de la bière
  • nettoyage de l'infusion
  • noeud d'installation de brassage
  • sudo chown -R $ (whoami) / usr / local
  • lien de brassage - nœud d'écrasement
  • nœud de post-installation sudo brew

Cela a fonctionné pour moi sur MacOS X Sierra

Durul Dalkanat
la source
0

Je ne suis pas fier de partager cela, mais dans mon cas, j'avais:

 require('express.handlebars')

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

J'ai eu la même erreur en suivant l'exemple de ce livre: "Kubernetes Up & Running".
Je vois de nombreuses réponses suggérant d'installer express "à la main" mais je ne suis pas convaincu que ce soit la meilleure solution.
Parce que nous utilisons package.json (je peux le voir dans les journaux) et que la bonne façon de créer l'application est en cours d'exécution npm install, j'ai ajouté la dépendance express dans le fichier package.json .

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

J'obtiens la version actuelle avec npm search express.

Alex 75
la source