NPM tidak menginstal dependensi modul

151

Ini adalah package.jsonmodul saya untuk yang saya sertakan dalam proyek induk:

{
  "version": "0.0.1",
  "name": "module-name",
  "dependencies": {
    "express": "3.3.4",
    "grunt": "0.4.1",
    "grunt-contrib-compass": "0.4.0",
    "grunt-contrib-copy": "0.4.1",
    "grunt-contrib-cssmin": "0.4.1",
    "grunt-contrib-jshint": "0.6.3",
    "grunt-contrib-requirejs": "0.4.1",
    "grunt-contrib-uglify": "0.2.2",
    "grunt-contrib-watch": "0.5.1",
    "grunt-express-server": "0.4.1",
    "grunt-karma": "0.4.5",
    "grunt-regex-replace": "0.2.5",
    "request": "2.25.0"
  },
  "scripts": {
    "postinstall": "grunt install"
  }
}

Satu hal yang perlu diperhatikan adalah bahwa modul ini terkandung dalam repo pribadi dan saya memasukkannya ke dalam induk package.jsonseperti:"module-name": "git+ssh://git@myserver:user/module-name.git"

Ahmed Nuaman
sumber
Package.json Anda terlihat oke, seperti halnya baris yang Anda gunakan untuk memasukkannya. Apakah Anda mendapatkan pesan kesalahan? Apakah git ada di jalur Anda?
poida
1
Saya tidak mendapatkan kesalahan per sa, modul terpasang tetapi postinstallskrip saya gagal karena gruntpaket lokal tidak ditemukan karena tidak diinstal oleh NPM
Ahmed Nuaman
1
Masalah ini masih ada pada November 2016. Saya telah melakukan instalasi modul kerja yang bersih di komputer baru. @ Mohsen menjawabnya.
Joe Lapp

Jawaban:

152

Sepertinya Anda menekan bug yang sudah ada cukup lama dan belum memiliki solusi. Ada beberapa masalah terbuka untuk kasus ini di repositori npm:

Pada yang pertama orang daftar beberapa solusi yang dapat Anda coba.

Solusi alternatif mungkin (sedikit meretas) untuk secara eksplisit mencantumkan dependensi sebagai tanggungan tingkat pertama. Ini mengharuskan Anda untuk mempertahankan daftar itu tetapi secara praktis hal itu harus dilakukan sangat jarang.

allprog
sumber
1
@ Flame2057 ada baiknya mengetahui Anda kurang beruntung, meskipun tidak terlalu informatif. Anda dapat melanjutkan dan merumuskan pertanyaan, semoga masyarakat memiliki pengetahuan untuk dipecahkan. Selamat bersenang-senang!
allprog
Satu langkah tambahan diperlukan untuk saya. Saya harus mengklik kanan pada "Ketergantungan" dalam proyek saya dan memilih "Kembalikan Paket" setelah melakukan langkah-langkah lain yang disebutkan di sini (hapus node_modules dan package.lock.json, lalu instal npm).
Taersious
113

Saya memiliki masalah yang sangat mirip, menghapus seluruh node_modulesfolder dan menginstal ulang bekerja untuk saya. Pelajari trik ini dari acara IT Crowd !

rm -rf node_modules
npm install
Mohsen
sumber
Ini sebenarnya bekerja untuk saya. Saya pikir itu sangat aneh - apa yang menyebabkan kesalahan itu? Bagaimanapun juga, jika saya menghapus folder dan menjalankan ulang instalasi npm, maka ia berfungsi. Sebelumnya, tidak ada yang dipasang di subdirektori itu. Sekarang, semuanya terinstal di sana.
CtheGood
Terima kasih @Moshen. Saya telah menghapus versi Node lama dan melakukan instalasi bersih. Saya menghapus semua node_modules saya / secara global tetapi lupa untuk menghapusnya dari beberapa aplikasi yang ada. Saya harus menghapus folder node_modules di setiap direktori aplikasi yang ada, kemudian jalankan npm install.
Wilblack
Yang baik tua "apakah Anda mencoba memulai kembali dari pendekatan awal ?". Ini bekerja baik untuk saya.
Marco Aurélio Deleu
Meskipun senang mengetahui ada solusi, ini benar-benar bernada 'reboot mesin Anda dan coba lagi' dan hanya menyembunyikan masalah sebenarnya. Saya memiliki masalah yang sama dengan menginstal NPM (proses keluar segera tanpa pesan) dan salah satu solusinya adalah menghapus folder node_modules dan instal ulang; yang tidak memenuhi saya dengan keyakinan bahwa kita mengerti apa yang sedang terjadi di sini.
Kelly S. French
1
Ini berhasil untuk saya. Saya dapat memberi +1 lagi untuk referensi IT Crowd.
texelate
32

