npm 5 අද නිකුත් කරන ලද අතර නව අංගයන්ගෙන් එකක් වන්නේ package-lock.json
ගොනුවක් සෑදීම සමඟ නිර්ණායක ස්ථාපනය කිරීමයි .
මෙම ගොනුව ප්රභව පාලනයේ තබා ගත යුතුද?
මම හිතන්නේ එය සමාන වන yarn.lock
අතර composer.lock
, මේ දෙකම ප්රභව පාලනයේ තබා ගත යුතුය.
npm 5 අද නිකුත් කරන ලද අතර නව අංගයන්ගෙන් එකක් වන්නේ package-lock.json
ගොනුවක් සෑදීම සමඟ නිර්ණායක ස්ථාපනය කිරීමයි .
මෙම ගොනුව ප්රභව පාලනයේ තබා ගත යුතුද?
මම හිතන්නේ එය සමාන වන yarn.lock
අතර composer.lock
, මේ දෙකම ප්රභව පාලනයේ තබා ගත යුතුය.
Answers:
ඔව්, package-lock.json
ප්රභව පාලනයට පරීක්ෂා කිරීමට අදහස් කෙරේ. ඔබ npm 5 භාවිතා කරන්නේ නම්, ඔබට මෙය විධාන රේඛාවේ දැකිය හැකිය: created a lockfile as package-lock.json. You should commit this file.
අනුව npm help package-lock.json
:
package-lock.json
npmnode_modules
ගස වෙනස් කරන ඕනෑම මෙහෙයුම් සඳහා ස්වයංක්රීයව ජනනය වේ , හෝpackage.json
. අතරමැදි පරායත්තතා යාවත්කාලීනයන් නොසලකා, පසුකාලීන ස්ථාපනයන්ට සමාන ගස් උත්පාදනය කිරීමට හැකි වන පරිදි ජනනය කරන ලද නිශ්චිත ගස විස්තර කරයි.මෙම ගොනුව ප්රභව ගබඩාවලට කැපවීමට අදහස් කරන අතර විවිධ අරමුණු සඳහා සේවය කරයි:
පරායත්තතා ගසක තනි නිරූපණයක් විස්තර කරන්න, එනම් කණ්ඩායම් සාමාජිකයන්, යෙදවීම් සහ අඛණ්ඩ ඒකාබද්ධතාවය එකම පරායත්තතාවයන් ස්ථාපනය කිරීමට සහතික වේ.
node_modules
නාමාවලියම සිදු නොකර පරිශීලකයින්ට පෙර ප්රාන්තවලට "කාල ගමන්" කිරීමට පහසුකමක් ලබා දෙන්න .කියවිය හැකි ප්රභව පාලනය හරහා ගස් වෙනස්වීම් වැඩි දෘශ්යතාවයකට පහසුකම් සැපයීම.
කලින් ස්ථාපනය කර ඇති පැකේජ සඳහා නැවත නැවත පාර-දත්ත විභේදන මඟ හැරීමට npm ට ඉඩ දීමෙන් ස්ථාපන ක්රියාවලිය ප්රශස්ත කරන්න.
එක් ප්රධාන විස්තරයක්
package-lock.json
නම් එය ප්රකාශයට පත් කළ නොහැකි අතර, ටොප්ලෙවල් පැකේජය හැර වෙනත් ස්ථානයක එය සොයාගත හොත් එය නොසලකා හරිනු ඇත. එය npm-shrinkwrap.json (5) සමඟ ආකෘතියක් බෙදා ගනී, එය අත්යවශ්යයෙන්ම එකම ගොනුව වන නමුත් ප්රකාශනයට ඉඩ දෙයි. සීඑල්අයි මෙවලමක් යෙදවීම හෝ නිෂ්පාදන පැකේජ නිෂ්පාදනය සඳහා ප්රකාශන ක්රියාවලිය භාවිතා කිරීම හැර මෙය නිර්දේශ නොකරයි.දෙකම
package-lock.json
සහnpm-shrinkwrap.json
පැකේජයක මුලෙහි තිබේ නම්,package-lock.json
සම්පූර්ණයෙන්ම නොසලකා හරිනු ඇත.
package-lock.json
මගේ එකතු කිරීමට යොමු විය යුතුව ඇත .gitignore
... එය විසඳීමට වඩා මට බොහෝ ගැටලු ඇති කළේය. අප ඒකාබද්ධ කරන විට හෝ නැවත ප්රතිස්ථාපනය කරන විට එය සැමවිටම ගැටුම් ඇති වන අතර, ඒකාබද්ධ package-lock.json
කිරීම සීඅයි සේවාදායකයේ දූෂිත වීමට හේතු වූ විට, එය නිවැරදි කිරීම සඳහා රැඳී සිටීම වේදනාවක් පමණි.
ඔව්, එය පිරික්සීමට අදහස් කර ඇත. එයට යෝජනා කිරීමට එයටම ආවේණික වූ කැපවීමක් ලැබේ. එය අපගේ වෙනස්කම් වලට විශාල ශබ්දයක් එක් කරන බව අපට පෙනී යයි.
package-lock.json
ටන්ක සහ අතු සහිත SCM පද්ධතියක වැඩ කිරීමේදී ගොනුව පිළිබඳ කිසියම් උපදෙස් තිබේද? කඳට ඒකාබද්ධ කළ යුතු ශාඛාවක මම යම් යම් වෙනස්කම් කරමින් සිටිමි ... මට දැන් (කෙසේ හෝ) package-lock.json
ලිපිගොනු දෙක අතර ගැටුම් නිරාකරණය කළ යුතුද? මෙය වේදනාකාරී බවක් දැනේ.
ඔව්, ඔබ කළ යුත්තේ:
package-lock.json
.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
පැකේජ අගුල් වලට ලියන්නේ නැත : ස්ථාපනයන් අත්යවශ්යයෙන්ම ශීත කර ඇත.
සටහන: මම සමාන පිළිතුරක් මෙහි පළ කළෙමි
whose build would fail one day because a random dependency got a breaking update
යම් ආකාරයක ගැටලුවකින් බේරා ගනී . එය දරුවාගේ යැපීමේ හැකියාව අතහැර දැමුවද, එය එකම ප්රශ්නයකි.
ඔව්, හොඳම පුරුද්ද වන්නේ පිරික්සීමයි (ඔව්, පරීක්ෂා කරන්න)
වෙනස දකින විට එය විශාල ශබ්දයක් හෝ ගැටුමක් ඇති කරන බව මම එකඟ වෙමි. නමුත් වාසි වන්නේ:
^1.2.3
ඔබේ භාවිතා කළ හැකිය package.json
, නමුත් සෑම අවස්ථාවකම npm install
ඔබේ dev යන්ත්රයේ සහ ගොඩනංවන සේවාදායකයේ, විශේෂයෙන්ම වක්ර පරායත්තතා පැකේජවල එකම අනුවාදයක් ලබා ගන්නා බව සහතික කරන්නේ කෙසේද ? හොඳයි, package-lock.json
එය සහතික කරනු ඇත. ( npm ci
අගුළු ගොනුව මත පදනම්ව පැකේජ ස්ථාපනය කරන ආධාරයෙන් )npm audit fix
(විගණන විශේෂාංගය npm අනුවාදය 6 වෙතින් බව මම සිතමි).npm ci
. package-lock.json
ඇසුරුම් නිශ්චිතවම ස්ථාපනය කිරීමට ඉඩ දෙන බව මිනිසුන් නිතරම සඳහන් කරන නමුත් මෙම හැසිරීමට පහසුකම් සපයන විධානය කිසි විටෙකත් සඳහන් නොකරයි! බොහෝ අය වැරදියට උපකල්පනය npm install
කරන්නේ අගුළු ගොනුවේ ඇති දේ හරියටම ස්ථාපනය කර ඇති බවයි ...
npm ci
. යාවත්කාලීන කළ යුත්තේ කවදාදැයි ඔබේ කණ්ඩායමට / ඊයම් සංවර්ධකයාට තීරණය කළ හැකිය. සෑම කෙනෙකුම එය අත්තනෝමතික ලෙස සිදු කරන්නේ නම්, එහි කිසිදු තේරුමක් නැති අතර, එය ඔබගේ ගබඩාවේ ශබ්දය නිර්මාණය කරයි. එන්පීඑම් ප්රලේඛනය මෙය වඩාත් පැහැදිලි කළ යුතුය. මම හිතන්නේ බොහෝ සංවර්ධකයින් මෙම අංගයෙන් ව්යාකූල වී ඇත.
මම මෙම ගොනුව මගේ ව්යාපෘති වල නොකරමි. කාරණය කුමක්ද?
මගේ පැකේජයේ. Json ලිබ් සඳහා මම කිසි විටෙකත් භාවිතා නොකරන බව සත්යයක් වුවද, ඒ සමඟ මට නරක අත්දැකීම් ඇති බැවිනි.
package-lock.json
. සමහර ගබඩාවලට එය තිබීමෙන් ලැබෙන ප්රතිලාභ අවශ්ය නොවිය හැකි අතර, ප්රභවයෙන් ස්වයංක්රීයව ජනනය කළ අන්තර්ගතයක් නොතිබීමට කැමති විය හැකිය.
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 පේළි වෙනස් නොවේ!).
gd() { git diff --color-words $1 $2 -- :!/yarn.lock :!/package-lock.json; }
අන්වර්ථ වෙනුවට මගේ .bashrc දී.
ඔව්, ඔබට මෙම ගොනුව කළ හැකිය. සිට npm නිල ලේඛන :
package-lock.json
ගසnpm
වෙනස් කරන ඕනෑම මෙහෙයුම් සඳහා ස්වයංක්රීයව ජනනය වේnode_modules
, හෝpackage.json
. අතරමැදි පරායත්තතා යාවත්කාලීනයන් නොසලකා, පසුකාලීන ස්ථාපනයන්ට සමාන ගස් උත්පාදනය කිරීමට හැකි වන පරිදි ජනනය කරන ලද නිශ්චිත ගස විස්තර කරයි.මෙම ගොනුව ප්රභව ගබඩාවලට බැඳීමට අදහස් කරයි [.]
npm ci
ඇසුරුම්-ලොක්.ජොසන් වෙතින් ස්ථාපනය කිරීමට ධාවනය කළ හැකිය
ගෝලීයව ඇසුරුම්- lock.json අක්රීය කරන්න
ඔබගේ පර්යන්තයේ පහත සඳහන් දේ ටයිප් කරන්න:
npm config set package-lock false
මේක ඇත්තටම මට මැජික් වගේ වැඩ
~/.npmrc
අන්තර්ගතය සමඟ (අවම වශයෙන් මගේ මැකෝස් මත) නිර්මාණය කරන package-lock=false
අතර ඒ සමඟම ඕනෑම විශේෂිත ව්යාපෘතියක දී ද එය කළ හැකිය node_modules/
(උදාecho 'package-lock=false' >> .npmrc
ඔව්, එය පැකේජය- lock.json කිරීම සම්මත භාවිතයකි
Package-lock.json කිරීමට ප්රධාන හේතුව වන්නේ ව්යාපෘතියේ සිටින සියල්ලන්ම එකම පැකේජ අනුවාදයක සිටීමයි.
වාසි: -
අවාසි: -
සංස්කරණය කරන්න: - npm ස්ථාපනය මඟින් ව්යාපෘතියේ සිටින සියල්ලන්ම එකම පැකේජ අනුවාදයක සිටින බවට සහතික නොවේ. npm ci මේ සඳහා උපකාරී වේ.
npm ci
වෙනුවට භාවිතා කරන්නේ නම් අවාසි පහව යනු npm install
ඇත.
මම 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 ...
සියලුම පිළිතුරු "ඔව්" යැයි පවසන නමුත් එය ද ව්යාපෘතිය මත රඳා පවතී.
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
git log
සමඟ කටයුතු කිරීම පහසු කරයි.