Kesalahan Node.js: Tidak dapat menemukan modul express

145

Saya menulis aplikasi node.js pertama saya, tetapi tidak dapat menemukan perpustakaan ekspres:

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)

Tetapi express tertuju (dengan -gkunci):

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)

Beberapa informasi:

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)

Bagaimana saya bisa menyelesaikan masalah ini? ( HARUS saya menginstalnya tanpa -g?)

Dmitry
sumber
2
kemungkinan duplikat dari NodeJS - Tidak dapat mengimpor modul global
Evan Carroll
1
Kemungkinan rangkap dari node.js, Galat: Tidak dapat menemukan modul 'express'
Thusila Bandara

Jawaban:

275

Anda perlu menginstal Express secara lokal ke dalam konteks aplikasi ( node_modulesfolder) Anda:

$ npm install express

Alasannya adalah aplikasi selalu mencari dalam konteks lokal mereka untuk setiap dependensi. Instalasi global hanya untuk mengatur binari yang tersedia di seluruh sistem, seperti unit test runner atau bootstrappers atau hal-hal seperti itu.

Dengan Express, saat Anda menginstalnya secara global, Anda mendapatkan expressbiner yang dapat mem-bootstrap aplikasi untuk Anda. Untuk informasi lebih lanjut, ketikkan

$ express --help

Jadi, untuk menjawab pertanyaan terakhir Anda: YA , Anda harus menginstalnya tanpa -g.

Golo Roden
sumber
1
Ini membantu saya juga. Saya telah winstonmenginstal secara global, yang bekerja untuk beberapa alasan ketika memulai aplikasi saya sebagai pengguna normal, tetapi ketika memulai aplikasi saya dan skrip init sistem tidak berfungsi. Saya memperbaikinya dengan menginstal winston secara lokal di direktori aplikasi (dan menambahkannya ke package.json).
trusktr
3
Anda dapat menautkan ketergantungan terinstal global dengan cd ke direktori root proyek Anda dan kemudian menggunakan "npm link <some dependency name>"
khoi nguyen
11
npm instal setelah Anda membuat aplikasi Anda. Ini akan menginstal semua dependensi.
Terima kasih ini sangat membantu. Pergi ke folder node_modules dan daripada menginstal express memecahkan masalah saya
Megha
@ Golo Roden Mengenali jawaban Anda, saya sudah mencoba dengan solusi Anda tetapi ternyata ada kesalahan: '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: \\ Program Files \\ nodejs \\ node.exe" "C: \\ Program Files \\ nodejs \\ node_modules \\ npm \\ bin \\ npm-cli.js" "instal" " express "
VjyV
20

Bagi saya itu berfungsi ketika diinstal mengekspresikan secara lokal dengan opsi --simpan sebagai berikut:

$ npm install express --save
Mustafamg
sumber
12

Periksa apakah Anda tidak menginstal expressmodul, gunakan perintah ini:

 npm install express

dan jika node_modulesdirektori Anda berada di tempat lain, setel NODE_PATHvariabel envirnment:

 set NODE_PATH=your\directory\to\node_modules;%NODE_PATH%
Reza Ebrahimi
sumber
Pada Windows 10 setelah npm install express, ia tidak dapat secara otomatis ditambahkan ke jalur simpul, Anda perlu menambahkan modul simpul secara manual.
Jane
5

Golo telah menjelaskan dengan baik solusinya, tapi saya mungkin menambahkan klarifikasi:
kadang-kadang modul simpul diinstal

/usr/local/lib/node_modules

dan ketika Anda meluncurkan modul node blabla.js dicari

/lib

Jadi solusinya adalah membuat tautan simbolis:

sudo ln -s /usr/local/lib/node_modules/ /lib/node_modules
Luca Davanzo
sumber
1
cara yang lebih mudah -> tautan npm <module>
Amit G
4

