Mengapa npm install mengatakan saya memiliki dependensi yang belum terpenuhi?

404

Saya punya paket simpul. Ketika saya menjalankan npm installdari paket root, ia menginstal banyak hal, tetapi kemudian mencetak beberapa pesan kesalahan yang terlihat seperti ini:

npm PERINGATAN ketergantungan yang belum terpenuhi / Pengguna / seanmackesey / google_drive / kode / jelajahi / generator / node_modules / findup-sync / node_modules / glob membutuhkan anggun-fs@'~1.2.0 'tetapi akan memuat

Saya pasti bingung tentang apa sebenarnya yang harus npm installdilakukan. Jika mendeteksi ketergantungan, bukankah harus menginstalnya? Dalam kondisi apa itu memberi saya pesan kesalahan seperti ini, dan bagaimana saya bisa menyelesaikan dependensi?

Sean Mackesey
sumber

Jawaban:

397

Saya percaya itu karena resolusi dependensi agak rusak, lihat https://github.com/npm/npm/issues/1341#issuecomment-20634338

Berikut ini adalah solusi yang mungkin:

  1. Secara manual perlu menginstal modul tingkat atas, berisi dependensi yang belum terpenuhi: npm install [email protected]

  2. Struktur ulang package.json Anda. Tempatkan semua modul tingkat tinggi (berfungsi sebagai dependensi untuk modul lain) di bagian bawah.

  3. Jalankan kembali npm installperintahnya.

Masalahnya bisa disebabkan oleh kegagalan npm untuk mengunduh semua paket karena batas waktu atau sesuatu yang lain.

Catatan: Anda juga dapat menginstal paket yang gagal secara manual juga menggunakan npm install [email protected].

Sebelum berjalan npm install, melakukan langkah-langkah berikut dapat membantu:

  • hapus node_modules menggunakan rm -rf node_modules/
  • Lari npm cache clean

Mengapa 'menghapus node_modules' terkadang diperlukan? Ketika modul bersarang gagal untuk menginstal selama npm install, modul berikutnya npm installtidak akan mendeteksi dependensi bersarang yang hilang.

Jika itu masalahnya, kadang-kadang cukup untuk menghapus dependensi tingkat atas dari modul yang hilang tersebut, dan berjalan npm installkembali. Lihat

dule
sumber
22
Menghapus modul simpul dan membersihkan cache membuatnya bekerja untuk saya.
MarkoHiel
4
menghapus 'node_modules', menjalankan 'npm cache clean', dan kemudian menjalankan 'npm install' memperbaiki masalah saya. Saya harus menjalankan 'npm_install' tiga kali, sampai semua dependensi dimuat tanpa kesalahan.
hendrix
2
jika npm cache cleantidak berfungsi karena alasan akses, coba sudo npm cache clean.
Soroush
12
@ Tuanoush secara membabi buta hanya menambahkan sudo ke hal-hal yang tidak berfungsi dengan benar tidak secara ajaib memperbaikinya, hanya berarti Anda tidak tahu apa yang terjadi.
Edgar Aroutiounian
5
mengapa "solusi" lain untuk npm termasuk rm r node_modules? dan mengapa ini benar-benar satu-satunya pilihan di sebagian besar kasus? itu tidak cukup bagaimana saya pikir seorang manajer paket harus bekerja seperti
phil294
83

Itu terjadi pada saya ketika WIFI turun selama npm install. Menghapus node_modulesdan menjalankan kembali npm installmemperbaikinya.

geon
sumber
26
dan coba npm cache clean.
ijse
5
Menginstal ulang node mungkin tidak diperlukan, tetapi antara melakukan itu, npm cache cleandan menghapus node_modules, saran ini berhasil untuk saya.
RichLitt
@RichLitt, Ya melakukan npm cache cleanitu tidak cukup bagi saya, saya harus menghapus node_modulesjuga untuk membuatnya berfungsi setelah jaringan gagal selama "instal".
Mark Tomlin
Saya bingung node_modulesdirektori mana yang harus dihapus? Saya memiliki masalah yang sama dengan kesalahan/usr/local/lib/node_modules/npm/node_modules/read-installed/node_modules/readdir-scoped-modules requires graceful-fs@'^4.1.2'
wuliwong
1
@wuliwong Yang tingkat atas.
geon
33

