Npm package.json ගොනුවේ පරායත්තතා, devDependencies සහ peerDependencies අතර වෙනස කුමක්ද?


2045

මෙම ලියකියවිලි මගේ ප්‍රශ්නයට ඉතා දුර්වල ලෙස පිළිතුරු සපයයි. මට ඒ පැහැදිලි කිරීම් තේරුණේ නැහැ. යමෙකුට සරල වචන වලින් කිව හැකිද? සරල වචන තෝරා ගැනීම දුෂ්කර නම් සමහර විට උදාහරණ සමඟ?

EDIT ද එකතු කර peerDependenciesඇති අතර එය සමීපව සම්බන්ධ වන අතර ව්‍යාකූලත්වයට හේතු විය හැක.


49
optionalDependenciesදැන් ද ඇති බව සලකන්න .
අයිඩාන් ෆෙල්ඩ්මන්

119
Id අයිඩාන් ෆෙල්ඩ්මන් “විකල්ප විකල්පයන්” යනු මගේ දවසේ ඔක්සිමොරොන් ය
නික් බුල්

1
npm ප්‍රලේඛනය පවසන්නේ: "පරායත්තතා": නිෂ්පාදනයේදී ඔබේ යෙදුමට අවශ්‍ය පැකේජ. "devDependencies": දේශීය සංවර්ධනය හා පරීක්ෂා කිරීම සඳහා පමණක් අවශ්‍ය වන පැකේජ. සබැඳිය බලන්න: docs.npmjs.com/…
Deke

Answers:


2379

වැදගත් හැසිරීම් වෙනස්කම් වල සාරාංශය:

  • dependencies දෙකෙහිම ස්ථාපනය කර ඇත:

    • npm install අඩංගු නාමාවලියකින් package.json
    • npm install $package වෙනත් ඕනෑම නාමාවලියක
  • devDependencies ඒවා නම්:

    • ඔබ ධජය සමත් නොවන්නේ නම් npm installඅඩංගු නාමාවලියක ද ස්ථාපනය කර ඇත ( ගයාන් චරිත්ගේ පිළිතුර ඉහළට යන්න ).package.json--production
    • npm install "$package"ඔබ --devවිකල්පය ලබා දෙන්නේ නම් මිස වෙනත් කිසිදු නාමාවලියක ස්ථාපනය කර නොමැත .
    • අක්‍රීයව ස්ථාපනය කර නොමැත.
  • peerDependencies:

    • 3.0 ට පෙර: අස්ථානගත වී ඇත්නම් සැමවිටම ස්ථාපනය කර ඇති අතර පරායත්තතාවයේ නොගැලපෙන අනුවාදයන් විවිධ පරායත්තතාවයන් භාවිතා කරන්නේ නම් දෝෂයක් මතු කරන්න.
    • 3.0 සිට ආරම්භ කිරීමට අපේක්ෂා කෙරේ (පරීක්ෂා නොකළ): අස්ථානගත වී ඇත්නම් අනතුරු ඇඟවීමක් කරන්න npm install, එවිට ඔබ විසින්ම යැපීම අතින් විසඳා ගත යුතුය. ධාවනය වන විට, පරායත්තතාවය අස්ථානගත වී ඇත්නම්, ඔබට දෝෂයක් ලැබෙනු ඇත ( @nextgentech විසින් සඳහන් කර ඇත )
  • පාරදෘශ්‍යතාව ( බෙන් හචිසන් විසින් සඳහන් කරන ලදි ):

    • dependencies අක්‍රීයව ස්ථාපනය කර ඇත: A ට B අවශ්‍ය නම් සහ B ට C අවශ්‍ය නම්, C ස්ථාපනය වේ, එසේ නොමැතිනම් B ක්‍රියා කළ නොහැකි අතර A ද එසේ නොවේ.

    • devDependenciesඅක්‍රීයව ස්ථාපනය කර නොමැත. උදා: A පරීක්‍ෂා කිරීම සඳහා අපට B පරීක්‍ෂා කිරීමට අවශ්‍ය නැත, එබැවින් B හි පරීක්ෂණ පරායත්තතා අතහැර දැමිය හැකිය.

අදාළ විකල්ප මෙහි සාකච්ඡා නොකෙරේ:

devDependencies

dependenciesක්‍රියාත්මක කිරීමට අවශ්‍ය වන්නේ, devDependenciesසංවර්ධනය කිරීම සඳහා පමණි, උදා: ඒකක පරීක්ෂණ, කෝපි ස්ක්‍රිප්ට් සිට ජාවාස්ක්‍රිප්ට් සම්ප්‍රේෂණය, අවම කිරීම, ...

ඔබ පැකේජයක් සංවර්ධනය කිරීමට යන්නේ නම්, ඔබ එය බාගත කරන්න (උදා: හරහා git clone), එහි අඩංගු මූලයට package.jsonගොස් ධාවනය කරන්න:

npm install

ඔබට සත්‍ය ප්‍රභවයක් ඇති බැවින්, ඔබට එය සංවර්ධනය කිරීමට අවශ්‍ය බව පැහැදිලිය, එබැවින් පෙරනිමියෙන් dependencies(ඔබ සැබවින්ම, සංවර්ධනය සඳහා ධාවනය කළ යුතු බැවින්) සහ devDependencyපරායත්තයන් ද ස්ථාපනය කර ඇත.