Dalam kasus Anda, expressmodul Anda terpasang di C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express, tetapi Anda harus memasukkan modul ini ke direktori proyek Anda. Jadi, Anda harus menyalin file yang expressfolder modul dari C:\Users\Dmitry\AppData\Roaming\npm\node_modules\direktori proyek Anda sebagai: C:\ChatServer\Server\node_modules. Jika Anda tidak memiliki folder bernama 'node_modules' di folder proyek Anda, maka buat terlebih dahulu dan tempel file-file itu ke folder ini. Metode ini bekerja untuk saya di pc windows saya. Mulai ulang server simpul Anda dan sekali lagi jalankan simpul perintah C:\ChatServer\Server>node server.js. Itu seharusnya bekerja sekarang !!!!

Rahul Gupta
sumber
Bekerja di windows 10 juga!
Victor Michael Kosgei
3

Pada OS berbasis Ubuntu Anda dapat mencoba

sudo apt-get install node-express

ini bekerja untuk saya di Mint

Nickolay Savchenko
sumber
3

Mengingat Anda telah menginstal simpul pada sistem Anda, instal Express secara lokal untuk proyek Anda menggunakan yang berikut untuk Windows:

npm install express

atau

npm install express --save

Anda mungkin memberinya akses global dengan menggunakan:

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

Saya punya kesalahan ini dalam vscode, meskipun modul tempat diinstal. Saya menggunakan naskah dan express. Dalam server.tsfile semua impor memiliki garis bawah berlekuk merah. Ternyata saya punya tsconfig.jsonfile yang salah .

{
    "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
sumber
1

buat satu folder di harddisk Anda misalnya sample1 dan pergi ke command prompt ketik: cd dan berikan path folder sample1 dan kemudian instal semua modul ...

npm instal express

npm instal jade

npm pasang socket.io

dan kemudian apa pun yang Anda buat simpan aplikasi dalam folder sample1

Cobalah...

Dev
sumber
1

buka direktori aplikasi Anda dan instal modul express menggunakan perintah di bawah ini dan instal express --save kemudian daftar semua menginstal modul menggunakan perintah di bawah ls NPM Anda akan melihat semua lokal menginstal modul tersebut.

Anayatullah Khan
sumber
1

menginstal express secara global tidak akan berfungsi pada proyek lokal Anda sehingga Anda harus menginstalnya secara lokal untuk digunakan.

npm install express

Semoga ini berhasil

Terima kasih

MD SHAYON
sumber
0

Saya mengalami masalah yang sama. Saya telah menginstal secara global di / usr / local / bin /. Ketika saya melakukan 'npm install', express tidak dibuat di node_modules pada direktori lokal.

  1. Periksa apakah Anda memiliki nama file .npmrc di $ HOME Anda
  2. Jika memiliki 'global = benar', ubah ke 'global = salah'
  3. Sekarang lakukan 'npm install' di direktori aplikasi. Kemungkinan besar, Anda harus menginstal semua modul yang tergantung pada paket di node_modules (lokal) dalam direktori aplikasi.
pengguna2512153
sumber
0
  • sudo brew uninstall node
  • pembaruan minuman
  • upgrade minuman
  • brew cleanup
  • buat simpul instalasi
  • sudo chown -R $ (whoami) / usr / local
  • brew link --overwrite node
  • sudo membuat simpul postinstall

Ini bekerja untuk saya di MacOS X Sierra

Durul Dalkanat
sumber
0

Saya tidak bangga membagikan ini, tetapi dalam kasus saya, saya memiliki:

 require('express.handlebars')

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

Saya memiliki kesalahan yang sama dengan mengikuti contoh di buku ini: "Kubernetes Up & Running".
Saya melihat banyak jawaban menyarankan untuk menginstal express "dengan tangan" tapi saya tidak yakin adalah solusi terbaik.
Karena kita menggunakan package.json (saya bisa melihatnya di log) dan cara yang tepat untuk membangun aplikasi sedang berjalan npm install, saya menambahkan dependensi ekspres dalam file package.json .

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

Saya mendapatkan versi saat ini dengan npm search express.

Alex 75
sumber