බෝවර් සහ එන්පීඑම් අතර වෙනස කුමක්ද?


1764

bowerසහ අතර ඇති මූලික වෙනස npmකුමක්ද? සරල හා සරල දෙයක් අවශ්‍යයි. මම මගේ සගයන් භාවිතා සමහර දැකලා තියෙනවා bowerසහ npmහුවමාරු කර ගැනීමක් ඔවුන්ගේ ව්යාපෘති.


8
අදාළ පිළිතුර stackoverflow.com/a/21199026/1310070
sachinjain024


8
මෙම ප්‍රශ්නයට පිළිතුර යල් පැන ගිය එකක් ලෙස පෙනේ. පැතලි යැපීමට සහාය වන npm 3 භාවිතා කරන්නේ නම් 2016 දී කුමක් කළ යුතු දැයි යමෙකුට පැවසිය හැකිද? එන්පීඑම් 3 සහ බෝවර්ස් අතර ඇති වෙනස කුමක්ද සහ දැන් ඇති හොඳම පුහුණුව කුමක්ද?
amdev

2
බොටම් ලයින්, ඇම්දේව්: බෝවර් දැන් අතහැර දමා ඇත. npm (හෝ නූල්, එය සුළු වෙනසක් පමණි) එය ඇති තැනයි. ශක්‍ය විකල්පයන් ගැන මම නොදනිමි.
XML

Answers:


1916

සියලුම පැකේජ කළමණාකරුවන්ට බොහෝ අවාසි ඇත. ඔබට ජීවත් විය හැකි දේ තෝරා ගත යුතුය.

ඉතිහාසය

npm node.js මොඩියුල කළමනාකරණය කිරීම ආරම්භ කළේය (පැකේජ node_modulesපෙරනිමියෙන් යන්නේ එබැවිනි ), නමුත් බ්‍රව්සරයිෆයි හෝ වෙබ් පැක් සමඟ සංයුක්ත වන විට එය ඉදිරිපස කෙළවරටද ක්‍රියා කරයි.

බෝවර් තනිකරම ඉදිරිපස කෙළවර සඳහා නිර්මාණය කර ඇති අතර එය මනසේ තබාගෙන ප්‍රශස්තිකරණය කර ඇත.

Repo ප්‍රමාණය

පොදු අරමුණු ජාවාස්ක්‍රිප්ට් ( country-dataරටේ තොරතුරු sortsසඳහා හෝ ඉදිරිපස කෙළවරේ හෝ පසුපස කෙළවරේ භාවිතා කළ හැකි කාර්යයන් වර්ග කිරීම වැනි) ඇතුළුව npm බොවර්ට වඩා විශාලය .

බෝවර් සතුව වඩා කුඩා පැකේජ ප්‍රමාණයක් ඇත.

මෝස්තර ආදිය හැසිරවීම

බෝවර්ට මෝස්තර ආදිය ඇතුළත් වේ.

npm ජාවාස්ක්‍රිප්ට් වෙත යොමු වී ඇත. විලාස එක්කෝ, ෙවන් ෙවන් වශෙයන් බාගත හෝ වගේ දෙයක් අවශ්ය වූ npm-sassහෝ sass-npm.

යැපුම් හැසිරවීම

ලොකුම වෙනස නම් npm කැදැලි පරායත්තතාවයන් සිදු කරයි (නමුත් පෙරනිමියෙන් සමතලා වේ) සහ බෝවර්ට පැතලි පරායත්තතා ගසක් අවශ්‍ය වේ (පරායත්ත විභේදනයේ බර පරිශීලකයා මත පැටවේ) .

කැදැලි පරායත්ත ගසක් යනු ඔබේ යැපීම් වලට ඔවුන්ගේම පරායත්තයන් තිබිය හැකි අතර ඒවාටම ආවේණික විය හැකිය. මොඩියුල දෙකකට එකම පරායත්තතාවයේ විවිධ අනුවාදයන් අවශ්‍ය වන අතර තවමත් ක්‍රියා කරයි. Npm v3 සිට සටහන, පරායත්ත ගස පෙරනිමියෙන් පැතලි වනු ඇත (ඉඩ ඉතිරි කිරීම) සහ අවශ්‍ය අවස්ථාවන්හිදී පමණක් කූඩුව, උදා: පරායත්තතා දෙකකට ඔවුන්ගේම අන්ඩර්ස්කෝර් අනුවාදය අවශ්‍ය නම්.

සමහර ව්‍යාපෘති දෙකම භාවිතා කරන්නේ ඔවුන් ඉදිරිපස පැකේජ සඳහා බෝවර් සහ යෙමන්, ග්‍රන්ට්, ගල්ප්, ජේඑස්හින්ට්, කෝපි ස්ක්‍රිප්ට් වැනි සංවර්ධක මෙවලම් සඳහා එන්පීඑම් භාවිතා කිරීමයි.


