Nodejs tidak dapat menemukan modul yang diinstal pada Windows

240

Saya sedang belajar nodejs saat ini di Windows. Beberapa modul diinstal secara global dengan npm.cmd, dan nodejs gagal menemukan modul yang diinstal. Ambil batu giok misalnya,

npm install jade -g

Jade diinstal di direktori "C:\Program Files (x86)\nodejs\node_modules", tetapi kode berikut akan gagal dengan "Cannot find module 'jade'"kesalahan,

var jade = require('jade');

Namun, kode akan berjalan dengan sukses ketika jade diinstal secara lokal (tanpa opsi -g di npm). Saya tidak ingin menggunakan modul yang diinstal secara lokal, itu buang-buang ruang disk untuk saya. Bagaimana saya bisa membuat modul yang diinstal secara global berfungsi pada Windows?

Cosmore
sumber
3
@ AmolMKulkarni: tidak yakin bagaimana itu relevan di sini. Menambahkan '.js' ke kebutuhan tidak menyelesaikan masalah pada Windows.
Dan Dascalescu
1
@DanDascalescu: Saya pikir Anda salah paham jawabannya. Kode yang diberikan dalam jawaban itu adalah kode Node.js, yang menunjukkan tampilannya untuk paket yang Anda butuhkan. Jadi, jika Anda memahami di mana dan bagaimana mencari file, Anda dapat menyelesaikan masalah Anda dengan lebih mudah.
Amol M Kulkarni
Menurut stackoverflow.com/questions/5817874/... npm install selamanya -g
Sharif Yazdian

Jawaban:

349

Tambahkan variabel lingkungan yang dipanggil NODE_PATHdan atur ke %USERPROFILE%\Application Data\npm\node_modules(Windows XP), %AppData%\npm\node_modules(Windows 7/8/10), atau di mana saja npm akhirnya menginstal modul pada citarasa Windows Anda. Untuk menyelesaikannya sekali dan untuk semua, tambahkan ini sebagai variabel Sistem di tab Lanjut dari dialog Properti Sistem (jalankan control.exe sysdm.cpl,System,3).

Solusi cepat di Windows 7+ adalah menjalankan:

rem for future
setx NODE_PATH %AppData%\npm\node_modules
rem for current session
set NODE_PATH=%AppData%\npm\node_modules

Perlu disebutkan bahwa NODE_PATHhanya digunakan ketika mengimpor modul di aplikasi Node. Ketika Anda ingin menggunakan binari modul yang terinstal secara global di CLI Anda, Anda perlu menambahkannya juga ke binari Anda PATH, tetapi tanpa node_modulesbagian (misalnya %AppData%\npmdi Windows 7/8/10).


Cerita lama

Saya cukup baru untuk node.js sendiri sehingga saya tidak sepenuhnya benar tetapi dari pengalaman saya ini bekerja seperti ini:

  1. -g bukan cara untuk menginstal pustaka global, ini hanya cara untuk menempatkannya di jalur sistem sehingga Anda dapat memanggilnya dari baris perintah tanpa menuliskan path lengkap ke pustaka tersebut. Ini berguna, misalnya, maka aplikasi simpul mengkonversi file lokal, seperti kurang - jika Anda menginstalnya secara global Anda dapat menggunakannya di direktori mana pun.
  2. node.js sendiri tidak melihat dir global npm, ia menggunakan algoritma lain untuk menemukan file yang diperlukan: http://nodejs.org/api/modules.html#modules_file_modules (pada dasarnya pemindaian setiap folder di jalur, mulai dari folder saat ini untuk node_modules dan memeriksanya).

Lihat pertanyaan serupa untuk detail lebih lanjut: Bagaimana cara saya menginstal modul secara global menggunakan npm?

Alexey Ivanov
sumber
17
Terima kasih banyak, tautan yang Anda berikan sangat membantu, saya jauh lebih jelas sekarang, meskipun algoritma pencarian modul terlihat sedikit rumit. Akhirnya saya menggunakan variabel lingkungan NODE_PATH untuk referensi jalur modul global set NODE_PATH=C:\Documents and Settings\DevUser\Application Data\npm\node_modules,, dan berfungsi seperti yang diharapkan. Aneh bahwa modul yang dipasang secara global diposisikan di '% USERPROFILE% \ Data Aplikasi \ npm \ node_modules' di Windows, sementara itu, tidak ada tanda kutip di NODE_PATH.
Cosmore
2
Senang untuk membantu. Tidak mengubah NODE_PATH memutus jalur ke modul node.js standar, seperti FS?
Alexey Ivanov
2
Bahkan saya bertanya-tanya mengapa saya C:\Program Files\nodejs\node_modules\npm\node_modulestidak memiliki modul yang baru saja saya instal menggunakan npm install -g expressdan itu tersedia diC:\Documents and Settings\swapnil\Application Data\npm\node_modules
Swapnil Mhaske
1
di Windows 8 jalannya adalah%USERPROFILE%\AppData\Roaming\npm\node_modules
Yar
9
Jika Anda ingin mengetahui di mana direktori global node_modules Anda, jalankan perintah npm list -g. Baris pertama dari output akan menjadi induk dari direktori global node_modules - dengan kata lain, direktori global node_modules adalah {output}\node_modules. Ia juga mencetak direktori instal ketika Anda menjalankannpm install --global {xyz}
cowlinator
34