කෙසේ වෙතත්, ඔබ එය භාවිතා කිරීම සඳහා පැකේජයක් ස්ථාපනය කිරීමට අවශ්‍ය අවසාන පරිශීලකයෙකු පමණක් නම්, ඔබ ඕනෑම නාමාවලියකින් කරනු ඇත:

npm install "$package"

එවැනි අවස්ථාවක, ඔබට සාමාන්‍යයෙන් සංවර්ධන පරායත්තතා අවශ්‍ය නොවේ, එබැවින් ඔබට පැකේජය භාවිතා කිරීමට අවශ්‍ය දේ ලැබෙනු ඇත : dependencies.

එවැනි අවස්ථාවකදී ඔබට සංවර්ධන පැකේජ ස්ථාපනය කිරීමට අවශ්‍ය නම්, ඔබට devවින්‍යාස කිරීමේ විකල්පය trueවිධාන රේඛාවේ සිට පහත පරිදි සැකසිය හැකිය:

npm install "$package" --dev

විකල්පය falseපෙරනිමියෙන් මෙය වඩා අඩු පොදු අවස්ථාවක් බැවින්.

තුල්‍ය පරායත්තතා

(3.0 ට පෙර පරීක්ෂා කර ඇත)

මුලාශ්‍රය: https://nodejs.org/en/blog/npm/peer-dependencies/

නිත්‍ය පරායත්තතාවයන් සමඟ, ඔබට පරායත්තතාවයේ බහු සංස්කරණ තිබිය හැකිය: එය හුදෙක් පරායත්තතාවයේ ස්ථාපනය කර ඇත node_modules.

නම් උදා dependency1සහ dependency2දෙකම මත රඳා පවතී dependency3මෙම ව්යාපෘතිය ගසක් වගේ ඇත විට විවිධ ප්රභේද දී:

root/node_modules/
                 |
                 +- dependency1/node_modules/
                 |                          |
                 |                          +- dependency3 v1.0/
                 |
                 |
                 +- dependency2/node_modules/
                                            |
                                            +- dependency3 v2.0/

කෙසේ වෙතත්, ප්ලගීන යනු සාමාන්‍යයෙන් වෙනත් පැකේජයක් අවශ්‍ය නොවන පැකේජ වන අතර එය මෙම සන්දර්භය තුළ සත්කාරක ලෙස හැඳින්වේ . වෙනුවට:

  • ප්ලගීන ධාරකයට අවශ්‍ය වේ
  • ප්ලගීන මඟින් ධාරකයා සොයා ගැනීමට බලාපොරොත්තු වන සම්මත අතුරු මුහුණතක් ඉදිරිපත් කරයි
  • පරිශීලකයා විසින් ධාරකය පමණක් කෙලින්ම කැඳවනු ඇත, එබැවින් එහි තනි අනුවාදයක් තිබිය යුතුය.

උදා: dependency1සහ dependency2සම වයසේ මිතුරන් මත රඳා පවතී නම් dependency3, ව්‍යාපෘති ගස පෙනෙන්නේ:

root/node_modules/
                 |
                 +- dependency1/
                 |
                 +- dependency2/
                 |
                 +- dependency3 v1.0/

dependency3ඔබගේ package.jsonගොනුවේ ඔබ කිසි විටෙක සඳහන් නොකළද මෙය සිදු වේ.

මම හිතන්නේ මෙය ප්‍රතිලෝම පාලන පාලන රටාවේ උදාහරණයක් .

තුල්‍ය පරායත්තතාවයන් සඳහා මූලාකෘති උදාහරණයක් වන්නේ ග්‍රන්ට්, සත්කාරක සහ එහි ප්ලගීන ය.

උදාහරණයක් ලෙස, https://github.com/gruntjs/grunt-contrib-uglify වැනි ග්‍රන්ට් ප්ලගිනයක , ඔබට එය පෙනෙනු ඇත:

  • gruntpeer-dependency
  • එකම require('grunt')එක යටතේ ඇත tests/: එය ඇත්ත වශයෙන්ම වැඩසටහන භාවිතා නොකරයි.

පසුව, පරිශීලකයා ප්ලගිනයක් භාවිතා කරන විට, ඔහුට පේළියක් Gruntfileඑක් කිරීමෙන් ප්ලගිනය ව්‍යංගයෙන් අවශ්‍ය වනු ඇත grunt.loadNpmTasks('grunt-contrib-uglify'), නමුත් එය gruntපරිශීලකයා කෙලින්ම අමතනු ඇත.

සෑම ප්ලගිනයකටම වෙනස් ග්‍රන්ට් අනුවාදයක් අවශ්‍ය නම් මෙය ක්‍රියාත්මක නොවේ.

අත්පොත

මම හිතන්නේ ප්‍රලේඛනය ප්‍රශ්නයට හොඳින් පිළිතුරු සපයයි, සමහර විට ඔබ නෝඩ් / වෙනත් පැකේජ කළමණාකරුවන් සමඟ හුරුපුරුදු නැත. මම බොහෝ විට එය තේරුම් ගන්නේ රූබි බණ්ඩලර් ගැන මඳක් දන්නා බැවිනි.

ප්රධාන රේඛාව:

පැකේජයක මුල සිට npm සබැඳිය හෝ npm ස්ථාපනය කරන විට මෙම දේවල් ස්ථාපනය කෙරෙන අතර වෙනත් ඕනෑම npm වින්‍යාස පරාමිතියක් මෙන් කළමනාකරණය කළ හැකිය. මාතෘකාව පිළිබඳ වැඩි විස්තර සඳහා npm-config (7) බලන්න.

ඉන්පසු npm-config (7) යටතේ සොයා ගන්න dev:

Default: false
Type: Boolean

Install dev-dependencies along with packages.

5
අහ්. මම වරදවා වටහාගෙන ඇති බව මට පෙනේ. ඔබේ පිළිතුර කියවන්නේ npm install packageඔබ දැන් අදහස් කළේ යැයි සිතනවාට වඩා, දේවා පරායත්ත නොවන සියලු පැකේජ ස්ථාපනය කිරීමට ඔබ භාවිතා කරන විධානයක් වන අතර, එය '[පැකේජය] නමින් පැකේජය ස්ථාපනය කරන්න' යන්නයි. මෙය කියවීමට පෙර. මම ඔබ නම් මම [පැකේජයේ නම] කීමට සංස්කරණය කරමි, එයින් ඔබ අදහස් කරන්නේ 'ඇතුල් කරන්න-නම-මෙහි' යන්නයි.
ටොම් ඩබ්ලිව්

186
මේක නියමයි! මම කවදාවත් තේරුම් නොගත්තෙමි, නමුත් මෙම පිළිතුර මට උගන්වා ඇත්තේ යැපීම් එදිරිව devDependencies වෙනස අදාළ වන්නේ ඔබ npm පැකේජයක් ප්‍රකාශයට පත් කිරීමට යන්නේ නම් පමණි. ඔබ හුදෙක් යෙදුමක හෝ වෙබ් අඩවියක වැඩ කරන්නේ නම්, එය ඕනෑවට වඩා වැදගත් නොවේ. ස්තූතියි!
jedd.ahyoung

3
වෙනස් වූ දේ පිළිබිඹු කිරීම සඳහා මෙම ලිපිය යාවත්කාලීන කළ යුතුය peerDependenciesඑළඹෙන npm @ 3 හි හැසිරීම . Blog.npmjs.org/post/110924823920/npm-weekly-5 වෙතින් : "අපි තවදුරටත් තුල්‍ය පරායත්තතාවය ස්වයංක්‍රීයව බාගත නොකරන්නෙමු. ඒ වෙනුවට, තුල්‍ය පරායත්තතාවය දැනටමත් ස්ථාපනය කර නොමැති නම් අපි ඔබට අනතුරු අඟවන්නෙමු. මේ සඳහා ඔබට අවශ්‍ය වේ සමපදස්ථ පරායත්තතා ගැටුම් ඔබ විසින්ම අතින් විසඳා ගැනීමට, නමුත් දිගු කාලීනව මෙය ඔබේ පැකේජවල පරායත්තතාවයන් සමඟ ව්‍යාකූල ස්ථානයකට පැමිණීමට ඇති ඉඩකඩ අඩු කරයි. ”
nextgentech

8
එසේම, devDependencies යැපෙන පැකේජ මගින් අක්‍රීයව ස්ථාපනය නොවේ. උදාහරණය: A පැකේජය B පැකේජය මත රඳා පවතී. B පැකේජය C පැකේජය මත රඳා පවතී. B ද පැකේජය මත රඳා පවතී. ඔබ npm installA පැකේජයෙන් ධාවනය කරන්නේ නම් ඔබට B සහ C ලැබෙනු ඇත. නමුත් ඩී නොවේ.
බෙන් හචිසන්

9
සකසා ඇති devDependenciesවිට ස්ථාපනය කර නොමැති බව සඳහන් කිරීම වැදගත්ය . NODE_ENVproduction
ඔගස්ටෝ ෆ්‍රැන්සෝයා

492

ඔබට devDependencies ස්ථාපනය කිරීමට අවශ්‍ය නැතිනම් ඔබට භාවිතා කළ හැකිය npm install --production


1
npm install --save යනු මෘදුකාංග යැපීම සඳහාද?
වම්සි පවන් මහේෂ්

19
npm ස්ථාපනය සියලු පරායත්තයන් ස්ථාපනය කරයි. package.json වෙතද විශේෂිත මොඩියුලය එක් කිරීමට අවශ්‍ය විට --save ධජය භාවිතා කරයි. උදා: - npm ස්ථාපනය uglify --save මඟින් ඔබේ ව්‍යාපෘති ෆෝල්ඩරයේ uglify ස්ථාපනය කර project, package.json ගොනුවට uglify එකතු කරනු ඇත.
ගයාන් චරිත්

6
අපි devDependencies කතා කරන නිසා, ඔබට නව මොඩියුලය devDependency ලෙස සුරැකීමට --save-dev භාවිතා කළ හැකිය. උදාහරණය: npm install uglify --save-dev
Mykaelos

10
Npm 5 වන විට, --saveවිකල්පය තවදුරටත් අවශ්‍ය නොවේ. ඔබ "npm මගේ පැකේජය ස්ථාපනය කරන්න" නම්, එය ඔබගේ package.jsonගොනුවේ පරායත්තතාවයක් ලෙස මගේ පැකේජය එක් කරයි.
මාටින් කැරල්