සම්පත්


37
කූඩුව මත යැපෙන ගසක් ඉදිරිපස කෙළවරේ එය හොඳින් නොකරන්නේ ඇයි?
ලාර්ස් නිස්ට්‍රෝම්

24
ඉදිරිපස එන්පීඑම් පැකේජයක් පැතලි පරායත්තතා ගසක් විය නොහැකිද? මම මුහුණ දෙන්නේ "අපට පැකේජ කළමණාකරුවන් 2 ක් අවශ්‍ය වන්නේ ඇයි?" උභතෝකෝටිකය.
ස්ටීවන් වචොන්

38
"පැතලි යැපුම් ගස" යන්නෙන් ඔබ අදහස් කරන්නේ කුමක්ද? පැතලි ගස යනු කුමක්ද - ලැයිස්තුවක්? එය එවකට ගසක් නොවේ.
mvmn

14
ඇත්තටම, මාර්ගයක් ද ගසක්. එය විශේෂ අවස්ථාවක් පමණි. විකිපීඩියාවෙන්: "ගණිතයේ දී සහ වඩාත් නිශ්චිතවම ප්‍රස්තාර න්‍යායේ දී, ගසක් යනු හරවා යැවූ ප්‍රස්ථාරයකි, එහි ඕනෑම සිරස් දෙකක් හරියටම එක් මාර්ගයකින් සම්බන්ධ වේ."
ජර්ගන් ෆෝග්

42
npm 3 දැන් පැතලි යැපුම් ගසකට සහය දක්වයි.
වාසා

361

මෙම පිළිතුර සින්ඩ්‍රේ සෝර්හස්ගේ පිළිතුරට අතිරේකයකි. එන්පීඑම් සහ බෝවර් අතර ඇති ප්‍රධාන වෙනස වන්නේ ඔවුන් පුනරාවර්තන පරායත්තතාවයන්ට සලකන ආකාරයයි. ඒවා තනි ව්‍යාපෘතියක එකට භාවිතා කළ හැකි බව සලකන්න.

මත npm නිතර අසන ප්රශ්න : (archive.org 6 සැප්තැම්බර් 2015 සිට සබැඳිය)

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

මත බවර් මුල්පිටුව:

බෝවර් ඉදිරිපස කෙළවර සඳහා ප්‍රශස්තිකරණය කර ඇත. බෝවර් පැතලි පරායත්තතා ගසක් භාවිතා කරයි, එක් එක් පැකේජයට එක් අනුවාදයක් පමණක් අවශ්‍ය වන අතර පිටු භාරය අවම වශයෙන් අඩු කරයි.

කෙටියෙන් කිවහොත්, npm ස්ථාවරත්වය අරමුණු කරයි. බෝවර් අවම සම්පත් බරක් අරමුණු කරයි. ඔබ පරායත්ත ව්‍යුහය අඳින්නේ නම්, ඔබට මෙය පෙනෙනු ඇත:

npm:

project root
[node_modules] // default directory for dependencies
 -> dependency A
 -> dependency B
    [node_modules]
    -> dependency A

 -> dependency C
    [node_modules]
    -> dependency B
      [node_modules]
       -> dependency A 
    -> dependency D

ඔබට පෙනෙන පරිදි එය සමහර පරායත්තයන් පුනරාවර්තනය කරයි. යැපීම A හි ස්ථාපිත අවස්ථා තුනක් ඇත!

බෝවර්:

project root
[bower_components] // default directory for dependencies
 -> dependency A
 -> dependency B // needs A
 -> dependency C // needs B and D
 -> dependency D

සියලුම අද්විතීය පරායත්තයන් එකම මට්ටමක පවතින බව මෙහිදී ඔබට පෙනේ.

ඉතින්, ඇයි npm භාවිතා කිරීමට කරදර වන්නේ?

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

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

Npm 3 සඳහා යාවත්කාලීන කරන්න:

බෝවර් හා සසඳන විට npm 3 තවමත් වෙනස් ආකාරයකින් කටයුතු කරයි. එය ගෝලීය වශයෙන් පරායත්තයන් ස්ථාපනය කරනු ඇත, නමුත් එය හමු වන පළමු අනුවාදය සඳහා පමණි. අනෙක් අනුවාදයන් ගසෙහි ස්ථාපනය කර ඇත (මව් මොඩියුලය, පසුව node_modules).

  • [node_modules]
    • dep A v1.0
    • dep B v1.0
      • dep A v1.0 (මූල අනුවාදය භාවිතා කරයි)
    • dep C v1.0
      • dep A v2.0 (මෙම අනුවාදය මූල අනුවාදයට වඩා වෙනස් ය, එබැවින් එය කැදැලි ස්ථාපනය වනු ඇත)

වැඩි විස්තර සඳහා, npm 3 හි ලේඛන කියවීමට මම යෝජනා කරමි


