Npm 5 විසින් සාදන ලද ඇසුරුම්- lock.json ගොනුව මා විසින් සිදු කරනවාද?


1459

npm 5 අද නිකුත් කරන ලද අතර නව අංගයන්ගෙන් එකක් වන්නේ package-lock.jsonගොනුවක් සෑදීම සමඟ නිර්ණායක ස්ථාපනය කිරීමයි .

මෙම ගොනුව ප්‍රභව පාලනයේ තබා ගත යුතුද?

මම හිතන්නේ එය සමාන වන yarn.lockඅතර composer.lock, මේ දෙකම ප්‍රභව පාලනයේ තබා ගත යුතුය.


24
කෙටි පිළිතුර: ඔව්. එක් අදහස් දැක්වීමක්: පැකේජය- lock.json වෙනස් වන විට ඔබට වෙනත් වෙනස්වීම් වලින් වෙන්ව එම වෙනස සිදු කළ හැකිය. මෙය git logසමඟ කටයුතු කිරීම පහසු කරයි.
Purplejacket

15
නිශ්චිත ස්ථාපනයක් නොපවතී නම් එය නිපදවීමට ගොනුවකට උදව් කළ නොහැක.
ඇලන් එච්.

4
ව්‍යාපෘතිය මත රඳා පවතී. github.com/npm/npm/issues/20603
ගජස්

3
ඔබ සැබවින්ම එන්පීඑම් විශ්වාස කරන්නේ නම්, අරමුණ වන්නේ ව්‍යාපෘතිය භාවිතා කරන දේ වඩාත් පැහැදිලිව වාර්තා කිරීමයි. ඔබට ඇත්ත වශයෙන්ම අනාවැකි කීමට අවශ්‍ය නම් මෙම ගොනුව නොසලකා හැර ඔබේ node_modules ස්ථාපනය කරන්න (.npmrc සහ ඊට අදාළ වින්‍යාසය පිළිතුරු + අදහස් දැක්වීමේදී බලන්න) සහ ඔබේ පැකේජ කළමනාකරු එය කරන දේට වඩා සත්‍ය වශයෙන්ම වෙනස් වන්නේ කුමක්දැයි සොයා ගැනීමට එය භාවිතා කරන්න. අවසානයේ: වඩා වැදගත් වන්නේ කුමක්ද? ඔබේ ඇසුරුම් කළමනාකරු හෝ ඔබ භාවිතා කරන කේතය.
ජිමොන්ට්

Answers:


1672

ඔව්, package-lock.jsonප්‍රභව පාලනයට පරීක්ෂා කිරීමට අදහස් කෙරේ. ඔබ npm 5 භාවිතා කරන්නේ නම්, ඔබට මෙය විධාන රේඛාවේ දැකිය හැකිය: created a lockfile as package-lock.json. You should commit this file.අනුව npm help package-lock.json:

package-lock.jsonnpm node_modulesගස වෙනස් කරන ඕනෑම මෙහෙයුම් සඳහා ස්වයංක්‍රීයව ජනනය වේ , හෝ package.json. අතරමැදි පරායත්තතා යාවත්කාලීනයන් නොසලකා, පසුකාලීන ස්ථාපනයන්ට සමාන ගස් උත්පාදනය කිරීමට හැකි වන පරිදි ජනනය කරන ලද නිශ්චිත ගස විස්තර කරයි.

මෙම ගොනුව ප්‍රභව ගබඩාවලට කැපවීමට අදහස් කරන අතර විවිධ අරමුණු සඳහා සේවය කරයි:

  • පරායත්තතා ගසක තනි නිරූපණයක් විස්තර කරන්න, එනම් කණ්ඩායම් සාමාජිකයන්, යෙදවීම් සහ අඛණ්ඩ ඒකාබද්ධතාවය එකම පරායත්තතාවයන් ස්ථාපනය කිරීමට සහතික වේ.

  • node_modulesනාමාවලියම සිදු නොකර පරිශීලකයින්ට පෙර ප්‍රාන්තවලට "කාල ගමන්" කිරීමට පහසුකමක් ලබා දෙන්න .

  • කියවිය හැකි ප්‍රභව පාලනය හරහා ගස් වෙනස්වීම් වැඩි දෘශ්‍යතාවයකට පහසුකම් සැපයීම.

  • කලින් ස්ථාපනය කර ඇති පැකේජ සඳහා නැවත නැවත පාර-දත්ත විභේදන මඟ හැරීමට npm ට ඉඩ දීමෙන් ස්ථාපන ක්‍රියාවලිය ප්‍රශස්ත කරන්න.

එක් ප්‍රධාන විස්තරයක් package-lock.jsonනම් එය ප්‍රකාශයට පත් කළ නොහැකි අතර, ටොප්ලෙවල් පැකේජය හැර වෙනත් ස්ථානයක එය සොයාගත හොත් එය නොසලකා හරිනු ඇත. එය npm-shrinkwrap.json (5) සමඟ ආකෘතියක් බෙදා ගනී, එය අත්‍යවශ්‍යයෙන්ම එකම ගොනුව වන නමුත් ප්‍රකාශනයට ඉඩ දෙයි. සීඑල්අයි මෙවලමක් යෙදවීම හෝ නිෂ්පාදන පැකේජ නිෂ්පාදනය සඳහා ප්‍රකාශන ක්‍රියාවලිය භාවිතා කිරීම හැර මෙය නිර්දේශ නොකරයි.