jika Anda berada di platform windows7 mungkin Anda harus mengubah NODE_PATH seperti ini: %AppData%\npm\node_modules

Mendongkrak
sumber
7
ada di appdata \ roaming di windows 8 juga
JonnyRaa
6
Saya berada di windows 8.1 dengan npm 2.5.1, dan NODE_PATH saya ditetapkan sebagai didokumentasikan, tetapi masih tidak dapat menemukan paket yang diinstal. Pikiran?
JaKXz
5
Di windows 10 seharusnya hanya% AppData% \ npm
gkiely
Dalam kasus saya (W10), itu adalah% AppData% \ Roaming \ npm
Hinrich
32

Saya tahu saya dapat membangunkan zombie tetapi saya pikir ini masih menjadi masalah, jika Anda memerlukan akses global ke modul node pada Windows 7 Anda perlu menambahkan ini ke jalur variabel global Anda:

C:\Users\{USER}\AppData\Roaming\npm

Penting: hanya ini tanpa node_modulesbagian, butuh waktu setengah jam untuk melihat ini.

Vitaliy Terziev
sumber
4
Atau, untuk pengguna Windows 8% USERPROFILE% \ AppData \ Roaming \ npm
Benson
4
Terima kasih atas saran untuk menghapus node_modulesbagian itu, juga berjuang dengan ini!
danguilherme
20

Untuk membuatnya bekerja di windows 10 saya menyelesaikannya dengan menambahkan folder %USERPROFILE%\AppData\Roaming\npmke PATH saya. Setelah \node_modulesditambahkan seperti ini: %USERPROFILE%\AppData\Roaming\npm\node_modules\tidak berhasil untuk saya.

Andi-lo
sumber
7
Atau, lebih sederhana lagi, `% AppData% \ npm`
Dan Diplo
Sungguh aneh itu berhasil! Saya sudah berburu masalah ini selama dua hari, secara harfiah. Ini adalah solusi yang paling tidak jelas yang pernah saya coba dan yang pertama berhasil. Terima kasih banyak.
Will
ya cukup tambahkan ke pathvariabel lingkungan, maka kita dapat menjalankannya langsung di windows 10
Zhu Xiaohu
1
Itu akan menunjukkan bagaimana sebenarnya melakukan ini dengan sebuah contoh, alih-alih mengatakan hal-hal seperti "tambahkan saja ..."
Gabe Hiemstra
14

Saya hanya akan mengutip dari posting blog simpul ini ...

Secara umum, aturan praktisnya adalah:

  • Jika Anda menginstal sesuatu yang ingin Anda gunakan dalam program Anda, menggunakan memerlukan ('apa pun'), kemudian instal secara lokal, di root proyek Anda.
  • Jika Anda menginstal sesuatu yang ingin Anda gunakan di shell Anda, pada baris perintah atau sesuatu, instal secara global, sehingga binernya berakhir di variabel lingkungan PATH Anda.

...

Tentu saja, ada beberapa kasus di mana Anda ingin melakukan keduanya. Coffee-script dan Express keduanya adalah contoh aplikasi yang baik yang memiliki antarmuka baris perintah, serta perpustakaan. Dalam kasus tersebut, Anda dapat melakukan salah satu dari yang berikut:

  1. Pasang di kedua tempat. Serius, apakah Anda kekurangan ruang disk? Tidak apa-apa, sungguh. Itu adalah program JavaScript kecil.
  2. Instal secara global, dan kemudian npm link coffee-script atau npm link express (jika Anda menggunakan platform yang mendukung tautan simbolik). Maka Anda hanya perlu memperbarui salinan global untuk memperbarui semua symlink juga.
marko
sumber
10
They’re tiny JavaScript programs.Beberapa perpustakaan ini tentu tidak kecil!
UpTheCreek
1
@UpTheCreek Saya yakin dia mengacu pada ukuran ruang lingkup disk. Itu adalah file teks. Mereka obyektif kecil.
Phillip Copley
12

Untuk membuatnya singkat, gunakan npm link jadedi direktori aplikasi Anda.