4
"මෘදුකාංග සංවර්ධනය යනු වෙළඳාමෙන් බැහැරවීමකි" යන්න දැන් බොහෝ දුරට පැහැදිලි ය. මෙය හොඳ උදාහරණයකි. එක් තෝරා ගත යුතුයි එක්කෝ සමග වඩා ස්ථාවරත්වය npm හෝ සමග අවම සම්පත් බර bower.
jfmercer

6
H ෂ්රෙක් මම ඔබට ව්‍යංගයෙන් කියා සිටින්නේ ඔබට සැබවින්ම දෙකම භාවිතා කළ හැකි බවයි. අවසාන ඡේදයේ මා සඳහන් කරන පරිදි ඔවුන්ට විවිධ අරමුණු ඇත. එය මගේ ඇස් හමුවේ වෙළඳාමක් නොවේ.
ජස්ටස් රොමිජන්

අහ්, මම ඔබව වරදවා වටහාගෙන ඇති බව මට පෙනේ. නැතහොත් මම ප්රවේශමෙන් කියවා නැත. පැහැදිලි කිරීම සඳහා ස්තූතියි. :-) වෙළඳාමකින් තොරව දෙකම භාවිතා කළ හැකි වීම හොඳයි.
jfmercer

4
Lex ඇලෙක්ස්ඇන්ගාස් මම npm3 සඳහා යාවත්කාලීන කිරීමක් එක් කළෙමි. බෝවර් හා සසඳන විට එයට තවමත් ප්‍රධාන වෙනස්කම් තිබේ. npm බොහෝ විට පරායත්තතාවයේ බහු සංස්කරණ සඳහා සහය දක්වනු ඇත, නමුත් බෝවර් සහාය නොදක්වයි.
ජස්ටස් රොමිජන්


269

ටීඑල්; ඩීආර්: එදිනෙදා භාවිතයේ ඇති විශාලතම වෙනස වන්නේ කූඩු පරායත්තයන් නොවේ ... එය මොඩියුල සහ ගෝලීය අතර වෙනසයි.

මම හිතන්නේ කලින් පෝස්ටර් මගින් මූලික වෙනස්කම් කිහිපයක් ආවරණය කර ඇත. (npm විසින් කූඩු පරායත්තයන් භාවිතා කිරීම සැබවින්ම විශාල, සංකීර්ණ යෙදුම් කළමනාකරණයට බෙහෙවින් උපකාරී වේ, නමුත් එය වඩාත්ම වැදගත් වෙනස යැයි මම නොසිතමි.)

කෙසේ වෙතත්, බෝවර් සහ එන්පීඑම් අතර ඇති මූලික වෙනසක් කිසිවෙකු පැහැදිලිව පැහැදිලි නොකිරීම ගැන මම පුදුම වෙමි. ඔබ ඉහත පිළිතුරු කියවන්නේ නම්, බොහෝ විට npm සන්දර්භය තුළ භාවිතා වන 'මොඩියුල' යන වචනය ඔබට පෙනෙනු ඇත. නමුත් එය සාමාන්‍යයෙන් වාක්‍ය ඛණ්ඩයක් ලෙස සඳහන් කර ඇත.

නමුත් මොඩියුල එදිරිව ග්ලෝබල් (හෝ මොඩියුල එදිරිව 'ස්ක්‍රිප්ට්') අතර වෙනස බෝවර් සහ එන්පීඑම් අතර ඇති වැදගත්ම වෙනස විය හැකිය. සෑම දෙයක්ම මොඩියුලවල තැබීමේ npm ප්‍රවේශය මඟින් ඔබ බ්‍රව්සරය සඳහා ජාවාස්ක්‍රිප්ට් ලියන ආකාරය වෙනස් කළ යුතුය.

බෝවර් ප්‍රවේශය: <script>ටැග්ස් මෙන් ගෝලීය සම්පත්

මුලදී, බෝවර් යනු පැරණි-පැරණි ස්ක්‍රිප්ට් ගොනු පූරණය කිරීමයි. එම ස්ක්‍රිප්ට් ලිපිගොනු කුමක් වුවත්, බෝවර් ඒවා පටවනු ඇත. එහි මූලික අර්ථය වන්නේ බෝවර් යනු ඔබගේ සියලුම ස්ක්‍රිප්ට් ඔබේ පැරණි HTML <script>හි ඇතුළත් කර ඇති ආකාරයටම <head>බවයි.