Saya menggunakan mesin windows.

  1. Saya menghapus folder node_modules.
  2. Entah bagaimana, file package.lock.json sedang dibuat. Saya menghapus file itu.
  3. Kemudian instal npm.
  4. Bangunan bersih.
  5. Lari.
Virat18
sumber
14
Jawaban ini perlu mendapatkan lebih banyak cinta. File package.lock.json mengacaukan saya.
mwilcox
16

jika Anda mewarisi kode ini, bisa jadi dependensi dan versinya dikunci dan Anda memiliki file ./npm-shrinkwrap.json.

jika ketergantungan Anda tidak tercantum dalam file itu, itu tidak akan pernah diinstal dengan npm installperintah.

Anda harus menginstal paket secara manual dan kemudian menjalankan npm shrinkwrapuntuk memperbarui file shrinkwrap.

Rico Rodriquez Collins
sumber
2
Saya punya masalah di mana menginstal paket secara manual telah membuat package-lock.jsonfile setelah memperbarui ke simpul 8.0.0 dan npm 5.0.0. Setelah itu, menjalankan npm installhanya akan menginstal satu paket itu daripada semua dependensi saya. Menghapus package-lock.jsondan menjalankan kembali npm installmemecahkan masalah untuk saya.
Monkpit
1
@ Monkpit Itu menyelesaikannya untuk saya juga, terima kasih! package-lock.jsonmenghalangi.
VirtualWolf
10

Saya curiga Anda menghadapi masalah di mana package.jsonfile Anda tidak berada di direktori yang sama dengan file Anda Gruntfile.js. Saat Anda menjalankan grunt xxxperintah, Anda mendapat pesan kesalahan seperti:

Local Npm module "xxx" not found. Is it installed?

Untuk saat ini, solusinya adalah:

  • Buat package.json di direktori yang sama dengan Gruntfile.js
  • Tentukan modul yang dibutuhkan oleh proyek kasar Anda
  • Jalankan npm installuntuk memuatnya secara lokal
  • Sekarang perintah kasar yang diperlukan harus bekerja.

IMHO, sangat menyedihkan bahwa kita tidak dapat memiliki modul penyelesaian kasar yang dimuat dari modul npm induk (yaitu package.json dalam direktori induk dalam proyek yang sama). Diskusi di sini tampaknya mengindikasikan bahwa hal itu dilakukan untuk menghindari memuat modul "global" tetapi saya pikir yang kami inginkan adalah memuat dari modul "proyek saya".

kctang
sumber
Jadi ini adalah struktur proyek induk saya (itulah yang mengimpor proyek sub modul): cl.ly/image/020E0b3I0t1A dan struktur proyek sub modul saya: cl.ly/image/2q0L3l1v0s40 ; Anda dapat melihat bahwa keduanya mengandung Gruntfile.jsdan keduanya berisi package.jsonpada tingkat yang sama.
Ahmed Nuaman
1
Ini bukan masalah dengan grunt, ini masalah dengan npmtidak menginstal dependansi secara rekursif dalam proyek sub modul saya.
Ahmed Nuaman
9

OP mungkin benar untuk versi node yang lebih lama. Namun, saya menghadapi hal yang sama dengan simpul 4.4.1 juga.

Itu sangat baik dapat dihubungkan ke versi simpul yang Anda gunakan. Coba tingkatkan ke versi terbaru. Ketergantungan tertentu tidak memuat secara transitif jika tidak kompatibel dengan versi node.

Saya menemukan ini dengan menjalankan npm update.

Setelah memutakhirkan ke versi terbaru (4.4 -> 5.9); ini diperbaiki.

Nrj
sumber
8

Dalam kasus saya itu membantu untuk menghapus node_modulesdan package-lock.json.

Setelah itu instal ulang semuanya dengan npm install.

Lars Kliesing
sumber
8

Periksa juga apakah nama paket Anda diterima dengan benar:

SALAH:

{
    "name":"My Awesome Package"
}


BENAR

{
    "name": "my-awesome-package-name"
}
Caius
sumber
1
Ya saya memiliki ruang dalam nama dan itu tidak menginstal dengan benar.
Ansjovis86
1
tidak hanya untuk ruang, ini juga tentang '-' ia digunakan dalam nama, saya juga menghadapi masalah yang sama, menempatkan - atau _ dalam nama, itu akan berhasil.
molagbal
4

Anda mungkin perlu menginstal grunt-cli, coba ini sebelum melakukan instalasi npm:

sudo npm install -g grunt-cli

Itu memperbaiki grunt tidak keluar untuk saya, Anda juga akan memerlukan file grunt yang valid.

Sumber: https://stackoverflow.com/a/16456467/241294