ස්ථාපනය කරන්න
සුල්තාන් අස්ලම්

116

නිදසුනක් ලෙස, නිෂ්පාදනයේ දී පරීක්ෂණ අවශ්‍ය නොවන අතර, සී express ්‍රගාමීත්වය පරායත්තතාවයක් වන බැවින්, මොචා සාමාන්‍යයෙන් devDependency එකක් වනු ඇත.


4
නිෂ්පාදන සේවාදායකය දියත් කිරීමට පෙර ස්වයං පරීක්ෂණ පැවැත්වීමට ඔබට අවශ්‍ය විය හැකි බැවින් පරීක්‍ෂණය යැපීමක් ලෙස තැබීමට මම නැඹුරු

48
ඒ වෙනුවට මම නිර්දේශ කරන්නේ ඔබේ පරීක්ෂණ ක්‍රියාත්මක කරන හඩ්සන් හෝ සර්කල් සීසී වැනි අඛණ්ඩ ඒකාබද්ධ කිරීමේ සේවාවක් භාවිතා කර ඒවා සමත් වුවහොත් නිෂ්පාදනයට යොදවන්න.
ඩෑන් කෝන්

1
සීඅයි සේවාදායකය ප්‍රොඩ් සේවාදායකයට වඩා කෙසේ හෝ වෙනස් විය හැකි නිසා සත්‍ය සේවාදායකය පරීක්ෂා කිරීම තවමත් අදාළ විය හැකි අතර, මෙම වෙනස උදා: යෙදුම ආරම්භ වීම වලක්වනු ඇත ...
නිකොල්

2
Ic නිකොල් ඔබ ඔබේ වේදිකා සේවාදායකය ඔබේ ප්‍රොඩයට වින්‍යාස කිරීමේදී සමාන නොවන්නේ ඇයි?
ලූකස්

1
නැවත වරක්, පරායත්ත පරායත්තයන් නිත්‍ය පරායත්තයන් ලෙස එකතු කිරීමෙන් අමතර පුස්තකාල සමූහයක් හඳුන්වා දෙනු ලැබේ, ඒ සෑම දෙයක්ම යම් ආකාරයකින් අසමත් විය හැකිය. මම සැහැල්ලු නිෂ්පාදන සේවාදායකයන් වෙත හැකි තරම් කුඩා කේතයක් සහිතව නැඹුරු වෙමි. මතක තබා ගන්න, හොඳම කේතය කේතයක් නොවේ!
ස්ටිජන් ඩි විට්

70

පරායත්තයන්
ඔබේ කේතයෙන් ඔබ කැඳවන කාර්යයන් සපයන පුස්තකාලයක් වැනි ඔබේ ව්‍යාපෘතිය ක්‍රියාත්මක කිරීමට අවශ්‍ය පරායත්තතා .
ඒවා අක්‍රීයව ස්ථාපනය කර ඇත (A රඳා පවතින්නේ B මත රඳා පවතී නම්, npm ස්ථාපනය A මත B සහ C ස්ථාපනය කරනු ඇත).
උදාහරණය: ලොඩාෂ්: ඔබේ ව්‍යාපෘතිය මඟින් සමහර ලොඩාෂ් කාර්යයන් කැඳවනු ලැබේ.

devDependencies
ඔබේ කේතය ගෙන එය ජාවාස්ක්‍රිප්ට්, පරීක්ෂණ රාමු හෝ ප්‍රලේඛන උත්පාදක යන්ත්රයට සම්පාදනය කරන සම්පාදකයින් වැනි සංවර්ධනයේදී හෝ මුදා හැරීමේදී පමණක් ඔබට අවශ්‍ය පරායත්තතා .
ඒවා අක්‍රීයව ස්ථාපනය කර නොමැත (A රඳා පවතින්නේ B මත රඳා පවතී නම් C මත රඳා පවතී, npm ස්ථාපනය A මත ස්ථාපනය කරන්නේ B පමණි).
උදාහරණය: මැසිවිලි නඟන්න: ඔබේ ව්‍යාපෘතිය ගොඩනඟා ගැනීමට මැසිවිලි නඟයි.

peerDependencies
මව් ව්‍යාපෘතියේ දී ඔබේ ව්‍යාපෘතිය සම්බන්ධ කරන හෝ වෙනස් කරන පරායත්තතා , සාමාන්‍යයෙන් වෙනත් පුස්තකාලයක් හෝ මෙවලමක් සඳහා වන ප්ලගිනයකි. එය හුදෙක් චෙක්පතක් වීමට අදහස් කරන අතර, මව් ව්‍යාපෘතිය (ඔබේ ව්‍යාපෘතිය මත රඳා පවතින ව්‍යාපෘතිය) ඔබ සම්බන්ධ කරන ව්‍යාපෘතිය මත යැපීමක් ඇති බවට වග බලා ගන්න. එබැවින් ඔබ B පුස්තකාලයට ක්‍රියාකාරීත්වය එක් කරන ප්ලගිනයක් සාදන්නේ නම්, A ව්‍යාපෘතියක් කරන කෙනෙකුට C මත යැපීමක් තිබේ නම් B මත යැපීමක් අවශ්‍ය වේ.
ඒවා ස්ථාපනය කර නොමැත (npm <3 හැර), ඒවා පමණි සඳහා පරීක්ෂා කර ඇත.
උදාහරණය: මැසිවිලි නඟන්න: ඔබේ ව්‍යාපෘතිය මැසිවිලි නැඟීමට ක්‍රියාකාරීත්වය එක් කරන අතර එය භාවිතා කළ හැක්කේ මැසිවිලි නඟන ව්‍යාපෘති වල පමණි.