ඉතින්, ඔබ පුරුදු වී ඇති එකම මූලික ප්‍රවේශය, නමුත් ඔබට හොඳ ස්වයංක්‍රීය පහසුවක් ලැබේ:

  • ඔබේ ව්‍යාපෘති ගබඩාවේ (සංවර්ධනය කරන අතරතුර) JS පරායත්තයන් ඇතුළත් කිරීමට ඔබට අවශ්‍ය විය, නැතහොත් ඒවා CDN හරහා ලබා ගන්න. දැන්, ඔබට එම අතිරේක බාගත කිරීමේ බර රෙපෝවෙන් මඟ හැරිය හැකි අතර, යමෙකුට ඉක්මණින් bower installහා ක්ෂණිකව ඔවුන්ට අවශ්‍ය දේ දේශීයව ලබා ගත හැකිය.
  • බෝවර් පරායත්තතාවයක් එහි තමන්ගේම පරායත්තතාවයන් නියම කරන්නේ නම් bower.json, ඒවා ඔබ වෙනුවෙන් ද බාගත වේ.

නමුත් ඉන් ඔබ්බට, අපි ජාවාස්ක්‍රිප්ට් ලියන ආකාරය බෝවර් වෙනස් නොකරයි . බෝවර් විසින් පටවන ලද ලිපිගොනු තුළට යන දේ ගැන කිසිවක් කිසිසේත් වෙනස් විය යුතු නැත. විශේෂයෙන් ම, මෙයින් අදහස් කරන්නේ බෝවර් විසින් පටවන ලද ස්ක්‍රිප්ට් වල ඇති සම්පත් (සාමාන්‍යයෙන්, නමුත් සැමවිටම නොවේ) තවමත් ගෝලීය විචල්‍යයන් ලෙස අර්ථ දැක්විය හැකි අතර එය බ්‍රව්සර් ක්‍රියාත්මක කිරීමේ සන්දර්භය තුළ ඕනෑම තැනක සිට ලබා ගත හැකි බවයි.

Npm ප්‍රවේශය: පොදු JS මොඩියුල, පැහැදිලි පරායත්ත එන්නත්

නෝඩ් ලෑන්ඩ් හි ඇති සියලුම කේත (සහ එන්පීඑම් හරහා පටවන ලද සියලුම කේත) මොඩියුල ලෙස ව්‍යුහගත කර ඇත (විශේෂයෙන්, පොදු ජේඑස් මොඩියුල ආකෘතිය ක්‍රියාත්මක කිරීමක් ලෙස හෝ දැන් ඊඑස් 6 මොඩියුලයක් ලෙස). එබැවින්, ඔබ බ්‍රව්සරයේ පරායත්තතාවයන් හැසිරවීමට එන්පීඑම් භාවිතා කරන්නේ නම් (බ්‍රව්සරීෆයි හරහා හෝ එකම කාර්යය කරන වෙනත් දෙයක් හරහා), ඔබ ඔබේ කේතය නෝඩ් කරන ආකාරයටම සැකසෙනු ඇත.

මට වඩා දක්ෂ පුද්ගලයින් 'මොඩියුල ඇයි?' යන ප්‍රශ්නයට විසඳුම් ලබා දී ඇත, නමුත් මෙන්න කැප්සියුල සාරාංශය:

  • මොඩියුලයක් තුළ ඇති ඕනෑම දෙයක් effectively ලදායී ලෙස නම් කර ඇති අතර , එයින් අදහස් වන්නේ එය තවදුරටත් ගෝලීය විචල්‍යයක් නොවන අතර ඔබට අදහස් නොකර අහම්බෙන් එය යොමු කළ නොහැකි බවයි.
  • මොඩියුලයක් තුළ ඇති ඕනෑම දෙයක් එය භාවිතා කිරීම සඳහා යම් සන්දර්භයකට (සාමාන්‍යයෙන් තවත් මොඩියුලයකට) හිතාමතාම එන්නත් කළ යුතුය
  • මෙයින් අදහස් කරන්නේ ඔබේ යෙදුමේ විවිධ කොටස් වල එකම බාහිර පරායත්තතාවයේ (ලොඩාෂ්, අපි කියමු) බහු සංස්කරණ තිබිය හැකි අතර ඒවා ගැටෙන්නේ / ගැටෙන්නේ නැත. (මෙය පුදුම සහගත ලෙස බොහෝ විට සිදු වේ, මන්ද ඔබේ කේතයට පරායත්තතාවයේ එක් අනුවාදයක් භාවිතා කිරීමට අවශ්‍ය නමුත් ඔබේ බාහිර පරායත්තතාවයන්ගෙන් එකක් ගැටුම් ඇති තවත් එකක් නියම කරයි. නැතහොත් ඔබට එකිනෙකට වෙනස් අනුවාදයක් අවශ්‍ය බාහිර පරායත්තතා දෙකක් තිබේ.)
  • සියළුම පරායත්තයන් කිසියම් මොඩියුලයකට අතින් එන්නත් කර ඇති නිසා, ඒවා ගැන තර්ක කිරීම ඉතා පහසුය. ඔබ සත්‍යයක් සඳහා දන්නවා: "මේ පිළිබඳව වැඩ කිරීමේදී මා සලකා බැලිය යුතු එකම කේතය මා මෙහි එන්නත් කිරීමට හිතාමතාම තෝරාගෙන ඇති දෙයයි" .
  • එන්නත් කරන ලද මොඩියුලවල අන්තර්ගතය පවා ඔබ එය පවරන ලද විචල්‍යයට පිටුපසින් කොටා ඇති අතර, සියලු කේත සීමිත විෂය පථයක් තුළ ක්‍රියාත්මක වන නිසා, විස්මයන් සහ isions ට්ටන ඉතා අසීරු වේ. ඔබගේ පරායත්තතාවයෙන් යම් දෙයක් ඔබ නොදැනුවත්වම ගෝලීය විචල්‍යයක් අහම්බෙන් නැවත අර්ථ දැක්වීමට හෝ ඔබ එසේ කරනු ඇත. (එය සිදුවිය හැකිය , නමුත් සාමාන්‍යයෙන් ඔබට එය කිරීමට ඔබේ මාර්ගයෙන් පිටතට යා යුතුය, වැනි දෙයක් සමඟ window.variable. තවමත් සිදුවීමට ඉඩ ඇති එක් අනතුරක් පැවරීම this.variableමිස thisඑය ඇත්ත වශයෙන්ම windowවර්තමාන සන්දර්භය තුළ පවතින බව නොදැන සිටීමයි .)
  • ඔබට තනි මොඩියුලයක් පරීක්ෂා කිරීමට අවශ්‍ය වූ විට, ඔබට ඉතා පහසුවෙන් දැනගත හැකිය: මොඩියුලය තුළ ක්‍රියාත්මක වන කේතයට බලපාන වෙනත් (පරායත්තතා) හරියටම කුමක්ද? තවද, ඔබ පැහැදිලිවම සියල්ල එන්නත් කරන නිසා, ඔබට පහසුවෙන් එම පරායත්තතාවයන් සමච්චලයට ලක් කළ හැකිය.

