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?

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 findup-sync@0.1.2

  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 findup-sync@0.1.2.

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


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.


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!


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.


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


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 rxjs@5.0.0-rc.2, instal ketergantungan itu dengan npm install --save rxjs@5.0.0-rc.2sampai Anda tidak punya lagi UNMET DEPENDENCIES.

Semoga berhasil.


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


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.


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.


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


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.


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).


1

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



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.



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';.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.