Bagaimana cara menginstal dependensi npm peer secara otomatis?

274

Misalnya, ketika saya menginstal Angular2:

npm install --save angular2
temp@1.0.0 /Users/doug/Projects/dougludlow/temp
├── angular2@2.0.0-beta.3 
├── UNMET PEER DEPENDENCY es6-promise@^3.0.2
├── UNMET PEER DEPENDENCY es6-shim@^0.33.3
├── UNMET PEER DEPENDENCY reflect-metadata@0.1.2
├── UNMET PEER DEPENDENCY rxjs@5.0.0-beta.0
└── UNMET PEER DEPENDENCY zone.js@0.5.11

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-promise@^3.0.2 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of rxjs@5.0.0-beta.0 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of zone.js@0.5.11 but none was installed.

Apakah ada flag ajaib yang bisa saya berikan ke npm yang akan menginstal dependensi rekan juga? Saya belum dapat menemukan satu ... Sangat membosankan untuk secara manual menyalin dan menempel dependensi rekan dan memastikan saya memiliki versi yang benar.

Dengan kata lain, saya lebih suka tidak harus melakukan:

npm install --save angular2@2.0.0-beta.3 es6-promise@^3.0.2 es6-shim@^0.33.3 reflect-metadata@0.1.2 rxjs@5.0.0-beta.0 zone.js@0.5.11

Apa cara yang lebih baik?

Douglas Ludlow
sumber
Sudahkah Anda memecahkan masalah itu? Saya memiliki masalah yang sama menginstal angular2. Bahkan setelah secara manual menginstal es6-janji dengan flag -g dan mencoba kembali npm install -g angular2 saya mendapatkan Kesalahan / Peringatan yang sama dari 5 dependensi peer unmet es6-janji, es6-shim, mencerminkan-metadata, rxjs dan zone.js
nttakr
4
@nttakr - ya, menginstal versi persis yang diinginkannya sebagai dependensi rekan menghilangkan peringatan. Anda tidak ingin menginstalnya secara global (dengan flag -g). Anda ingin menginstalnya secara lokal (-S flag), tetapi seperti yang saya katakan, mereka harus versi yang tepat (yaitu: [email protected]membutuhkan es6-promise@^3.0.2). Namun, saya ingin tahu apakah ada perintah / bendera yang secara otomatis menginstal dependensi rekan.
Douglas Ludlow
@DouglasLudlow versi NPM apa yang Anda gunakan?
peteb
@peteb: npm -v=>3.5.3
Douglas Ludlow
Saya memiliki masalah yang sama, dan saya belum menemukan solusi yang dihasilkan ....
youngwind

Jawaban:

178

Instalasi otomatis dependensi rekan secara eksplisit dihapus dengan npm 3, karena menyebabkan lebih banyak masalah daripada mencoba memecahkannya. Anda dapat membacanya di sini misalnya:

Jadi tidak, untuk alasan yang diberikan, Anda tidak dapat menginstalnya secara otomatis dengan npm 3 ke atas.

migg
sumber
4
Ya, saya melihat ini: github.com/npm/npm/issues/6565 ... Saya hanya berharap bahwa Anda masih dapat menginstalnya secara opsional dengan flag atau sesuatu. Kira saya harus membuka masalah atau sesuatu.
Douglas Ludlow
157
Bagaimana Anda menangani masalah semacam ini? Saya bukan ahli npm jadi ketika saya membaca "x membutuhkan rekan y tetapi tidak ada yang ditemukan", saya bertanya pada diri sendiri, "rekan yang mana?" dan "bagaimana saya bisa membuat semuanya berfungsi kembali?" Apakah ada proses? Apakah Anda menggali kode x dan y sampai Anda mengetahui apa yang hilang? Setelah Anda mengetahui apa yang hilang, apa yang Anda lakukan selanjutnya? Terima kasih!
Dan Cancro
81
Ah, ini masalah bahasa Inggris: "x membutuhkan peer y tetapi tidak ada yang diinstal" seharusnya "x membutuhkan peer, y, tapi y tidak diinstal". Saya memahaminya sebagai "x membutuhkan salah satu dari rekan-rekan Anda tetapi rekan itu tidak diinstal dan kami tidak memberi tahu Anda yang mana dari teman-teman Anda yang Anda butuhkan".
Dan Cancro
1
Juga jika saya menginstal dependensi peer secara manual, saya mendapatkannya sebagai extraneouspaket
plsnoban
3
Ada "asing" karena Anda harus menambahkannya ke paket Anda dependensi.
Dinoboff
37

Saya menyelesaikannya dengan menulis ulang package.json dengan nilai peringatan yang tepat adalah tentang:

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.

package.json: "es6-shim": "^ 0.33.3",

npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2

package.json: "reflect-metadata": "0.1.2",

Delete node_modules directory