poida
sumber
Apa yang terjadi ketika Anda mencoba perintah 'mendengus' di command prompt Anda? Apakah itu ada di jalan Anda? Anda benar, memang terlihat seperti terpasang dari pastebin Anda. Apakah Anda menginstalnya dengan sudo dan -g?
poida
Ini bukan masalah dengan gerutuan:~ ᐅ which grunt /opt/local/bin/grunt
Ahmed Nuaman
Juga ketika saya mengkloning repo itu sendiri, daripada melalui NPM dan jalankan npm installdan grunt install, itu berfungsi dengan baik. Masalahnya adalah bahwa NPM tampaknya tidak menginstal package.json
dependensi
Di direktori mana Anda mencari dependensi paket? Mereka seharusnya tidak berada di tingkat atas tetapi di bawah: paket tingkat atas / node_modules / module-name / node_modules. Mungkinkah gerutuan itu tidak menemukan file gerutuan karena itu bekerja di direktori yang salah?
poida
Ini bukan masalah dengan grunt, ketika Anda menginstal modul dengan NPM biasanya menyediakan ringkasan di akhir setiap dependensi dari modul yang telah diinstal; ketika saya menginstal modul yang bersangkutan saya tidak menerima ringkasan dari modul dependensi yang diinstal.
Ahmed Nuaman
4

Kalau-kalau ada orang yang menderita kesulitan ini dan kebetulan membuat kesalahan asanin yang sama yang saya lakukan, di sini adalah apa yang ada dalam kasus saya. Setelah membenturkan kepala ke dinding selama satu jam, saya menyadari bahwa json saya bersarang secara salah, dan kunci "dependensi" ada di dalam "repositori" kunci.
Tak perlu dikatakan, tidak ada kesalahan yang jelas, dan tidak ada modul yang dipasang.

dgo
sumber
3

Cara lain untuk mengatasi ini adalah dengan menambahkan ini ke package.jsonbagian skrip modul Anda

"preinstall": "npm install {Packages You depend on}"

apa yang akan dilakukan adalah, ini akan menginstal semua paket yang dibutuhkan oleh modul dan Anda tidak akan mendapatkan kesalahan itu.

Ahmed Fathy
sumber
3

terjadi dengan versi simpul lama. gunakan versi terbaru dari simpul seperti ini:

$ nvm use 8.0
$ rm -rf node_modules
$ npm install
$ npm i somemodule

sunting: juga pastikan Anda save.
misalnya:npm install yourmoduleName --save

Deke
sumber
2

Saya menerima kesalahan ini ketika saya menginstal lingkungan Node dev yang bersih di windows.

Untuk memperbaikinya, saya masuk ke direktori proyek baru saya (yang baru saja saya perancah dengan yo angular) dan mengetikkan dua perintah:

npm install -g grunt --save-dev

Itu akan menginstal dependensi gerutuan lokal ke proyek Anda. Lanjut:

npm install

Itu akan memastikan semua dependensi proyek Anda (baru) diinstal.

Tada!

Jesse Lawson
sumber
2

Layak untuk disebutkan untuk memastikan bahwa dependensi Anda harus berada di dependenciesbagian Anda package.json(bukan sebaliknyadevDependencies ).

Masalah saya pada dasarnya sama dengan OP:

  • menginstal repo pribadi (Sebut saja repo1) via "module-name": "git+ssh://git@myserver:user/my-repo-name.git"di repo lain (Sebut sajarepo2 ),
  • di repo2's node_modules, satu paket ketergantungan darirepo1 itu tidak ada.
  • Kesalahan konyol saya! .. repo1adalah mendaftarkan ketergantungan itu devDependenciessebagai gantidependencies
  • Pindahkan ketergantungan di saya repo1's package.jsondari devDependencies kedependencies
  • Dalam saya repo2, saya menghapus saya node_modulesdan package-lock.json, memang npm install, sebuah voilà! ... ketergantungan ada di sana!
cafesanu
sumber
Saya telah mendeklarasikan NODE_ENV = variabel lingkungan produksi di Dockerfile saya di atas perintah install npm, yang menyebabkan devDependencies tidak diinstal
Pieter De Clercq
0

Saya memiliki masalah yang sama. Tetapi pada mesin yang sama satu proyek memiliki package.json yang baik, di mana semua dependensi saya berhasil diinstal. Dan di proyek lain dependensi package.json saya tidak diinstal tidak peduli apa yang saya lakukan. Saya baru saja menyalin package.json dan menempel ke proyek lain itu. Dan itu berhasil! Perbedaan yang saya temukan hanyalah baris kosong di awal file. Tidak tahu atau itu memengaruhi apa pun, mungkin masalah lain. Tapi masalahnya hanya file package.json.

mansim
sumber
0

Saya pikir saya juga menghadapi masalah ini, dan solusi terbaik yang saya temukan adalah melihat konsol saya dan mencari tahu kesalahan yang sedang terjadi. Jadi, saya membacanya dengan seksama dan menemukan bahwa masalahnya adalah saya tidak menentukan repo, deskripsi, dan nama saya yang valid di package.json. Saya menambahkan potongan informasi itu dan semuanya baik-baik saja.

WinnersProx
sumber