මට නම්, ඉදිරිපස කේතය සඳහා මොඩියුල භාවිතා කිරීම පහත පරිදි වේ: තර්ක කිරීමට හා පරීක්ෂා කිරීමට පහසු වන පටු සන්දර්භයක වැඩ කිරීම සහ සිදුවන්නේ කුමක්ද යන්න පිළිබඳව වැඩි විශ්වාසයක් තිබීම.


CommonJS / Node මොඩියුලයේ සින්ටැක්ස් භාවිතා කරන්නේ කෙසේදැයි දැන ගැනීමට ගත වන්නේ තත්පර 30 ක් පමණි. මොඩියුලයක් වීමට යන ලබා දී ඇති JS ගොනුවක් තුළ, ඔබ මුලින්ම භාවිතා කිරීමට අවශ්‍ය ඕනෑම බාහිර පරායත්තතාවයක් ප්‍රකාශ කරයි:

var React = require('react');

ගොනුව / මොඩියුලය ඇතුළත, ඔබ සාමාන්‍යයෙන් කැමති ඕනෑම දෙයක් කරන අතර, බාහිර පරිශීලකයින්ට නිරාවරණය කිරීමට අවශ්‍ය යම් වස්තුවක් හෝ ශ්‍රිතයක් සාදන්න, සමහර විට එය අමතන්න myModule.

ගොනුවක් අවසානයේ, ඔබට ලෝකය සමඟ බෙදා ගැනීමට අවශ්‍ය ඕනෑම දෙයක් අපනයනය කරයි, මේ ආකාරයට:

module.exports = myModule;

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

තවද, ES6 මොඩියුලයන් (ඔබ බාබෙල් හෝ ඊට සමාන ඊඑස් 5 වෙත සම්ප්‍රේෂණය කළ හැකි) පුළුල් පිළිගැනීමක් ලබා ඇති හෙයින් බ්‍රව්සරයේ හෝ නෝඩ් 4.0 හි වැඩ කරන බැවින්, අපි ඒවා ගැන හොඳ දළ විශ්ලේෂණයක් සඳහන් කළ යුතුය .

මෙම තට්ටුවේ මොඩියුල සමඟ වැඩ කිරීම සඳහා රටා ගැන වැඩි විස්තර .


සංස්කරණය කරන්න (පෙබරවාරි 2017): ෆේස්බුක් හි නූල් මේ දිනවල එන්පීඑම් සඳහා ඉතා වැදගත් විභව ආදේශකයක් / අතිරේකයක් වේ: වේගවත්, නිර්ණායක, නොබැඳි පැකේජ කළමනාකරණය, එන්පීඑම් ඔබට ලබා දෙන දේ මත ගොඩනැඟේ. ඕනෑම JS ව්‍යාපෘතියක් සොයා බැලීම වටී, විශේෂයෙන් එය ඇතුළට / පිටතට මාරු කිරීම එතරම් පහසු බැවින්.


සංස්කරණය කරන්න (2019 මැයි) "බෝවර් අවසානයේ අතහැර දමා ඇත . කතාවේ අවසානය." (h / t: anDanDascalescu, පහත, සාරාංශ සාරාංශය සඳහා.)