මෙම ප්‍රලේඛනය තුල්‍ය පරායත්තතාවයන් ඉතා හොඳින් පැහැදිලි කරයි: https://nodejs.org/en/blog/npm/peer-dependencies/

එසේම, එන්පීඑම් ප්‍රලේඛනය කාලයත් සමඟ වැඩිදියුණු කර ඇති අතර, දැන් විවිධ වර්ගයේ පරායත්තතාවයන් පිළිබඳ වඩා හොඳ පැහැදිලි කිරීම් ඇත: https://github.com/npm/cli/blob/latest/doc/files/package.json.md#devdependencies


63

පැකේජයක් pack.json වෙත dev පරායත්තයන් ලෙස සුරැකීමට :

npm install "$package" --save-dev

ඔබ ක්රියාත්මක කරන විට npm installඒ දෙකම ස්ථාපනය කරනු ඇත devDependenciesහා dependencies. ස්ථාපනය devDependenciesධාවනය වළක්වා ගැනීමට :

npm install --production

3
ඔබට ද භාවිතා කළ හැකිය: npm i -S
මයසර අල්හින්දි

36

සංවර්ධනය සඳහා පමණක් අවශ්‍ය වන සමහර මොඩියුල සහ පැකේජ ඇත, ඒවා නිෂ්පාදනයට අවශ්‍ය නොවේ. එය ප්‍රලේඛනයේ සඳහන් පරිදි :

යමෙකු ඔවුන්ගේ වැඩසටහන තුළ ඔබේ මොඩියුලය බාගත කර භාවිතා කිරීමට සැලසුම් කරන්නේ නම්, එවිට ඔබ භාවිතා කරන බාහිර පරීක්ෂණ හෝ ප්‍රලේඛන රාමුව බාගත කර ගොඩනගා ගැනීමට ඔවුන්ට අවශ්‍ය නොවනු ඇත. මෙම අවස්ථාවේදී, මෙම අතිරේක අයිතම devDependencies හැෂ් එකක ලැයිස්තුගත කිරීම වඩාත් සුදුසුය.


ඔබ නිෂ්පාදනයේ bundle.js ගොනුව පමණක් ධාවනය කරන්නේ නම් කුමක් කළ යුතුද? ඔබට ඇත්ත වශයෙන්ම එම පරායත්තයන් අවශ්‍යද?
රෙගර්බෝයි

ඔබ සේවාදායකයේ bundle.js ධාවනය කරන්නේ නම්, ඔබ කරන්නේ සේවාදායක පැත්තේ වෙබ් පැක් හෝ වෙනත් දෙයක්ද ... කරුණාකර එය එසේ නොවේදැයි පරීක්ෂා කර බලන්න. දැනගන්න මම ඒක කළ නිසා). ඔබගේ bundle.js බ්‍රව්සර් දක්වා පමණක් සේවය කර ඇති අතර සේවාදායක පාර්ශව කේතය අඩංගු යැයි මම සැක කරමි.
ස්ටිජන් ඩි විට්

16

එය මට වඩාත් පැහැදිලි කළ සරල පැහැදිලි කිරීමක් නම්:

ඔබ ඔබේ යෙදුම යෙදූ විට, පරායත්තතාවයේ මොඩියුල ස්ථාපනය කළ යුතුය, නැතහොත් ඔබගේ යෙදුම ක්‍රියා නොකරනු ඇත. ඔබ එම යන්ත්‍රය මත සංවර්ධනය නොකරන බැවින් devDependencies හි මොඩියුල නිෂ්පාදන සේවාදායකයේ ස්ථාපනය කිරීම අවශ්‍ය නොවේ. සබැඳිය