npm install
MrLehiste
sumber
15
Mungkin suatu npm cache clean, npm installmungkin lebih baik daripada menghapus node_modules? Saya selalu menahan diri dari menghapus node_modules, saya ingin mencari tahu apa masalahnya daripada meniup direktori.
Bruno
Saya tidak berpikir ini adalah ide yang sangat aman bagi orang untuk membuatnya bekerja. Mereka memiliki perubahan yang lebih tinggi dalam memperburuk konflik mereka: memiliki kode yang tidak cocok dengan pustaka itu.
zoomlar
Mendapat pesan kesalahan berikut saat mencoba menjalankan cache bersih npm: npm ERR! Pada npm @ 5, cache npm menyembuhkan sendiri dari masalah korupsi dan data yang diekstrak dari cache dijamin valid. Jika Anda ingin memastikan semuanya konsisten, gunakan 'npm cache verifikasi'. Di sisi lain, jika Anda men-debug masalah dengan installer, Anda dapat menggunakan npm install --cache /tmp/empty-cacheuntuk menggunakan cache sementara alih-alih nuking yang sebenarnya. npm ERR! npm ERR! Jika Anda yakin ingin menghapus seluruh cache, jalankan kembali perintah ini dengan --force.
Tarun
22

Kode cheat bermanfaat dalam skenario ini dan beberapa lainnya ...

├── UNMET DEPENDENCY DEPENDENCY @ angular / common @ 4.0.2

├── UNMET PEP DEPENDENCY @ angular / compiler @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / compiler-cli @ 4.0.2

├── UNMET DEPENDENCY @ER sudut / inti @ 4.0.2

├── UNMET DEPENDENCY DEPENDENCY @ angular / forms @ 4.0.2

├── UNMET PEAN DEPENDENSI @ angular / http @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / platform-browser @ 4.0.2

├── UNMET PEP DEPENDENCY @ angular / platform-browser-dynamic @ 4.0.2>

  1. salin & tempel kesalahan Anda ke editor kode Anda.
  2. Sorot bagian yang tidak diinginkan dengan kursor Anda. Dalam hal ini '├── UNMET PEER DEPENDENCY'
  3. Tekan perintah + d beberapa kali.
  4. Tekan hapus dua kali . (Tekan spasi jika Anda secara tidak sengaja menyorot '├── UNMET PEER DEPENDENCY'.)
  5. Tekan sekali. Tambahkan 'npm install'
  6. Tekan sekali. Tambahkan '--simpan
  7. Salin barang Anda kembali ke cli dan jalankan

npm instal @ sudut / umum @ 4.0.2 @ sudut / kompiler @ 4.0.2 @ sudut / kompiler-cli @ 4.0.2 @ sudut / inti @ 4.0.2 @ sudut / bentuk @ 4.0.2 @ sudut / http @ 4.0 .2 @ sudut / platform-browser @ 4.0.2 @ sudut / platform-browser-dinamis @ 4.0.2 - simpan

zoomlar
sumber
8
Opsi --saveini jelas tidak lagi diperlukan pada npm 5.0.0: stackoverflow.com/a/19578808/12484
Jon Schneider
12

Proyek npm-install-peersakan mendeteksi rekan dan menginstalnya.

Sampai v1.0.1saat ini tidak mendukung penulisan kembali ke package.jsonotomatis, yang pada dasarnya akan menyelesaikan kebutuhan kita di sini.

Silakan tambahkan dukungan Anda untuk masalah dalam penerbangan: https://github.com/spatie/npm-install-peers/issues/4

deepelement
sumber
36
Saat berlari, itu memberi saya pesan ini. This package doesn't seem to have any peerDependencies
Thabung
2
Saya memiliki pesan yang sama.
Thibault Boursier
7
Seperti yang saya pahami, npm-install-peersakan menginstal peerDependenciesterdaftar di package.json. Ini tidak akan menginstal peerDependenciesdependensi seperti angular2.
drizzd
Ya, untuk komentar @drizzd kedua: npm-install-peershanya dimaksudkan untuk menginstal yang "peerDependencies"terdaftar di package.json proyek Anda. Anda mencoba menginstal yang "peerDependencies"terdaftar di masing-masing node_modules/<package>/package.jsonfile Anda , bukan dependensi rekan langsung Anda.
Will Farley
5

Saya mengalami kesalahan ini ketika saya mengembangkan paket npm yang memiliki peerDependencies. Saya harus memastikan bahwa ada peerDependenciesyang terdaftar devDependencies. Proyek tidak akan secara otomatis menggunakan paket yang diinstal secara global.

joshweir
sumber
Ini adalah solusi yang rapi, karena hanya menambahkan 'dependensi' agak canggung!
Ashot
0

Pasang benang kemudian jalankan

benang global add install-peerdeps

Carlos
sumber
-5

Jalankan ini: npm install-test

Ivan Ferrer
sumber