නූල් තවමත් ක්‍රියාකාරී වන අතර , එය නූල්ගේ සමහර ප්‍රධාන අංගයන් අනුගමනය කළ පසු ඒ සඳහා වූ බොහෝ වේගය එන්පීඑම් වෙත මාරු විය.


13
මෙම පිළිතුර මෙහි තිබීම සතුටක්, අනෙක් ජනප්‍රිය පිළිතුරු වල මෙම විස්තරය සඳහන් නොවේ. මොඩියුලර් කේත ලිවීමට npm ඔබට බල කරයි.
ජුවාන් මෙන්ඩිස්

මට කණගාටුයි, ජාවාස්ක්‍රිප්ට් පාර්ලන්ඩ්ස් හි ඇති සියලු ව්‍යාකූලතා ගැන එතරම් තැකීමක් නොකරන නමුත් එය සිදුවන්නේ එය කුඩා වෙබ් යෙදුමක් භාවිතා කරන ව්‍යාපාරයක් පවත්වාගෙන යාමෙනි. ඩාර්න් වෙබ් දේ සංවර්ධනය කිරීම සඳහා අප භාවිතා කරන මෙවලම් කට්ටලය සමඟ බෝවර් භාවිතා කිරීමෙන් npm උත්සාහ කිරීමට මෑතකදී බල කෙරුනි. මට කියන්න පුළුවන් ලොකුම වෙනස පොරොත්තු කාලය, npm වයස් ගත වන බව. Xkcd කාටූන් සම්පාදනය කරන්නේ කඩු සටන් කරන අය සමඟ ඔවුන්ගේ ලොක්කාට 'සම්පාදනය' කරමින් කෑගසන බව මතක තබා ගන්න; එන්පීඑම් බෝවර් වලට එකතු කළ දෙය එයයි.
පේද්‍රෝ රොඩ්රිගුස්

129

2017-ඔක්තෝබර් යාවත්කාලීන කිරීම

බෝවර් අවසානයේ අතහැර දමා ඇත . කතාවේ අවසානය.

පැරණි පිළිතුර

Spotify හි ජාවාස්ක්‍රිප්ට් සංවර්ධකයා වන මැටියාස් පීටර් ජොහැන්සන් වෙතින් :

සෑම අවස්ථාවකම පාහේ, Bower හරහා Browserify සහ npm භාවිතා කිරීම වඩාත් යෝග්‍ය වේ. එය හුදෙක් බෝවර්ට වඩා ඉදිරිපස යෙදුම් සඳහා වඩා හොඳ ඇසුරුම්කරණ විසඳුමකි. Spotify හි, අපි සම්පූර්ණ වෙබ් මොඩියුල (html, css, js) ඇසුරුම් කිරීමට npm භාවිතා කරන අතර එය ඉතා හොඳින් ක්‍රියාත්මක වේ.

වෙබ් සඳහා පැකේජ කළමණාකරු ලෙස බෝවර් සන්නාම. මෙය සත්‍යයක් නම් එය නියමයි - ඉදිරිපස සංවර්ධකයෙකු ලෙස මගේ ජීවිතය යහපත් කළ පැකේජ කළමනාකරුවෙක් නියමයි. ගැටළුව වන්නේ බෝවර් ඒ සඳහා විශේෂිත මෙවලම් ඉදිරිපත් නොකිරීමයි. එය එන්පීඑම් ගැන මා දන්නා කිසිදු මෙවලමක් ඉදිරිපත් නොකරන අතර විශේෂයෙන් ඉදිරිපස සංවර්ධකයින්ට විශේෂයෙන් ප්‍රයෝජනවත් නොවේ. ඉදිරිපස සංවර්ධකයෙකුට එන්පීඑම් හරහා බෝවර් භාවිතා කිරීමෙන් කිසිදු ප්‍රතිලාභයක් නොමැත.

අපි බෝවර් භාවිතා කිරීම නවතා npm පමණ ඒකාබද්ධ කළ යුතුයි. ස්තුති වන්ත විය හැක්කේ, ඒ දේ සිදු වන්නේ :

මොඩියුල ගණනය කිරීම් - bower vs. npm

බ්‍රවුසරකරණය හෝ වෙබ් පැක් සමඟ, ඔබගේ සියලුම මොඩියුල විශාල මිනි ගොනුවලට සම්බන්ධ කිරීම ඉතා පහසු වේ, එය කාර්ය සාධනය සඳහා, විශේෂයෙන් ජංගම උපාංග සඳහා විශිෂ්ටයි. එකම බලපෑමක් ලබා ගැනීම සඳහා සැලකිය යුතු වැඩි ශ්‍රමයක් අවශ්‍ය වන බෝවර් සමඟ එසේ නොවේ.

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