දෙකම package-lock.jsonසහ npm-shrinkwrap.jsonපැකේජයක මුලෙහි තිබේ නම්, package-lock.jsonසම්පූර්ණයෙන්ම නොසලකා හරිනු ඇත.


81
ගොනුව කැපීමට ඇත්ත වශයෙන්ම උපකාරී වන්නේ කුමන ආකාරයේ ව්‍යාපෘති වලද? Semver සහ package.json හි සමස්ත කරුණ නම් යාවත්කාලීන කළ අනුකූල පරායත්තතාවයන් සටහන් කිරීම අවශ්‍ය නොවීමයි.
කුතුහලය දනවන

45
ප්රධාන වචනය වන්නේ "විය යුතු නැත" - නමුත් ප්රායෝගිකව මිනිසුන් සෙම්වර් පරිපූර්ණ ලෙස අනුගමනය නොකරයි. පැකේජ යාවත්කාලීන කිරීම පහසු කිරීම සඳහා ඔබට පැකේජ-ලොක්.ජොසන් සහ පැකේජ.ජොසන් එකට භාවිතා කළ හැකි නමුත් සෑම සංවර්ධකයෙකුම සහ යෙදවූ සෑම යෙදුමක්ම එකම පරායත්තතා ගසක් භාවිතා කරන බවට වග බලා ගන්න.
පනු හෝර්ස්මලාති

34
ustrusktr: සින්ඩ්‍රේ සෝර්හස් නිර්දේශ කරන්නේ "යෙදුම් සඳහා අගුළු ගොනු, නමුත් පැකේජ සඳහා නොවේ."
vine77

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

134
පුද්ගලිකව මට දැන් package-lock.jsonමගේ එකතු කිරීමට යොමු විය යුතුව ඇත .gitignore... එය විසඳීමට වඩා මට බොහෝ ගැටලු ඇති කළේය. අප ඒකාබද්ධ කරන විට හෝ නැවත ප්‍රතිස්ථාපනය කරන විට එය සැමවිටම ගැටුම් ඇති වන අතර, ඒකාබද්ධ package-lock.jsonකිරීම සීඅයි සේවාදායකයේ දූෂිත වීමට හේතු වූ විට, එය නිවැරදි කිරීම සඳහා රැඳී සිටීම වේදනාවක් පමණි.
ස්ටෙෆාන් ඉසෙඩ් කැමිලරි

114

ඔව්, එය පිරික්සීමට අදහස් කර ඇත. එයට යෝජනා කිරීමට එයටම ආවේණික වූ කැපවීමක් ලැබේ. එය අපගේ වෙනස්කම් වලට විශාල ශබ්දයක් එක් කරන බව අපට පෙනී යයි.


19
එය ඔබගේ ප්‍රභව කේත ගබඩාවට පරික්ෂා කළ යුතුද යන්න විවාද කිරීම සාධාරණ ය, නමුත් මෙම ගොනුව එන්පීඑම් වෙත ප්‍රකාශයට පත් කිරීම සැබවින්ම විවාදයට සුදුසු නොවේ - ඔබ ඔබේ පැකේජය-ලොක්.ජේසන් හෝ ඔබේ හැකිලීමේ ගොනුව ඔබේ එන්පීඑම් ලේඛකාධිකාරයට ඇතුළත් කළ යුතුය. ඔබ එසේ නොකරන්නේ නම්, ඔබේ ප්‍රකාශිත පැකේජය ඔබගේ 1 වන පරම්පරාවේ පරායත්තතාවයේ වෙනස් නොකළ පරායත්තතාවයන්ට යටත් වේ. එම 2 වන + පරම්පරාවේ පරායත්තයන්ගෙන් එකක් බිඳෙන වෙනසක් ප්‍රකාශයට පත් කරන තුරු සහ ඔබේ ප්‍රකාශිත පැකේජය අභිරහස් ලෙස බිඳී යන තෙක් මෙය ගැටළුවක් බව ඔබ නොදකිනු ඇත. මෙම ඇසුරුම-lock.json ගොනුව නිර්මාණය කරන ලද්දේ එම ගැටළුව විසඳීම සඳහා ය.
ගරිල්ලාප්‍රෙසිඩන්ට්

9
Et ශබ්දය අනුව බෙටෝ අවීගා මම අදහස් කළේ පැකේජ-ලොක්.ජොසන් සමඟ ඇති කොමිස් වලට නෝඩ් පැකේජ අනුවාදයන් බොහොමයක් තිබිය හැකි අතර, එම කැපවීමේ වෙනත් ඕනෑම කාර්යයක් සැඟවී ඇත.
xer0x

