Dlaczego na przykład wtyczka Grunt definiuje swoją zależność od chrząstki jako „ zależności równorzędne ”?
Dlaczego wtyczka nie może mieć Grunta jako własnej zależności w chrust-plug / node_modules ?
Zależności rówieśników opisano tutaj: https://nodejs.org/en/blog/npm/peer-dependencies/
Ale tak naprawdę nie rozumiem.
Przykład
Obecnie pracuję ze sterydami AppGyver, które wykorzystują zadania Grunt do budowania plików źródłowych w folderze / dist /, który ma być obsługiwany na urządzeniu lokalnym. Jestem całkiem nowy w npm i chrząkać, więc chcę w pełni zrozumieć, co się dzieje.
Do tej pory rozumiem:
[rootfolder] /package.json mówi npm, że programowanie zależy od grunt-steroids
pakietu npm:
"devDependencies": {
"grunt-steroids": "0.x"
},
W porządku. Uruchamianie npm install w [rootfolderze] wykrywa zależność i instaluje sterydy gruntu w [rootfolderze] / node_modules / grunt-sterydy .
Npm następnie odczytuje [rootfolder] /node_modules/grunt-steroids/package.json, aby mógł zainstalować grunt-steroids
własne zależności:
"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"
},
Pakiety „ zależności ” są instalowane w [rootfolder] / node_modules / grunt-steroids / node_modules, co jest dla mnie logiczne.
„ DevDependencies ” nie są zainstalowane, co jestem pewien, że jest kontrolowane przez wykrywanie npm, którego próbuję użyć grunt-steroids
, a nie rozwijam na nim.
Ale potem mamy „ peerDependencies ”.
Są one instalowane w [rootfolder] / node_modules , a ja nie rozumiem, dlaczego tam jest, a nie w [rootfolder] / node_modules / grunt-steroids / node_modules, aby uniknąć konfliktów z innymi wtyczkami (lub cokolwiek innego)?
"grunt": "0.4.4"
to zarówno devDependencies, jak i peerDependencies, i sensowne jest dla mnie, aby mieć tam duplikat, ponieważ oznacza to zarówno, że potrzebuję tegogrunt
pakietu na własny użytek, ale także, że użytkownicy mojego biblioteka może korzystać z własnej wersji, o ile przestrzega blokady wersji peerDependencies. Czy to jest poprawne? A może przykład OP jest bardzo zły?