(එම සටහන Webpack හා rollup අගෝස්තු 2016 වන විට Browserify වඩා හොඳ විය පුළුල් ලෙස සලකනු ඇත)


8
<sarcasm> කරුණාකර මතක තබා ගන්න 'හෙලෝ වර්ල්ඩ්' එන්පීඑම් ව්‍යාපෘතිය පවා ක්‍රියාත්මක කිරීමට මොඩියුල 300+ ක් අවශ්‍ය වේ ... </
සරසාම්

2
“විශාල මිනිෆයිල් ගොනු” “කාර්ය සාධනය සඳහා, විශේෂයෙන් ජංගම උපාංග සඳහා” නියමයි කියා මම එකඟ නොවෙමි. තරමක් ප්‍රතිවිරුද්ධ දෙය: සීමිත කලාප පළල සඳහා කුඩා ලිපිගොනු අවශ්‍ය වේ.
මයිකල් ෆ්‍රාන්ස්

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

4
E ජෙරාර්ඩෝ ග්‍රිග්නෝලි: බෝවර් එළියට එනවා .
ඩෑන් ඩස්කල්ස්කු

45

බෝවර් මොඩියුලවල තනි අනුවාදයක් පවත්වා ගෙන යයි, එය උත්සාහ කරන්නේ ඔබ වෙනුවෙන් නිවැරදි / හොඳම එක තෝරා ගැනීමට පමණි.

ජාවාස්ක්‍රිප්ට් පරායත්තතා කළමනාකරණය: npm vs bower vs volo?

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


4
සින්ඩ්‍රේ සඳහන් කරන්නේ කූඩු යැපීම ගැන කතා කරන විට බව මට හැඟේ.
ක්‍රීඩා බ්‍රේනියාක්

5
A ගේම්ස් බ්‍රේනියාක් ඔබේ නිවැරදි, මම හිතුවේ මම එය මගේම වචනවලින් කියන්නම් කියාය.
Sagivf

1
Ag සාගිව්ෆ් මේවා ඔබේම වචන නොවේ , ඔබ ද මෙහි
dayuloli

4
Ag සාගිව්ෆ් අනෙකාගේ පිළිතුරු වල අදාළ කොටස් මෙහි පිටපත් කිරීමෙහි කිසිදු වරදක් නැත . එය මට ටිකක් දෝෂාරෝපණය කළා ඔබ කීවේ "මම හිතුවේ මම එය මගේම වචනවලට දමනු ඇතැයි කියාය." ණය ගෙවිය යුතු තැනට ණය යා යුතුය.
dayuloli

2
මම දන්නේ නැහැ ඇයි ඔයාලා මේ පිළිතුර මෙතරම් තෝරාගත්තේ කියලා. මට මෙම පිළිතුරෙහි ඇත්ත වශයෙන්ම නව තොරතුරු / ඉදිරිදර්ශනයක් තිබේ.
කැල්වින්

33

මගේ කණ්ඩායම බෝවර් වෙතින් ඉවත් වී එන්පීඑම් වෙත සංක්‍රමණය වූ නිසා:

  • ක්‍රමලේඛන භාවිතය වේදනාකාරී විය
  • බෝවර්ගේ අතුරු මුහුණත වෙනස් වෙමින් පැවතුනි
  • යූආර්එල් කෙටිමං වැනි සමහර අංග සම්පූර්ණයෙන්ම කැඩී ඇත
  • එකම ව්‍යාපෘතියක බෝවර් සහ එන්පීඑම් යන දෙකම භාවිතා කිරීම වේදනාකාරී ය
  • Bower.json අනුවාද ක්ෂේත්‍රය git ටැග් සමඟ සමපාතව තබා ගැනීම වේදනාකාරී වේ
  • ප්‍රභව පාලනය! = ඇසුරුම් කළමනාකරණය
  • CommonJS සහාය සරල නැත

වැඩි විස්තර සඳහා, "මගේ කණ්ඩායම බෝවර් වෙනුවට එන්පීඑම් භාවිතා කරන්නේ ඇයි" බලන්න .


17

මෙම ප්‍රයෝජනවත් පැහැදිලි කිරීම http://ng-learn.org/2013/11/Bower-vs-npm/ වෙතින් හමු විය.

එක් අතකින් npm නිර්මාණය කරන ලද්දේ node.js පරිසරයක භාවිතා කරන මොඩියුලයන් හෝ node.js භාවිතයෙන් සාදන ලද සංවර්ධන මෙවලම් වන කර්මා, ලින්ට්, මිනිෆයර් සහ යනාදිය ස්ථාපනය කිරීම සඳහා ය. ව්යාපෘතියක (පෙරනිමියෙන් node_modules වලින්) හෝ ගෝලීයව බහු ව්යාපෘති සඳහා භාවිතා කිරීමට npm ට මොඩියුල ස්ථාපනය කළ හැකිය. විශාල ව්‍යාපෘති වලදී පරායත්තතාවයන් නියම කළ හැකි ක්‍රමය වන්නේ පරායත්තතා ලැයිස්තුවක් අඩංගු package.json නම් ගොනුවක් නිර්මාණය කිරීමයි. ඔබ npm ස්ථාපනය ක්‍රියාත්මක කරන විට එම ලැයිස්තුව npm විසින් හඳුනාගනු ලබන අතර එමඟින් ඒවා බාගත කර ඔබ වෙනුවෙන් ස්ථාපනය කරයි.