2
ඉතින්, අපි වෙබ් අඩවියක් vendor.jsසාදන්නේ නම් සහ ප්‍රොඩ් අනුවාදයේ සියලුම ලිබ්ස් වලට නැඹුරු වනු ඇත, සම්පාදනය කරන ලද කේතය රෙපෝවට ඇතුළත් කරන්නේ නම් අපගේ සියලු ඩිප්ස් ඩිව් ඩෙප්ස් විය යුතුද? එය සිදු කළ යුතුය, වෙනත් ආකාරයකින් ඔබට මොඩියුලය සම්පාදනය කිරීම පුදුමයක් නොවේ, එය ස්ථාපනය කිරීම පමණක් නොවේ (සහ
උප මොඩියුලවල

නියම පිළිතුර, නමුත් ප්‍රශ්නයක් තිබේද? හැකි වෙබ් පැක් මගින් දූෂිත මිටියක් සෑදිය හැකිද? මගේ අනුමානය නම් devDependencies පැකේජ නිෂ්පාදන අනුවාදයේ ක්‍රියා නොකරනු ඇත, webpack -pමම අදහස් කළේ. කරුණාකර මගේ ප්‍රශ්නයට පිළිතුරු දෙන්න.
අමර්ලික්

නිෂ්පාදන ගොඩ නැගීමේදී කිසියම් ගැටළුවක් ඇත්නම්, ඔබේ යෙදවීමේ ක්‍රියාවලිය සැලසුම් කළ යුත්තේ එය ගොඩනඟන වේලාවේ දෝෂයක් පෙන්වන ආකාරයට වන අතර දූෂිත කේතය නිෂ්පාදනයට තල්ලු නොකරයි (උදා: ඔබට ජෙන්කින්ස් උත්සාහ කළ හැකිය). නිෂ්පාදන සේවාදායකයේ Devdependences කෙසේ හෝ ස්ථාපනය කිරීම අවශ්‍ය නොවේ.
ජෝති දුහාන්

තුල්‍ය පරායත්තතා ගැන කුමක් කිව හැකිද?
dev27

13

මෙම පරායත්තතා පැහැදිලි කිරීම් පිළිබඳ මගේ මතයට පිළිතුරට එක් කිරීමට මම කැමතියි

  • dependencies ඔබේ කේත පදනමේ use ජුව භාවිතා කිරීම සඳහා භාවිතා කරනු ලැබේ, සාමාන්‍යයෙන් නිෂ්පාදන කේතයෙන් අවසන් වන දේවල් හෝ කේත කැබලි
  • devDependencies ගොඩනැගීමේ ක්‍රියාවලිය සඳහා භාවිතා කරනු ලැබේ, අවසාන කේතය අවසන් වන්නේ කෙසේද යන්න කළමනාකරණය කිරීමට ඔබට උපකාරී වන මෙවලම්, තෙවන පාර්ශවීය පරීක්ෂණ මොඩියුල, (උදා: වෙබ් පැක් දේවල්)

CSS වත්කම් ගැන කුමක් කිව හැකිද?
බ්‍රයන් සෙලිප්

8

කෙටියෙන්

  1. පරායත්තතා - npm install <package> --save-prodනිෂ්පාදන පරිසරය තුළ ඔබේ යෙදුමට අවශ්‍ය පැකේජ ස්ථාපනය කරයි.

  2. DevDependencies - npm install <package> --save-devදේශීය සංවර්ධනය හා පරීක්ෂා කිරීම සඳහා පමණක් අවශ්‍ය පැකේජ ස්ථාපනය කරයි

  3. යතුරු ලියනය කිරීමෙන් npm installpackage.json හි සඳහන් සියලුම පැකේජ ස්ථාපනය වේ

එබැවින් ඔබ ඔබේ දේශීය පරිගණකයේ වැඩ කරන්නේ නම් ටයිප් npm installකර ඉදිරියට යන්න :)


7

peerDependenciesඉහත සඳහන් කළ සිරෝ මාතෘකාව පිළිබඳ බ්ලොග් සටහනකින් මෙම ස්නිපටය කියවන තෙක් මට එතරම් තේරුමක් නැත :

[ ප්ලගීන ] අවශ්‍ය වන්නේ ප්ලගීන සහ ඒවායේ ධාරක පැකේජය අතර මෙම “පරායත්තතා” ප්‍රකාශ කිරීමේ ක්‍රමයකි. යම් ආකාරයකින් පැවසීම, “මම වැඩ කරන්නේ මගේ සත්කාරක පැකේජයේ 1.2.x අනුවාදයට සම්බන්ධ වූ විට පමණි, එබැවින් ඔබ මාව ස්ථාපනය කරන්නේ නම්, එය අනුකූල සත්කාරක සමාගමක් සමඟ ඇති බවට වග බලා ගන්න.” අපි මෙම සම්බන්ධතාවය තුල්‍ය යැපීමක් ලෙස හඳුන්වමු.

ප්ලගිනය මඟින් ධාරකයේ නිශ්චිත අනුවාදයක් බලාපොරොත්තු වේ ...

peerDependenciesප්ලගින, ඔවුන්ගේ කාර්යය ඉටු කිරීම සඳහා වූ "සත්කාරක 'පුස්තකාලය අවශ්ය බව පුස්තකාල සඳහා, නමුත් වරකට ලියා ඇති විය හැක පෙර ධාරකයේ නවතම අනුවාදය නිකුත් .

ඇත, මට ලියන්න නම් PluginX v1සඳහා HostLibraryX v3සහ ඉවතට යන්න, එහි කිසිදු සහතිකයක් තියෙන්නේ PluginX v1වැඩ කරනු ඇත විට HostLibraryX v4(හෝ ඇතැම්HostLibraryX v3.0.1 නිදහස් කරනු ලැබේ).

... නමුත් ප්ලගිනය රඳා නොපවතී ධාරකය ...

ප්ලගිනයේ දෘෂ්ටි කෝණයෙන්, එය ධාරක පුස්තකාලයට පමණක් කාර්යයන් එක් කරයි . ප්ලගිනයකට පරායත්තතාවයක් එක් කිරීමට මට ඇත්ත වශයෙන්ම ධාරකය අවශ්‍ය නොවේ, ප්ලගීන බොහෝ විට වචනාර්ථයෙන් ඔවුන්ගේ ධාරකය මත රඳා නොපවතී . ඔබට ධාරකය නොමැති නම්, ප්ලගිනය හානිකර ලෙස කිසිවක් නොකරයි.