7
මම සාමාන්‍යයෙන් පැකේජ ස්ථාපනයන් වෙනත් වැඩ වලින් වෙන් කර තබමි. "ස්ථාපිත චයි සහ මෝචා" වැනි බැඳීමක් මට කිසි විටෙකත් වෙනස් කිරීමට අවශ්‍ය නැත, මන්ද වෙනස් වී ඇති දේ මම දැනටමත් දනිමි.
කීත්

3
package-lock.jsonටන්ක සහ අතු සහිත SCM පද්ධතියක වැඩ කිරීමේදී ගොනුව පිළිබඳ කිසියම් උපදෙස් තිබේද? කඳට ඒකාබද්ධ කළ යුතු ශාඛාවක මම යම් යම් වෙනස්කම් කරමින් සිටිමි ... මට දැන් (කෙසේ හෝ) package-lock.jsonලිපිගොනු දෙක අතර ගැටුම් නිරාකරණය කළ යුතුද? මෙය වේදනාකාරී බවක් දැනේ.
kmiklas

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

75

ඔව්, ඔබ කළ යුත්තේ:

  1. කැපවීම package-lock.json.
  2. භාවිතා npm ciකරනු වෙනුවටnpm install ඔබේ සීඅයි සහ ඔබේ දේශීය සංවර්ධනය යන්ත්රයක දෙකම ඔබේ අයදුම්පත් ගොඩනැගීම විට

මෙම npm ciකාර්ය ප්රවාහ අවශ්ය වූ පැවැත්ම package-lock.json.


npm installවිධානයෙහි විශාල අවාසියක් නම්, එය විකෘති කළ හැකි අනපේක්ෂිත හැසිරීමකි package-lock.json, නමුත් npm ciලොක්ෆයිල් හි දක්වා ඇති අනුවාදයන් පමණක් භාවිතා කර දෝෂයක් ඇති කරයි

  • package-lock.jsonසහ package.jsonසමමුහුර්ත වී ඇත්නම්
  • package-lock.jsonඅස්ථානගත වී ඇත්නම් .

එබැවින් npm installදේශීයව ධාවනය කිරීම , එස්.පී. බහු සංවර්ධකයින් සහිත විශාල කණ්ඩායම් package-lock.jsonවල, package-lock.jsonඒ වෙනුවට සම්පූර්ණයෙන්ම මකා දැමීමට තීරණය කිරීම සඳහා සංවර්ධකයින් සහ සංවර්ධකයින් තුළ බොහෝ ගැටුම් ඇති විය හැකිය .

ව්‍යාපෘතියේ පරායත්තතාවයන් විවිධ යන්ත්‍ර හරහා විශ්වාසනීය ආකාරයකින් නැවත නැවතත් විසඳනු ඇතැයි විශ්වාස කිරීමට හැකිවීම සඳහා ප්‍රබල භාවිත අවස්ථාවක් තිබේ.

සිට package-lock.jsonඔබට එය හරියටම ලැබෙනු ඇත: වැඩ කිරීමට දන්නා රාජ්‍යයකි.

අතීතයේ දී, package-lock.json/ npm-shrinkwrap.json/ yarn.lockලිපිගොනු රහිත ව්‍යාපෘති මා සතුව තිබූ අතර, ඒවා සෑදීම එක් දිනක් අසාර්ථක වනු ඇත.

අවසන් වරට වැඩ කරන අනුවාදය කුමක්දැයි ඔබට සමහර විට අනුමාන කළ යුතු බැවින් එම ගැටළුව විසඳීම දුෂ්කර ය.

ඔබට නව පරායත්තතාවයක් එක් කිරීමට අවශ්‍ය නම්, ඔබ තවමත් ධාවනය npm install {dependency}කරයි. ඔබට උත්ශ්‍රේණි කිරීමට අවශ්‍ය නම්, භාවිතා කරන්න npm update {dependency}හෝ npm install ${dependendency}@{version}වෙනස් කළ දේ කරන්න package-lock.json.

උත්ශ්‍රේණි කිරීම අසමත් වුවහොත්, ඔබට අවසන් වරට දන්නා කාර්යය වෙත ආපසු යා හැකිය package-lock.json.


කිරීමට npm ලේඛය උපුටා :

ජනනය කරන ලද පැකේජ අගුල ප්‍රභව පාලනයට කැප කිරීම අතිශයින් නිර්දේශ කෙරේ: මෙය ඔබගේ කණ්ඩායමේ වෙනත් ඕනෑම කෙනෙකුට, ඔබේ යෙදවීම්, ඔබේ සීඅයි / අඛණ්ඩ ඒකාබද්ධතාවයට සහ ඔබේ පැකේජ ප්‍රභවයේ එන්පීඑම් ස්ථාපනය කරන වෙනත් ඕනෑම කෙනෙකුට හරියටම එකම පරායත්තතා ගසක් ලබා ගැනීමට ඉඩ සලසයි. ඔබ දියුණු වෙමින් පවතින බව. මීට අමතරව, මෙම වෙනස්වීම් වලින් ඇති වෙනස මිනිසුන්ට කියවිය හැකි වන අතර ඔබගේ node_modules හි npm විසින් සිදු කර ඇති වෙනස්කම් පිළිබඳව ඔබට දන්වනු ඇත, එබැවින් කිසියම් සංක්‍රාන්ති පරායත්තතා යාවත්කාලීන කර තිබේද, ඔසවා තිබේද යන්න ඔබට දැකගත හැකිය.