Saya memperbaiki masalah ini dengan menggunakan baris perintah ini

  • $ rm -rf node_modules/
  • $ sudo npm update -g npm
  • $ npm install

Selesai!

zatamin
sumber
5
Setelah menjalankan sudo npm pembaruan -g npm, npm saya dianggap tidak berguna, segala upaya untuk menginstal apa pun menghasilkan "npm ERR! Tidak dapat menemukan modul 'baca-paket-json'" saya akan harus memilih ini
MichaelB
Itu bekerja untuk saya dan orang lain, mungkin Anda memiliki masalah lain. Coba pasang modul read-package-json secara global sudo npm install -g read-package-jsonAtau instal ulang npm Anda
zatamine
8
peringatan: Anda tidak boleh menggunakan sudo dengan npm, disarankan sebagai gantinya untuk mengubah izin atau kepemilikan direktori npm ingin menulis juga.
Sgnl
1
mungkin ingin menambahkan "npm cache clean" di sana juga
Alexander Mills
1
Jangan gunakan sudodengan npm
Grant
11

Meningkatkan NPM ke versi terbaru dapat sangat membantu dengan ini. jawaban dule di atas benar untuk mengatakan bahwa manajemen ketergantungan agak rusak, tetapi tampaknya ini terutama untuk versi npm yang lebih lama.

Perintah npm listmemberi Anda daftar semua yang diinstal node_modules. Ketika saya memutakhirkan dari versi 1.4.2 ke versi 2.7.4, banyak modul yang sebelumnya ditandai dengan WARN unmet dependencytidak lagi dicatat seperti itu.

Untuk memperbarui npm, Anda harus mengetik npm install -g npmdi MacOSX atau Linux. Di Windows, saya menemukan bahwa mengunduh ulang dan menjalankan kembali pemasang nodejs adalah cara yang lebih efektif untuk memperbarui npm.

stephen
sumber
Saya memiliki masalah yang sama dengan versi npm yang didistribusikan di CentOS 7 repos. Saya menginstal versi npm terbaru dari node.js, dan masalahnya hilang, jadi saya pikir Anda benar, ini bisa menjadi masalah dengan versi lama.
Elouan Keryell-Even
9

Jawaban di atas tidak membantu saya sepenuhnya bahkan setelah menghapus node_modulesdirektori.

Perintah di bawah akhirnya membantu saya:

npm config set registry http://registry.npmjs.org/

Perhatikan bahwa ini menarik modul simpul melalui koneksi HTTP yang tidak aman.

Src: https://stackoverflow.com/a/13119867/4082503

Vinay Vemula
sumber
Ini membantu saya dan juga tuan rumah saya mengarahkan lalu lintas.
dimiguel
1
@dimgl senang tahu :)
Vinay Vemula
1
@ David apakah Anda mencoba jawaban lain juga. Anda mungkin harus menjalankan npm installbeberapa kali dan / atau secara manual menginstal beberapa paket node satu per satu.
Vinay Vemula
4

Untuk setiap -- UNMET PEER DEPENDENCY, untuk mantan. -- UNMET PEER DEPENDENCY [email protected], instal ketergantungan itu dengan npm install --save [email protected]sampai Anda tidak punya lagi UNMET DEPENDENCIES.

Semoga berhasil.

Akash
sumber
1
Meninggalkan saya dengan kesalahan yang sama termasuk yang baru:ERR! code 1
Wouter Vanherck
1
@WouterVanherck bisakah Anda mencoba rm -rf node_modules, lalu npm cache cleandan npm install. Jika masih tidak berhasil, saya sarankan Anda lagi rm -rf node_modules, dulu npm i -g yarndan kemudian yarn install. Benang cukup bagus untuk dikelola node_modules. Semoga berhasil.
Akash
1
Ya, untuk apa peerDependencies. Untuk mendorong Anda ke pilihan versi yang disadari.
Kamafeather
3

Saya menjalankan npm listdan menginstal semua paket yang terdaftar sebagai UNMET DEPENDENCY

Contohnya:

├── UNMET DEPENDENCY css-loader@^0.23.1
npm install css-loader@^0.23.1

achasinh
sumber
2

Ini menyelesaikannya untuk saya:

  1. Perbaiki nomor versi di package.json, sesuai dengan kesalahan;
  2. Hapus node_modules( rm -rf node_modules);
  3. Jalankan kembali npm install.