මෙයින් අදහස් කරන්නේ dependenciesප්ලගීන සඳහා නිවැරදි සංකල්පය නොවන බවයි.

ඊටත් වඩා භයානක දෙය නම්, මගේ සත්කාරක සමාගමට යැපීමක් ලෙස සලකනු ලැබුවහොත් , එම බ්ලොග් සටහනේම සඳහන් වන මෙම තත්වය තුළ අප අවසන් වනු ඇත (මෙම පිළිතුර සෑදී ඇති සත්කාරක සහ ප්ලගිනය භාවිතා කිරීමට ටිකක් සංස්කරණය කරන ලදි):

නමුත් දැන්, [අපි HostLibraryX හි සමකාලීන අනුවාදය ප්ලගිනෙක්ස් සඳහා යැපීමක් ලෙස සලකන්නේ නම්,] ක්‍රියාත්මක වීමේ ප්‍රති results ල npm installඅනපේක්ෂිත පරායත්ත ප්‍රස්ථාරයේ

├── HostLibraryX@4.0.0
└─┬ PluginX@1.0.0
  └── HostLibraryX@3.0.0

ඔබගේ පරිකල්පනයට ප්‍රධාන යෙදුමට වඩා වෙනස් [HostLibraryX] API භාවිතා කරමින් ප්ලගිනයෙන් ලැබෙන සියුම් අසාර්ථකත්වයන් මම තබමි.

... සහ ධාරකය පැහැදිලිවම ප්ලගිනය මත රඳා නොපවතී ...

... ඒක තමයි ප්ලගීන වල සම්පූර්ණ ලක්ෂ්‍යය. දැන් සත්කාරක සමාගම එහි සියලුම ප්ලගීන සඳහා යැපුම් තොරතුරු ඇතුළත් කිරීමට තරම් හොඳ නම් , එය ගැටළුව විසඳනු ඇත, නමුත් එය විශාල නව සංස්කෘතික ගැටලුවක් ද හඳුන්වා දෙනු ඇත : ප්ලගීන කළමනාකරණය!

ප්ලගීන වල සමස්ත කරුණ නම් ඔවුන්ට නිර්නාමිකව යුගලනය කළ හැකි වීමයි. පරිපූර්ණ ලෝකයක, සත්කාරක සමාගම ඔවුන් සියල්ලන්ම පිළිවෙළකට හා පිළිවෙලට තබා ඇත, නමුත් අපට පුස්තකාල රංචු බළලුන් අවශ්‍ය නොවනු ඇත.

අපි ධූරාවලි වශයෙන් යැපෙන්නේ නැත්නම්, සමහර විට අපි එකිනෙකා මත යැපෙන සම වයසේ මිතුරන් විය හැකිය ...

ඒ වෙනුවට අපට ඇත්තේ සම වයසේ මිතුරන් යන සංකල්පයයි. ධාරකයා හෝ ප්ලගිනය අනෙකාගේ පරායත්ත බාල්දියේ වාඩි වී නැත. දෙදෙනාම යැපුම් ප්‍රස්ථාරයේ එකම මට්ටමක ජීවත් වෙති.


... නමුත් මෙය ස්වයංක්‍රීය සම්බන්ධතාවයක් නොවේ. <<< මුදල් බෝල !!!

මම ඉන්නේ නම් PluginX v1සහ බලාපොරොත්තු ක සම (බව ක peerDependency ඇති ) HostLibraryX v3, ඒ කියන්නේ කරන්නම්. ඔබ එක හොදයි නවතම ස්වයංක්රීය-උසස් නම් HostLibraryX v4(සටහන් අනුවාදය බව 4 ) හා ඇති Plugin v1ස්ථාපනය, ඔබ, දැන ගැනීමට අපට අයිතියක් අවශ්ය?

npm මට මෙම තත්වය කළමනාකරණය කළ නොහැක -

"හේයි, ඔබ භාවිතා කරන බව මට පෙනේ PluginX v1! මම ස්වයංක්‍රීයව HostLibraryXv4 සිට v3 දක්වා පහත හෙලමි, kk?"

... හෝ...

"හේයි, ඔබ භාවිතා කරන බව මට පෙනේ PluginX v1. එය HostLibraryX v3ඔබගේ අවසන් යාවත්කාලයේදී දූවිල්ලෙහි ඉතිරිව ඇති බව අපේක්ෂා කරයි . ආරක්ෂිත වීමට, මම ස්වයංක්‍රීයව අස්ථාපනය කරමි Plugin v1!! 1!

කොහොමද නෑ, එන්පීඑම්?!

ඉතින් npm නැහැ. එය තත්වය පිළිබඳව ඔබව දැනුවත් කරයි, සහ HostLibraryX v4සුදුසු සම වයසේ මිතුරෙක් දැයි සොයා ගැනීමට ඔබට ඉඩ සලසයි Plugin v1.


කෝඩා

peerDependencyප්ලගීන වල හොඳ කළමනාකරණය මඟින් මෙම සංකල්පය ප්‍රායෝගිකව වඩාත් බුද්ධිමත්ව වැඩ කරනු ඇත. සිට මෙම බ්ලොග් පෝස්ටය , නැවත වතාවක් ...