හා පිළබඳ අතර වෙනස npm ciඑදිරිවnpm install :

  • ව්‍යාපෘතියට දැනට පවතින පැකේජයක් තිබිය යුතුය- lock.json හෝ npm-shrinkwrap.json.
  • ඇසුරුම් අගුලේ පරායත්තතා පැකේජයේ ඇති ඒවාට නොගැලපේ npm ciනම්, පැකේජ අගුල යාවත්කාලීන කිරීම වෙනුවට දෝෂයක් සමඟ පිටව යනු ඇත.
  • npm ci එකවර සම්පූර්ණ ව්‍යාපෘති ස්ථාපනය කළ හැක්කේ: මෙම විධානය සමඟ තනි පරායත්තතා එක් කළ නොහැක.
  • නම්, එවැනි node_modulesමේවන විටත්, එය ස්වයංක්රීයව පෙර ඉවත් කරනු ඇත npm ciඑහි ස්ථාපනය ආරම්භ වේ.
  • එය කිසි විටෙකත් package.jsonපැකේජ අගුල් වලට ලියන්නේ නැත : ස්ථාපනයන් අත්‍යවශ්‍යයෙන්ම ශීත කර ඇත.

සටහන: මම සමාන පිළිතුරක් මෙහි පළ කළෙමි


14
මෙම පිළිතුරට වැඩි ගෞරවයක් ලැබිය යුතුය, විශේෂයෙන් npm ci භාවිතා කිරීම. මෙය භාවිතා කිරීමෙන් ඇසුරුම් අගුල සමඟ මිනිසුන් අත්විඳ ඇති ගැටළු බොහොමයක් අවම කරයි.
ජේම්ස් බී

Package.json හි ස්ථාවර අනුවාදයක් භාවිතා කිරීම (කරත්ත හෝ ටිල්ඩ් නැත) වඩා පිරිසිදු විකල්පයක් ලෙස මම සොයාගෙන ඇත. මෙය මා whose build would fail one day because a random dependency got a breaking updateයම් ආකාරයක ගැටලුවකින් බේරා ගනී . එය දරුවාගේ යැපීමේ හැකියාව අතහැර දැමුවද, එය එකම ප්‍රශ්නයකි.
අශ්වානි අගර්වාල්

59

ඔව්, හොඳම පුරුද්ද වන්නේ පිරික්සීමයි (ඔව්, පරීක්ෂා කරන්න)

වෙනස දකින විට එය විශාල ශබ්දයක් හෝ ගැටුමක් ඇති කරන බව මම එකඟ වෙමි. නමුත් වාසි වන්නේ:

  1. සෑම පැකේජයකම එකම අනුවාදය සහතික කරන්න . විවිධ කාලවලදී විවිධ පරිසරවල ගොඩනැඟීමේදී මෙම කොටස වඩාත් වැදගත් වේ. ඔබට ^1.2.3ඔබේ භාවිතා කළ හැකිය package.json, නමුත් සෑම අවස්ථාවකම npm installඔබේ dev යන්ත්‍රයේ සහ ගොඩනංවන සේවාදායකයේ, විශේෂයෙන්ම වක්‍ර පරායත්තතා පැකේජවල එකම අනුවාදයක් ලබා ගන්නා බව සහතික කරන්නේ කෙසේද ? හොඳයි, package-lock.jsonඑය සහතික කරනු ඇත. ( npm ciඅගුළු ගොනුව මත පදනම්ව පැකේජ ස්ථාපනය කරන ආධාරයෙන් )
  2. එය ස්ථාපන ක්‍රියාවලිය වැඩි දියුණු කරයි.
  3. එය නව විගණන අංගයක් සඳහා උපකාරී වේ npm audit fix(විගණන විශේෂාංගය npm අනුවාදය 6 වෙතින් බව මම සිතමි).

3
මා දන්නා පරිදි, කිසි විටෙකත් සෙම්වර් භාවිතා නොකිරීම (එන්පීඑම් ඩෙව්ස් කෙසේ හෝ තේරුම් නොගනී) අවම වශයෙන් 99% ක්ම ලොක්ෆයිල් එකක් තිබීම හා සමාන හැසිරීමක් ලබා දිය යුතුය. මගේම අත්දැකීම නම් සෙම්වර් ෆක්අප් බොහෝ විට සිදුවන්නේ ප්‍රාථමික පැකේජ (සෘජු පරායත්තතා, කපටි jquery datepickers, ආදිය) සමඟ ය. එන්පීඑම් සමඟ මගේ පෞද්ගලික අත්දැකීම නම් අගුළු ලිපිගොනු සදහටම ශබ්දය බවයි. මෑත කාලීන අනුවාදයන් සමඟ මෙම ප්‍ර wisdom ාව වෙනස් නොවන බව මම විශ්වාස කරමි.
ස්වේන්ඩ්

