Mengapa, misalnya, plugin Grunt mendefinisikan ketergantungannya pada grunt sebagai " dependensi rekan "?
Mengapa plugin tidak memiliki Grunt sebagai ketergantungannya sendiri di grunt-plug / node_modules ?
Ketergantungan sebaya dijelaskan di sini: https://nodejs.org/en/blog/npm/peer-dependencies/
Tapi saya tidak begitu mengerti.
Contoh
Saya sedang bekerja dengan AppGyver Steroid saat ini yang menggunakan tugas Grunt untuk membangun file sumber saya ke folder / dist / untuk dilayani di perangkat lokal. Saya cukup baru di npm dan mendengus jadi saya ingin sepenuhnya memahami apa yang sedang terjadi.
Sejauh ini saya mendapatkan ini:
[rootfolder] /package.json memberitahu npm itu tergantung pada grunt-steroids
paket npm untuk pengembangan:
"devDependencies": {
"grunt-steroids": "0.x"
},
Baik. Menjalankan npm install di [rootfolder] mendeteksi ketergantungan dan menginstal grunt-steroid di [rootfolder] / node_modules / grunt-steroids .
Npm kemudian membaca [rootfolder] /node_modules/grunt-steroids/package.json sehingga dapat menginstal grunt-steroids
dependensi sendiri .:
"devDependencies": {
"grunt-contrib-nodeunit": "0.3.0",
"grunt": "0.4.4"
},
"dependencies": {
"wrench": "1.5.4",
"chalk": "0.3.0",
"xml2js": "0.4.1",
"lodash": "2.4.1"
},
"peerDependencies": {
"grunt": "0.4.4",
"grunt-contrib-copy": "0.5.0",
"grunt-contrib-clean": "0.5.0",
"grunt-contrib-concat": "0.4.0",
"grunt-contrib-coffee": "0.10.1",
"grunt-contrib-sass": "0.7.3",
"grunt-extend-config": "0.9.2"
},
Paket " dependensi " diinstal ke dalam [rootfolder] / node_modules / grunt-steroids / node_modules yang logis untuk saya.
" DevDependencies " tidak diinstal, yang saya yakin dikendalikan oleh npm mendeteksi saya hanya mencoba untuk menggunakan grunt-steroids
, dan tidak mengembangkannya.
Tapi kemudian kita memiliki " peerDependencies ".
Ini dipasang di [rootfolder] / node_modules , dan saya tidak mengerti mengapa ada dan tidak di [rootfolder] / node_modules / grunt-steroids / node_modules sehingga konflik dengan plugin kasar lainnya (atau apa pun) dihindari?
"grunt": "0.4.4"
keduanya dalam devDependencies dan peerDependencies, dan masuk akal bagi saya untuk memiliki duplikat di sana, karena itu berarti bahwa saya memerlukangrunt
paket itu untuk saya gunakan sendiri, tetapi juga para pengguna saya perpustakaan dapat menggunakan versi mereka sendiri, selama itu menghormati kunci versi peerDependencies. Apakah itu benar? Atau apakah contoh OP itu sangat buruk?