Ulangi langkah ini sampai tidak ada lagi kesalahan.

pengguna1585939
sumber
1

Beberapa hal dalam nada yang sama, saya akan menambahkan satu langkah lain.

Perhatikan bahwa pada versi npm> 1.4.9, 'npm install' memang menginstal devDependencies. Pertama-tama coba hapus modul dan cache yang ada:

remove node_modules $ rm -rf node_modules/
run $ npm cache clean

Lalu coba:

npm install --dev
npm update --dev

Ini setidaknya akan menyelesaikan resolusi ketergantungan rekursif.

John Doe
sumber
6
untuk apa bendera --dev?
Alexander Mills
1

--dev menginstal devDependencies secara rekursif (dan dijalankan selamanya ..) bagaimana hal itu dapat membantu menyelesaikan perbedaan versi?

Anda dapat mencoba menghapus folder node_moduls, lalu bersihkan cache npm dan kemudian jalankan 'npm i' lagi

arielhad
sumber
1

Saya memiliki masalah serupa ketika saya menginstal React Native CLI. Saya tidak yakin /node_modulesdirektori mana yang seharusnya saya hapus setelah membaca jawaban di sini. Saya akhirnya hanya berlari

npm update -g

dan bisa menginstal paket setelah itu.

wuliwong
sumber
1

Saya mencoba untuk bekerja pada sistem penyebaran otomatis yang berjalan npm install, jadi banyak solusi ini tidak akan bekerja untuk saya dalam fasi otomatis. Saya tidak dalam posisi untuk menghapus / menciptakan kembali node_modules/dan saya tidak dapat dengan mudah mengubah versi Node.js.

Jadi saya akhirnya menjalankan npm shrinkwrap- menambahkan npm-shrinkwrap.jsonfile ke bundel penempatan saya, dan menjalankan instalasi dari sana. Itu memperbaiki masalah bagi saya; dengan file shrinkwrap sebagai 'helper', npm tampaknya dapat menemukan paket yang tepat dan memasangnya untuk saya. (Shrinkwrap memiliki fitur lain juga, tetapi ini adalah apa yang saya butuhkan untuk kasus khusus ini).

Uberbrady
sumber
1

Saya mengalami masalah ini ketika saya menginstal paket reaksi dan ini bekerja untuk saya: npm install --save <package causing this error>

korp
sumber
1

Dalam kasus saya, pembaruan npm menyelesaikannya.

sudo npm install -g npm
Marcelo Gumiero
sumber
1

npm installakan menginstal semua paket dari npm-shrinkwrap.json, tetapi mungkin mengabaikan paket di package.json, jika mereka tidak diatur sebelumnya.

Jika Anda memiliki proyek npm-shrinkwrap.json, pastikan Anda menjalankan npm shrinkwrapuntuk membuatnya kembali, setiap kali Anda menambahkan tambah / hapus / ubah package.json.

Marius
sumber
0

Memperbarui ke 4.0.0

Memperbarui ke 4 semudah memperbarui dependensi Angular Anda ke versi terbaru, dan memeriksa ulang jika Anda ingin animasi. Ini akan berfungsi untuk sebagian besar kasus penggunaan.

Di Linux / Mac:

npm install @angular/{common,compiler,compiler-cli,core,forms,http,platform-browser,platform-browser-dynamic,platform-server,router,animations}@latest typescript@latest --save 

Di Windows:

npm install @angular/common@latest @angular/compiler@latest @angular/compiler-cli@latest @angular/core@latest @angular/forms@latest @angular/http@latest @angular/platform-browser@latest @angular/platform-browser-dynamic@latest @angular/platform-server@latest @angular/router@latest @angular/animations@latest typescript@latest --save

Kemudian jalankan perintah ng serve atau npm start yang biasa Anda gunakan, dan semuanya akan berfungsi.

Jika Anda mengandalkan Animasi, impor yang baru BrowserAnimationsModuledari @angular/platform-browser/animationsdalam root Anda NgModule. Tanpa ini, kode Anda akan dikompilasi dan dijalankan, tetapi animasi akan memicu kesalahan. Impor dari @angular/coresudah tidak digunakan lagi, gunakan impor dari paket baru

import { trigger, state, style, transition, animate } from '@angular/animations';.
Aman Agnihotri
sumber