13
සඳහන් කිරීම සඳහා +1 npm ci. package-lock.jsonඇසුරුම් නිශ්චිතවම ස්ථාපනය කිරීමට ඉඩ දෙන බව මිනිසුන් නිතරම සඳහන් කරන නමුත් මෙම හැසිරීමට පහසුකම් සපයන විධානය කිසි විටෙකත් සඳහන් නොකරයි! බොහෝ අය වැරදියට උපකල්පනය npm installකරන්නේ අගුළු ගොනුවේ ඇති දේ හරියටම ස්ථාපනය කර ඇති බවයි ...
ahaurat

npm ci npm 5 හි නොමැත.
dpurrington

ඔබට ස්තුතියි! ඔබ භාවිතා කරන්නේ නම් ඇසුරුම්- lock.json කිරීම පමණක් අර්ථවත් කරයි npm ci. යාවත්කාලීන කළ යුත්තේ කවදාදැයි ඔබේ කණ්ඩායමට / ඊයම් සංවර්ධකයාට තීරණය කළ හැකිය. සෑම කෙනෙකුම එය අත්තනෝමතික ලෙස සිදු කරන්නේ නම්, එහි කිසිදු තේරුමක් නැති අතර, එය ඔබගේ ගබඩාවේ ශබ්දය නිර්මාණය කරයි. එන්පීඑම් ප්‍රලේඛනය මෙය වඩාත් පැහැදිලි කළ යුතුය. මම හිතන්නේ බොහෝ සංවර්ධකයින් මෙම අංගයෙන් ව්‍යාකූල වී ඇත.
ඇඩම්පස්