Sơn Trần-Nguyễn
sumber
4
Tampaknya npm link jadetidak dapat berfungsi pada Windows, npm mengembalikan pesan kesalahan sebagai berikut:npm ERR! Error: npm link not supported on windows
Cosmore
1
Sekarang, untuk versi v0.8.9
Gianfranco P.
@beyonddoor: Anda harus menjalankan npm linkdari jendela perintah Administrator.
Mrchief
12

Mencoba menambahkan / mengedit variabel lingkungan dan menyimpulkan bahwa:

  1. Edit / tambahkan User variables(dari kotak atas) bukan System variables(dari bagian bawah); jika tidak, Anda harus "menjalankan sebagai administrator" untuk membuatnya bekerja.
  2. Tambahkan ;%AppData%\npmuntuk Pathmenggunakannya sebagai alat baris perintah (jika didukung, suka jshintdan grunt-cli).
  3. Buat NODE_PATHdan atur %AppData%\npm\node_modulesagar require('<pkg_name>')dalam skrip tanpa menginstalnya di direktori proyek. (Tetapi npm linkdisarankan untuk persyaratan ini jika Anda bekerja pada OS dengan mklinkseperti Vista dan yang lebih baru.)

Lingkungan uji:

  • Menangkan 7 (Ent., 64-bit, SP1), Node.js 4.2.4, npm 2.14.12
  • Menangkan 8.1 (Ent., 64-bit), Node.js 0.10.30, npm 1.4.21
Kong Kao
sumber
9

Saya mengalami kesulitan dalam membuat modul global bekerja. Akhirnya, saya secara eksplisit ditambahkan C:\Users\yourusername\AppData\Roaming\npmke variabel PATH di bawah Variabel Sistem. Saya juga perlu memiliki variabel ini sebelum variabel path nodejs dalam daftar.

Saya menjalankan Windows 10.

John Galt
sumber
ini adalah satu-satunya hal yang berhasil untuk saya. berjalan di windows 8
charlie carver
1
Ini adalah satu-satunya hal yang berhasil untuk saya juga, terima kasih!
devqon
6

Saya mengalami masalah ini pada Windows 7, berjalan

npm install -g gulp

sebagai administrator saat sedang masuk sebagai pengguna normal.

Solusi: Saat menjalankan instalasi yang sama dengan pengguna normal (tidak "dijalankan sebagai admin" untuk cmd) semuanya baik-baik saja. Saya kira itu terkait dengan instalasi default dan jalur pencarian.

SCBuergel.eth
sumber
1
Untuk memperjelas hal ini sedikit lebih ... Ketika Node diinstal sebagai administrator itu memperbarui jalur sistem untuk menyertakan referensi ke folder modul node global administrator. Ketika pengguna baru menginstal sesuatu secara global itu menginstal ke folder modul simpul yang berbeda. Setiap pengguna selain pengguna yang menginstal Node perlu memperbarui jalur mereka untuk menyertakan folder modul simpul global mereka. Jika Anda menginstal dan menggunakan node pada akun yang sama ini tidak akan diperlukan.
dpsthree
Windows 8.1 pro dengan nodejs v6.9.4, untuk mengatur lintasan: C: \ Program Files \ nodejs \ nodevars.bat
Robot70
4

Dari expierience saya dengan win8.1 npm menginstal modul C:\Users\[UserName]\AppData\Roaming\npm\node_modules tetapi mencari mereka C:\Users\[UserName]\node_modules.

Satu modul referensi solusi sederhana dalam aplikasi dengan jalur lengkap:

var jsonminify = require("C:/Users/Saulius/AppData/Roaming/npm/node_modules/jsonminify");
Saulius
sumber
4

Untuk windows, semua orang mengatakan Anda harus mengatur variabel lingkungan untuk modul nodejs dan npm, tetapi apakah Anda tahu mengapa? Untuk beberapa modul, mereka memiliki alat baris perintah, setelah menginstal modul, ada file [modul] .cmd di C: \ Program Files \ nodejs , dan digunakan untuk peluncuran di jendela perintah. Jadi jika Anda tidak menambahkan jalur yang berisi file cmd ke variabel lingkungan % PATH% , Anda tidak akan meluncurkannya dengan sukses melalui jendela perintah.

Kiki.J.Hu
sumber
2

Saya memiliki masalah yang sama, mencoba menginstal bower dengan npm install -g bower

Saya pikir ini karena node diinstal oleh pengguna lain , bukan saya.

Saya menghapus simpul, dan kemudian saya menginstalnya kembali. Selama instalasi, saya melihat teks ini untuk opsi Tambahkan ke PATH> modul npm :

Pesan dalam instalasi simpul

masukkan deskripsi gambar di sini

Setelah instalasi node, saya dieksekusi npm install -g bowerlagi. Dan sekarang bower bekerja.

Tentu tidak perlu menginstal ulang simpul dengan pengguna sendiri, seperti saya. Solusi harus melalui variabel NODE_PATH atau PATH , seperti yang dijelaskan oleh pengguna lain.