එක් අවවාදයක්: නිත්‍ය පරායත්තතාවයන් මෙන් නොව සම වයස් පරායත්තතා අවශ්‍යතා සැහැල්ලු විය යුතුය. ඔබේ සම වයසේ පරායත්තයන් විශේෂිත පැච් අනුවාද වලට අගුළු දැමිය යුතු නැත. එක් චායි ප්ලගිනයක් චයි 1.4.1 මත රඳා පැවතුනහොත් තවත් අය චයි 1.5.0 මත යැපෙන්නේ නම් එය ඇත්තෙන්ම කරදරයක් වනු ඇත, මන්ද කතුවරුන් කම්මැලි වූ නිසාත්, චයි හි නියම අවම අනුවාදය සොයා ගැනීමට කාලය ගත නොකළ නිසාත් ය. සමඟ අනුකූල වේ.


4

යැපීම් එදිරිව dev පරායත්තතා

දේව් පරායත්තතා යනු මොඩියුලයන් වන අතර ඒවා සංවර්ධනයේදී පමණක් අවශ්‍ය වන අතර ධාවන වේලාවේදී පරායත්තතා අවශ්‍ය වේ. ඔබ ඔබේ යෙදුම යෙදවුවහොත්, පරායත්තතා ස්ථාපනය කළ යුතුය, නැතිනම් ඔබේ යෙදුම ක්‍රියා නොකරනු ඇත. වැඩසටහන ක්‍රියාත්මක කිරීමට හැකි වන පරිදි ඔබේ කේතයෙන් ඔබ අමතන පුස්තකාල යැපීම් ලෙස සැලකිය හැකිය.

උදා- ප්‍රතික්‍රියා කරන්න, ප්‍රතික්‍රියා කරන්න - dom

ඔබ එම යන්ත්‍රය තුළ සංවර්ධනය නොවන බැවින් දේව් පරායත්තතා මොඩියුලයන් නිෂ්පාදන සේවාදායකය තුළ ස්ථාපනය කිරීම අවශ්‍ය නොවේ .ඔබේ කේතය ජාවාස්ක්‍රිප්ට්, පරීක්ෂණ රාමු සහ ලේඛන උත්පාදක යන්ත්රය සඳහා රහසිගත කරන පරිගණක, ඒවා සංවර්ධනයේදී පමණක් අවශ්‍ය බැවින් ඒවා dev- පරායත්තයන් ලෙස සැලකිය හැකිය.

උදා- ඊඑස්ලින්ට්, බාබෙල්, වෙබ් පැක්

@FYI,

mod-a
  dev-dependents:
    - mod-b
  dependents:
    - mod-c

mod-d
  dev-dependents:
    - mod-e
  dependents:
    - mod-a

----

npm install mod-d

installed modules:
  - mod-d
  - mod-a
  - mod-c

----

checkout the mod-d code repository

npm install

installed modules:
  - mod-a
  - mod-c
  - mod-e

ඔබ npm වෙත ප්‍රකාශයට පත් කරන්නේ නම්, නිවැරදි මොඩියුල සඳහා නිවැරදි ධජය භාවිතා කිරීම වැදගත්ය. එය ඔබගේ npm මොඩියුලය ක්‍රියාත්මක වීමට අවශ්‍ය දෙයක් නම්, මොඩියුලය පරායත්තතාවයක් ලෙස සුරැකීමට "--save" ධජය භාවිතා කරන්න. එය ඔබගේ මොඩියුලයට ක්‍රියා කිරීමට අවශ්‍ය නොවන නමුත් එය පරීක්ෂා කිරීම සඳහා අවශ්‍ය නම්, "--save-dev" ධජය භාවිතා කරන්න.

# For dependent modules
npm install dependent-module --save

# For dev-dependent modules
npm install development-module --save-dev

1

Npm පැකේජයක් බෙදා හැරීමට උත්සාහ කරන විට ඔබ භාවිතා කිරීමෙන් වැළකී සිටිය යුතුය dependencies. ඒ වෙනුවට ඔබ වෙත එය ගැලපුම් කිරීමට peerDependenciesහෝ එය ඉවත් කර dependencies.


1

මට සරල පැහැදිලි කිරීමක් හමු විය.

කෙටි පිළිතුර:

පරායත්තතා "... ඔබේ ව්‍යාපෘතියට සැබවින්ම නිෂ්පාදනයේ වැඩ කිරීමට හැකි විය යුතුය."

devDependencies "... සංවර්ධනයේදී ඔබට අවශ්‍ය ඒවා වේ."

peerDependencies "ඔබට ඔබේම පුස්තකාලයක් නිර්මාණය කර ප්‍රකාශයට පත් කිරීමට අවශ්‍ය නම් එය පරායත්තතාවයක් ලෙස භාවිතා කළ හැකිය"

මෙම ලිපියේ වැඩි විස්තර: https://code-trotter.com/web/dependencies-vs-devdependencies-vs-peerdependencies


0
**Dependencies Used when you want to use a function from this module like lodash.
^-^
*dev-Dependencies Used when you want it just in compilation-time like nodemon.

මෙය ප්‍රශ්නයට පිළිතුරක් සපයන්නේ නැත. කතුවරයකු විවේචනය කිරීමට හෝ පැහැදිලි කිරීමක් ඉල්ලා සිටීමට, ඔවුන්ගේ ලිපියට පහළින් අදහස් දක්වන්න. - සමාලෝචනයෙන්
kiamlaluno
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.