devadampasz ඇත්ත වශයෙන්ම සෑම dev එකකටම අගුළු ගොනුව කළ හැකි අතර, පරීක්ෂණය සමත් වී ඒකාබද්ධ වූ පසු, දෙවන ශාඛාව කෙසේ හෝ පැකේජ වෙනස් වුවහොත් අගුළු ගොනුව අලුත් කරයි (අපි පැකේජය වෙනස් නොකරමු. json බොහෝ විට, අපි මෙම ගැටලුවට මුහුණ දෙන්නේ අඩුවෙන් (
ෂින්

39

මම මෙම ගොනුව මගේ ව්‍යාපෘති වල නොකරමි. කාරණය කුමක්ද?

  1. එය ජනනය කර ඇත
  2. එය gitlab-ci.yml ගොඩනැගීම් සමඟ gitlab හි SHA1 කේත අඛණ්ඩතාවයේ වැරැද්දකට හේතුවයි

මගේ පැකේජයේ. Json ලිබ් සඳහා මම කිසි විටෙකත් භාවිතා නොකරන බව සත්‍යයක් වුවද, ඒ සමඟ මට නරක අත්දැකීම් ඇති බැවිනි.


12
මෙය එන්පීඑම් ලියකියවිලි වලින් වැඩි විස්තර කළ හැකි යැයි මම ප්‍රාර්ථනා කරමි - කැපවීමෙන් ඔබට විශේෂයෙන් අහිමි වන දේ පිළිබඳ දළ සටහනක් තිබීම ප්‍රයෝජනවත් වනු ඇත package-lock.json. සමහර ගබඩාවලට එය තිබීමෙන් ලැබෙන ප්‍රතිලාභ අවශ්‍ය නොවිය හැකි අතර, ප්‍රභවයෙන් ස්වයංක්‍රීයව ජනනය කළ අන්තර්ගතයක් නොතිබීමට කැමති විය හැකිය.
අර්තාපල් ෆාමර්

2
ගැටළු නිරාකරණය සඳහා එය නිදොස් කිරීම සඳහා (උදාහරණයක් ලෙස අගුල් දෙකක් අතර වෙනසක්) ප්‍රයෝජනවත් වන්නේ කෙසේදැයි මට පෙනේ. මම හිතන්නේ එය මේ වගේ දේවල් වලක්වා ගැනීමටත් භාවිතා කළ හැකි නමුත් එය හවුල් ගබඩාවක තිබීම වේදනාවක් විය හැකි අතර එහිදී එය ඒකාබද්ධ වීමේ ගැටුම් අත්විඳිය හැකිය. ආරම්භකයින් සඳහා මට දේවල් සරල ලෙස තබා ගැනීමට අවශ්‍යයි, පැකේජය-ලොක්.ජොසන් සඳහා සැබෑ අවශ්‍යතාවයක් ඇති බව මා දකින තුරු මම තනිවම package.json භාවිතා කරමි.
radtek

6
Package.json හි ඔබ use භාවිතා නොකරනු ඇත, නමුත් ඔබේ යැපීම් එය භාවිතා නොකරන බවට ඔබට සහතික විය හැකිද?
neiker

38

Git වෙනස සිදු කරන විට ශබ්දය ගැන පැමිණිලි කරන පුද්ගලයින්ට:

git diff -- . ':(exclude)*package-lock.json' -- . ':(exclude)*yarn.lock'

මා කළේ අන්වර්ථයක් භාවිතා කිරීමයි:

alias gd="git diff --ignore-all-space --ignore-space-at-eol --ignore-space-change --ignore-blank-lines -- . ':(exclude)*package-lock.json' -- . ':(exclude)*yarn.lock'"

පැකේජය-ලොක්.ජොසන් නොසලකා හැරීම සඳහා (එය භාවිතා කරන සෑම කෙනෙකුටම), ඔබට මෙය එකතු කළ හැකිය .gitattributes:

package-lock.json binary
yarn.lock binary

මෙහි ප්‍රති result ලයක් ලෙස "ද්විමය ලිපිගොනු / පැකේජ-අගුළු ගොනුව වෙනස් වූ විට b / package-lock.json වෙනස් වේ. මීට අමතරව, සමහර Git සේවාවන් (විශේෂයෙන් GitLab, නමුත් GitHub නොවේ) ද බැහැර කරනු ඇත. මෙය සිදු කරන විට සබැඳිව බැලීමේදී ඇති වෙනස්කම් වලින් මෙම ගොනු (තවත් 10k පේළි වෙනස් නොවේ!).


1
මම gd() { git diff --color-words $1 $2 -- :!/yarn.lock :!/package-lock.json; }අන්වර්ථ වෙනුවට මගේ .bashrc දී.
apostl3pol

18

ඔව්, ඔබට මෙම ගොනුව කළ හැකිය. සිට npm නිල ලේඛන :

package-lock.jsonගස npmවෙනස් කරන ඕනෑම මෙහෙයුම් සඳහා ස්වයංක්‍රීයව ජනනය වේ node_modules, හෝpackage.json . අතරමැදි පරායත්තතා යාවත්කාලීනයන් නොසලකා, පසුකාලීන ස්ථාපනයන්ට සමාන ගස් උත්පාදනය කිරීමට හැකි වන පරිදි ජනනය කරන ලද නිශ්චිත ගස විස්තර කරයි.

මෙම ගොනුව ප්‍රභව ගබඩාවලට බැඳීමට අදහස් කරයි [.]


13
ස්ථාපනය සැමවිටම node_modules යාවත්කාලීන නොකරන්නේද, එබැවින් package-lock.json යාවත්කාලීන කරන්නද?
ටිම් ගෝටියර්

2
නැත, ඔබට npm ciඇසුරුම්-ලොක්.ජොසන් වෙතින් ස්ථාපනය කිරීමට ධාවනය කළ හැකිය
විලියම් හැම්ප්ෂයර්

ඔබේ පිළිතුරෙහි අවධාරණය කිරීමට අවශ්‍ය වන්නේ ඔබ විසින් රෙපෝවේ පැකේජ-ලොක්.ජොසන් තිබේ නම් ඔබේ අඛණ්ඩ ඒකාබද්ධතා ගොඩනැගීම සඳහා npm ci භාවිතා කළ යුතු බවයි
MagicLAMP

7

ගෝලීයව ඇසුරුම්- lock.json අක්‍රීය කරන්න

ඔබගේ පර්යන්තයේ පහත සඳහන් දේ ටයිප් කරන්න:

npm config set package-lock false

මේක ඇත්තටම මට මැජික් වගේ වැඩ


2
මෙය ~/.npmrcඅන්තර්ගතය සමඟ (අවම වශයෙන් මගේ මැකෝස් මත) නිර්මාණය කරන package-lock=falseඅතර ඒ සමඟම ඕනෑම විශේෂිත ව්‍යාපෘතියක දී ද එය කළ හැකිය node_modules/(උදාecho 'package-lock=false' >> .npmrc
ජිමොන්ට්

7
මෙය .ණාත්මක දෙයක් වීම මට විහිළුවක්. පැකේජය- lock.json ස්වයංක්‍රීය උත්පාදනය නරක ප්‍රජා සහභාගීත්වයක් බව එන්පීඑම් ප්‍රජාවට පිළිගත නොහැකිය. කණ්ඩායම් ක්‍රියාවලියකට බලපෑම් කළ හැකි දේවල් ඔබ නොකළ යුතුය. එය බලහත්කාරයෙන් නොව සක්‍රීය කිරීමේ විකල්පයක් විය යුතුව තිබුණි. කීදෙනෙක් "git add *" කරනවාද, එය නොදැන එය ගොඩනංවයි. ඔබට කිසියම් ආකාරයක ඒකාබද්ධ කිරීමක් මත පදනම් වූ ප්‍රවාහයක් තිබේ නම්, මම දන්නවා git ප්‍රවාහය එය භාවිතා කරන අයට බයිබලය හා සමානයි, මෙය ක්‍රියා නොකරනු ඇත. ඔබට ඒකාබද්ධ වීමේ පරම්පරාවක් තිබිය නොහැක! npm අනුවාදය කැඩී ඇත, පැකේජය: 1.0.0 නිර්ණායක විය යුතුය!
එරික් ට්විලේගර්

3
මෙය අඩු ඡන්දයක් වන්නේ ඇයි? මෙය පැහැදිලිවම ක්‍රියා නොකරන අංගයක් අක්‍රීය කිරීමේ නීත්‍යානුකූල ක්‍රමයකි. එය ප්‍රශ්නයට පිළිතුරු නොදුන්නද, එය ප්‍රශ්නයට පිළිතුරු සපයයි. එනම් එයට තවදුරටත් පිළිතුරු අවශ්‍ය නොවේ. මගෙන්
සමුගන්න

එය අවතක්සේරු වීමට හේතුව ඔබ හුදෙක් අංගයක් අක්‍රීය කිරීමයි.
රාසා

5

ඔව්, එය පැකේජය- lock.json කිරීම සම්මත භාවිතයකි

Package-lock.json කිරීමට ප්‍රධාන හේතුව වන්නේ ව්‍යාපෘතියේ සිටින සියල්ලන්ම එකම පැකේජ අනුවාදයක සිටීමයි.

වාසි: -

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

අවාසි: -

  • එමඟින් ඔබගේ අදින්න ඉල්ලීම් කැත ලෙස පෙනෙනු ඇත :) '

සංස්කරණය කරන්න: - npm ස්ථාපනය මඟින් ව්‍යාපෘතියේ සිටින සියල්ලන්ම එකම පැකේජ අනුවාදයක සිටින බවට සහතික නොවේ. npm ci මේ සඳහා උපකාරී වේ.


5
ඔබ ඒ npm ciවෙනුවට භාවිතා කරන්නේ නම් අවාසි පහව යනු npm installඇත.
k0pernikus


1
"ව්‍යාපෘතියේ සිටින සියල්ලන්ම එකම පැකේජ අනුවාදයක සිටිනු ඇත. ඔබ කළ යුත්තේ npm ස්ථාපනය පමණි" සත්‍ය නොවේ, ඒ වෙනුවට "npm ci" භාවිතා කළ යුතුය
reggaeguitar

ස්තූතියි, greggaeguitar. මේ සඳහා මගේ පිළිතුර යාවත්කාලීන කිරීම.
නිඛිල් මොහදිකාර්

2

මම npm භාවිතා කරන්නේ අවම / කැත කළ CSS / js උත්පාදනය කිරීම සහ ජැන්ගෝ යෙදුමකින් සේවය කරන පිටුවල අවශ්‍ය javascript ජනනය කිරීමයි. මගේ යෙදුම්වල, ජාවාස්ක්‍රිප්ට් සජිවීකරණ නිර්මාණය කිරීම සඳහා පිටුවේ ධාවනය වේ, සමහර විට අජැක්ස් ඇමතුම් සිදු කරයි, VUE රාමුවක් තුළ වැඩ කරයි සහ / හෝ CSS සමඟ වැඩ කරයි. Package.json හි ඇති දේ කෙරෙහි පැකේජය- lock.json හට යම් පාලනයක් තිබේ නම්, මෙම ගොනුවේ එක් අනුවාදයක් තිබීම අවශ්‍ය විය හැකිය. මගේ අත්දැකීම් අනුව එය එක්කෝ npm ස්ථාපනය මඟින් ස්ථාපනය කර ඇති දේට බලපාන්නේ නැත, නැතහොත් එය සිදු වුවහොත්, එය මගේ දැනුමට යොදවා ඇති යෙදුම් වලට අහිතකර ලෙස බලපා නැත. සාම්ප්‍රදායිකව තුනී සේවාදායකයකු වන මම මොන්ගෝඩ්බ් හෝ වෙනත් එවැනි යෙදුම් භාවිතා නොකරමි.

Npm ස්ථාපනය මඟින් මෙම ගොනුව ජනනය කරන නිසාත්, npm ස්ථාපනය යෙදුම ක්‍රියාත්මක කරන සෑම සේවාදායකයකම යෙදවීමේ ක්‍රියාවලියේ කොටසකි. නෝඩ් සහ එන්පීඑම් හි අනුවාද පාලනය සෑම සේවාදායකයකම අතින් සිදු කරනු ලැබේ, නමුත් ඒවා එක හා සමාන බව මම ප්‍රවේශම් වෙමි.

කවදා ද npm install සේවාදායකය මත ධාවනය වේ, එය පැකේජය-lock.json වෙනස්, හා සේවාදායකයේ ප්රති විසින් වාර්තා කර ඇති බව ගොනුව වෙනස් වේ නම්, ඊළඟ යොදවන ඔබ සම්භවය නව වෙනස්කම් බේරා ගැනීමට ඉඩ තිබුනා. පැකේජය- lock.json වෙත සිදු කර ඇති වෙනස්කම් නැවත අදින්න නිසා ඔබට යෙදවිය නොහැක.

දේශීයව ජනනය කරන ලද පැකේජයක් වන ලොක්.ජොසන් නැවත ගබඩාවේ ඇති දේ සමඟ නැවත ලිවිය නොහැක (දෘ hard සම්භවයක් ඇති මාස්ටර් යළි පිහිටුවන්න), පැකේජය-ලොක්.ජේසන් තුළ ඇති දේ පිළිබිඹු නොවන්නේ නම් ඔබ කවදා හෝ විධානයක් නිකුත් කළ විට npm පැමිණිලි කරනු ඇත. npm ස්ථාපනය හේතුවෙන් node_modules, එමඟින් යෙදවීම බිඳ දමයි. දැන් මෙයින් ඇඟවෙන්නේ node_modules හි තරමක් වෙනස් අනුවාදයන් ස්ථාපනය කර ඇති බව නම්, නැවත වරක් මට කිසි විටෙකත් ගැටලු ඇති නොවීය.

Node_modules ඔබේ repo හි නොමැති නම් (එය එසේ නොවිය යුතුය), එවිට package-lock.json නොසලකා හැරිය යුතුය.

මට යමක් මග හැරී ඇත්නම්, කරුණාකර අදහස් දැක්වීමේදී මාව නිවැරදි කරන්න, නමුත් මෙම ගොනුවෙන් අනුවාදය ලබා ගැනීම අර්ථවත් නොවේ. Package.json ගොනුවේ අනුවාද අංක ඇති අතර, මෙම ගොනුව npm ස්ථාපනය සිදු වූ විට පැකේජ සෑදීම සඳහා භාවිතා කරන එකක් යැයි මම සිතමි, මම එය ඉවත් කරන විට, npm ස්ථාපනය පහත පරිදි පැමිණිලි කරයි:

jason@localhost:introcart_wagtail$ rm package.json
jason@localhost:introcart_wagtail$ npm install
npm WARN saveError ENOENT: no such file or directory, open '/home/jason/webapps/introcart_devtools/introcart_wagtail/package.json'

කෙසේ වෙතත්, ගොඩනැගීම අසාර්ථක වේ, කෙසේ වෙතත් node_modules ස්ථාපනය කිරීමේදී හෝ js / css සෑදීම සඳහා npm යොදන විට, මම පැකේජය-අගුළු ඉවත් කළහොත් කිසිදු පැමිණිල්ලක් සිදු නොවේ.

jason@localhost:introcart_wagtail$ rm package-lock.json 
jason@localhost:introcart_wagtail$ npm run dev

> introcart@1.0.0 dev /home/jason/webapps/introcart_devtools/introcart_wagtail
> NODE_ENV=development webpack --progress --colors --watch --mode=development

 10% building 0/1 modules 1 active ...

එක් කිරීම සඳහා, මම දැන් මගේ පැකේජය- lock.json මගේ ගබඩාවට කැප කර ඇති අතර, මකාදැමීමේ node_modules මා විශ්වාස කරන, සහ යාවත්කාලීන නොකර පැකේජය-අගුළු.ජොසන් තුළ සියල්ල ස්ථාපනය කරන මගේ පිළිතුරු සැපයිය හැකි npm ci භාවිතා කරමි. යෙදවීම සඳහා අතින් මැදිහත් වීමකින් තොරව මගේ ඉදිරිපස පුද්ගලයාට ජාවාස්ක්‍රිප්ට් දේවල් යාවත්කාලීන කිරීමට මෙය ඉඩ දෙයි.
මැජික්ලෑම්ප්

0

සියලුම පිළිතුරු "ඔව්" යැයි පවසන නමුත් එය ද ව්‍යාපෘතිය මත රඳා පවතී.

Package-lock.json පිළිබඳ එක් ප්‍රධාන විස්තරයක් නම් එය ප්‍රකාශයට පත් කළ නොහැකි අතර ටොප්ලෙවල් පැකේජය හැර වෙනත් ස්ථානයක එය හමු වුවහොත් එය නොසලකා හරිනු ඇත.

මෙයින් අදහස් කරන්නේ ඔබ package-lock.jsonයැපීම සඳහා npm හි ප්‍රකාශයට පත් කිරීමට අවශ්‍ය නොවන නමුත් package-lock.jsonඔබේ පරීක්ෂණ පරායත්තතාවයේ අනුවාදය අගුළු දැමීමට, පරායත්තතා ගොඩනඟා ගැනීමට ඔබේ repo හි භාවිතා කළ යුතු බවයි …

කෙසේ වෙතත්, ඔබ බහු පැකේජ සහිත ව්‍යාපෘති කළමනාකරණය කිරීම සඳහා ලර්නා භාවිතා කරන්නේ නම් , ඔබ package.jsonඑක් එක් උප පැකේජයේ නොව , ඔබේ ගබඩාවේ මූලයට පමණක් දැමිය යුතුය npm init. ඔබට එවැනි දෙයක් ලැබෙනු ඇත:

.git
lerna.json
package.json
package-lock.json        <--- here
packages/a/package.json
packages/a/lib/index.js
packages/b/package.json
packages/b/lib/index.js
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.