Ini hanya untuk menyatakan bahwa masalah ini terjadi hanya jika node telah diinstal oleh pengguna lain (atau jika selama instalasi opsi Tambahkan ke PATH> modul npm belum ditandai).

Gregorio
sumber
2

Bagi saya bekerja di Windows 10 npm config set prefix %AppData%\npm\node_modules

Bojan Mitic
sumber
1

Atau Anda dapat menambahkan awalan yang~/.npmrc benar . Saya mendapat 64 Win7.C:\Program Files\nodejs

dmi3y
sumber
1

Saya tersandung pada pertanyaan ini karena saya ingin menggunakan node.js dengan visual studio 2015 di komputer baru saya dengan windows 10. Saya menggunakan node.js pada windows 7 dan 8 dan 8.1 Tidak pernah ada masalah node.js menemukan modul. Saya menggunakan legacy node.js 0.10.39 karena saya harus menggunakan versi ini karena modul serial dan RFXCOM.

Jawaban untuk windows 10 adalah untuk mengatur NODE_PATH dalam variabel lingkungan dengan C: \ Users \ User \ node_modules.

Wetlip
sumber
1
Eh, tidak. (Windows 10 di sini ..) Saya melihat beberapa modul di C:\Users\User\node_modules Saya melihat beberapa modul di C:\Users\User\AppData\Roaming\npm\node_modules Saya melihat beberapa modul di C:\Users\User\node_modules Juga terletak diC:\Program Files (x86)\nodejs\node_modules\npm\node_modules Tidak yakin bagaimana ini terjadi. Yang mana, dan mengapa mereka melakukannya dengan cara itu?
zipzit
1

Untuk Windows 10, saya harus menginstal gulp di folder:

C: \ Users \ myaccount \ AppData \ Roaming \ npm \ node_modules

npm install gulp

Ini memperbaiki masalah saya "tegukan tidak dikenali"

Situs Web Bizz
sumber
0

Cukup unduh dan instal ulang node dari ini dan ini akan memperbaiki semua masalah jalur.

Jangan lupa untuk me-restart command prompt atau terminal Anda.

Mahendra
sumber
0

Semua jawaban di atas tidak berhasil untuk saya. Satu-satunya hal yang akhirnya berhasil adalah menambahkan% AppData% \ npm ke variabel Path environment, DAN untuk menghapus dua file ng di C: \ Program Files \ nodejs.

Paket ng tidak diinstal di C: \ Program Files \ nodejs \ node_modules, jadi jelas bahwa menggunakan binary ng dari direktori nodejs tidak akan berfungsi.

Saya tidak yakin mengapa itu dicari di direktori ini, karena saya sudah mengkonfigurasi - variabel lingkungan PATH - .npmrc di C: \ Users \ MyUser - Mencoba menambahkan variabel sistem dan / atau NODE_PATH

devqon
sumber
-4

jika Anda menggunakan windows, dibutuhkan beberapa langkah, 1) buat file bernama package.json

 {
  "name": "hello"
, "version": "0.0.1"
, "dependencies": {
    "express": "*"
  }
}

di mana hello adalah nama paket dan * berarti versi terbaru dari ketergantungan Anda

2) kode ke direktori proyek Anda dan jalankan perintah berikut

npm instal

Itu menginstal dependensi

Subbu
sumber
4
Ini tidak menginstalnya secara global (yang ditanyakan oleh pertanyaan). Ini menarik ketergantungan ke dalam aplikasi
bryanmac
Saya sudah mencoba semua yang tercantum di atas untuk mencoba dan meyakinkan instalasi node.js saya untuk mengenali modul yang terinstal secara global, dan TIDAK ada yang berfungsi. Bahkan setelah menghapus dan menginstal ulang node (v8.11.3 LTS), setiap kali saya mencoba mengeluarkan perintah require ("mongodb") dalam skrip node.js, saya mendapatkan kesalahan SAMA: "Tidak dapat menemukan modul mongodb". Namun, jika saya mengeluarkan perintah "npm ll -g mongodb", NPM memberi tahu saya bahwa modul telah diinstal. Dapatkah seseorang tolong berikan saya beberapa informasi yang BEKERJA dengan masalah ini?
David Edwards
UPDATE: Saulius di atas telah memberikan solusi yang benar-benar berfungsi, yaitu menentukan path lengkap ke modul dalam JavaScript memerlukan pernyataan. Tetapi jika pengamatannya menyatakan tentang pencarian node.js di folder yang salah untuk modul yang diinstal sudah benar, dapatkah seseorang memperingatkan pengembang node.js tentang hal ini? Karena masalahnya adalah MASIH mempengaruhi v8.11.3 LTS.
David Edwards