අනෙක් අතට ඔබේ ඉදිරිපස පරායත්තතාවයන් කළමනාකරණය කිරීම සඳහා බෝවර් නිර්මාණය කරන ලදි. JQuery, AngularJS, underscore, වැනි පුස්තකාල. Npm ට සමාන එහි ගොනුවක් ඇති අතර ඔබට bower.json නම් පරායත්තතා ලැයිස්තුවක් නියම කළ හැකිය. මෙම අවස්ථාවෙහිදී, ඔබේ පෙරටුගාමී පරායත්තයන් ස්ථාපනය කරනු ලබන්නේ බෝවර් ස්ථාපනය කිරීමෙන් පෙරනිමියෙන් ඒවා bower_components නම් ෆෝල්ඩරයක ස්ථාපනය කරමිනි.

ඔබට පෙනෙන පරිදි, ඔවුන් සමාන කාර්යයක් ඉටු කළද ඒවා ඉලක්ක කර ඇත්තේ වඩා වෙනස් පුස්තකාල සමූහයකට ය.


1
පැමිණීමත් සමඟ npm dedupeමෙය ටිකක් යල් පැන ගිය එකක්. මාටියාස්ගේ පිළිතුර බලන්න .
ඩෑන් ඩස්කල්ස්කු

7

Node.js සමඟ වැඩ කරන බොහෝ පුද්ගලයින් සඳහා, bower හි ප්‍රධාන වාසියක් වන්නේ කිසිසේත් javascript නොවන පරායත්තතා කළමනාකරණය කිරීමයි. ඔවුන් ජාවාස්ක්‍රිප්ට් සමඟ සම්පාදනය කරන භාෂාවන් සමඟ වැඩ කරන්නේ නම්, ඒවායේ සමහර පරායත්තතා කළමනාකරණය කිරීමට npm භාවිතා කළ හැකිය. කෙසේ වෙතත්, ඔවුන්ගේ සියලු පරායත්තතා node.js මොඩියුල නොවේ. ජාවාස්ක්‍රිප්ට් සමඟ සම්පාදනය කරන සමහර ඒවාට අමුතු මූලාශ්‍ර භාෂා විශේෂිත මැන්ග්ලිං තිබිය හැකි අතර එමඟින් පරිශීලකයන් ප්‍රභව කේත අපේක්ෂා කරන විට ඒවා ජාවාස්ක්‍රිප්ට් වෙත සම්පාදනය කිරීම අනවශ්‍ය විකල්පයකි.

එන්පීඑම් පැකේජයක ඇති සෑම දෙයක්ම පරිශීලක මුහුණැති ජාවාස්ක්‍රිප්ට් විය යුතු නැත, නමුත් එන්පීඑම් පුස්තකාල පැකේජ සඳහා, අවම වශයෙන් සමහර ඒවා විය යුතුය.


මෙම npmjs බ්ලොග් පෝස්ට් එකෙහි සඳහන් වන්නේ "ඔබේ පැකේජයට ES6, සේවාදායක පාර්ශවීය JS, හෝ HTML සහ CSS වැනි ඕනෑම දෙයක් අඩංගු විය හැකිය. මේවා ජාවාස්ක්‍රිප්ට් සමඟ ස්වාභාවිකවම වෙනස් වන දේවල් බැවින් ඒවා එහි තබන්න."
ඩෑන් ඩස්කල්ස්කු

1
අතර වෙනසක් තිබෙනවා අඩංගු විය හැක , සහ ඇතුළත් විය යුතුය . ඇත්ත වශයෙන්ම ඒවාට ඕනෑම දෙයක් අඩංගු විය හැකි නමුත් පොදුවේ ගත් කල, ඒවා පොදු ජේඑස් වෙත යම් ආකාරයක අතුරු මුහුණතක් ඇතුළත් කළ යුතුය . එය 'නෝඩ් පැකේජ කළමනාකරු' ය. මේවා පිළිබඳ කොටස ස්වාභාවිකවම ජාවාස්ක්‍රිප්ට් සමඟ සම්බන්ධ වන දේවල් වැදගත් ය. ජාවාස්ක්‍රිප්ට් සමඟ ස්පර්ශක ලෙස සම්බන්ධ වන බොහෝ දේ ස්වාභාවිකවම එහි දෙපැත්තට නොපැමිණේ.
ජෙසෝපර්
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.