Npm-shrinkwrap.json এবং প্যাকেজ-লক.জসনের মধ্যে পার্থক্য কী?


158

সঙ্গে npm মুক্তির @ 5 , এটি এখন একটি লিখতে হবে package-lock.jsonযদি না npm-shrinkwrap.jsonইতিমধ্যেই বিদ্যমান।

আমি বিশ্বব্যাপী এনপিএম @ 5 ইনস্টল করেছি:

npm install npm@5 -g

এবং এখন, যদি এর মধ্যে একটি npm-shrinkwrap.jsonপাওয়া যায়:

npm install

একটি সতর্কতা মুদ্রিত করা হবে:

npm WARN read-shrinkwrap This version of npm
is compatible with lockfileVersion@1,
but npm-shrinkwrap.json was generated for lockfileVersion@0.
I'll try to do my best with it!

সুতরাং আমার গ্রহণযোগ্যতাটি হ'ল যে আমি সঙ্কুচিতভাবে প্রতিস্থাপন করা উচিত package-lock.json

তবুও কেন এটির জন্য একটি নতুন ফর্ম্যাট আছে? কি করতে package-lock.jsonযে কি npm-shrinkwrap.jsonনা?

উত্তর:


176

ফাইলগুলির ঠিক একই বিষয়বস্তু রয়েছে তবে ডকস সাইটে বর্ণিত এনপিএম কীভাবে হ্যান্ডেল করে এবং এনপিএম রেপোতে একটি ডক্স ফাইলে এই দুটি ফাইলের মধ্যে পার্থক্যটি সুস্পষ্টভাবে সম্বোধন করে শুরু হয় তার মধ্যে অনেকগুলি পার্থক্য রয়েছে :

  • package-lock.jsonকখনই এনএমপি তে প্রকাশিত হয় না, যেখানে npm-shrinkwrapডিফল্টরূপে হয়
  • package-lock.json শীর্ষ স্তরের প্যাকেজে থাকা ফাইলগুলিকে উপেক্ষা করা হয়, তবে নির্ভরতার সাথে সংযুক্ত ফাইলগুলি সঙ্কুচিত করা হয়
  • npm-shrinkwrap.jsonএনপিএম সংস্করণ 2, 3 এবং 4 এর সাথে পিছনে সামঞ্জস্যপূর্ণ, যেখানে package-lock.jsonকেবল এনএমপি 5+ দ্বারা স্বীকৃত

আপনি একটি বিদ্যমান রূপান্তর করতে পারেন package-lock.jsonএকটি থেকে npm-shrinkwrap.jsonচলমান দ্বারা npm shrinkwrap

এভাবে:

  • যদি আপনি আপনার প্যাকেজটি এনপিএমে প্রকাশ না করেন তবে এই দুটি ফাইলের মধ্যে পছন্দ খুব কম ফলাফল করবে। আপনি package-lock.jsonএটি ব্যবহার করতে ইচ্ছুক হতে পারেন কারণ এটি ডিফল্ট এবং এর নাম এনপিএম শুরুর দিকে আরও স্পষ্ট; বিকল্পভাবে, আপনি npm-shrinkwrap.jsonএনপিএম 2-4 এর সাথে পিছনের সামঞ্জস্যের জন্য ব্যবহার করতে ইচ্ছুক হতে পারেন যদি আপনার বিকাশের দলের প্রত্যেককে এনপিএম 5+ এ নিশ্চিত করা আপনার পক্ষে কঠিন হয়। (দ্রষ্টব্য যে এনপিএম 5 মে 25 শে মে 2017 এ প্রকাশিত হয়েছিল; পশ্চাদগামী সামঞ্জস্যতা সেই তারিখ থেকে আমরা যত বেশি পাব ততই কম গুরুত্বপূর্ণ হয়ে উঠবে, কারণ বেশিরভাগ লোক শেষ পর্যন্ত আপগ্রেড করবে))
  • আপনি যদি করছে npm আপনার প্যাকেজ প্রকাশ, আপনি মধ্যে একটা চয়েস আছে:

    1. package-lock.jsonআপনি যে ইনস্টলডেন্সিটির ঠিক কোন সংস্করণ ইনস্টল করেছেন তা রেকর্ড করতে একটি ব্যবহার করে , তবে আপনার প্যাকেজ ইনস্টল করা লোকেরা আপনার দ্বারা নির্ধারিত সংস্করণ সীমার সাথে সামঞ্জস্যপূর্ণ নির্ভরতার কোনও সংস্করণ ব্যবহার করতে দেয় package.json, বা
    2. npm-shrinkwrap.jsonআপনার প্যাকেজটি ইনস্টল করা প্রত্যেকে সমস্ত নির্ভরতার ঠিক একই সংস্করণ পায় কিনা তা গ্যারান্টি হিসাবে ব্যবহার করে


    ডক্সে বর্ণিত সরকারী দৃষ্টিভঙ্গি (খুব নিখরচায়) হ'ল বিকল্পটি 1 লাইব্রেরিগুলির জন্য ব্যবহার করা উচিত (সম্ভবত প্যাকেজের অনেকগুলি নির্ভরশীলতা সমস্ত একই মাধ্যমিক নির্ভরতার সামান্য ভিন্ন সংস্করণের উপর নির্ভর করে তখন প্যাকেজ নকলের পরিমাণ হ্রাস করতে পারে) , তবে সেই বিকল্প 2 এক্সিকিউটেবলের জন্য যুক্তিসঙ্গত হতে পারে যা বিশ্বব্যাপী ইনস্টল হতে চলেছে।


2
+1 - আপনি কি আপনার দ্বিতীয় বুলেট পয়েন্টটি পরিষ্কার করতে পারবেন? সেই আচরণ এবং একটি এনপিএম-সঙ্কুচিত হওয়াতে পার্থক্য কী?
রাইস

2
@Rhys দ্বিতীয় বুলেটটি অভ্যাসে কিছু আসে যায় না যদি আপনি কিছু অদ্ভুত কিছু না করেন। মূলত, এটা ঠিক বলেছেন যে যদি একটি লাইব্রেরি একরকম করেনি প্রকাশ একটি package-lock.json(যা সম্ভব নয়), তারপর যদি আপনি কিছু অন্যান্য প্যাকেজের নির্ভরশীলতা রূপে লাইব্রেরির ইনস্টল করার ছিল, লাইব্রেরির package-lock.jsonNPM দ্বারা উপেক্ষিত হবে। তবে, যদি কোনও লাইব্রেরি একটি প্রকাশ করে npm-shrinkwrap.jsonএবং আপনি লাইব্রেরিটিকে নির্ভরতা হিসাবে ইনস্টল করেন, তবে আপনি গ্রন্থাগারটিতে উল্লিখিত সমস্ত নির্ভরতার সঠিক সংস্করণকে মাধ্যমিক নির্ভরতা হিসাবেও ইনস্টল করবেন । npm-shrinkwrap.json
মার্ক অ্যামেরি

আপনি কি দয়া করে কেবল পঠনযোগ্যরূপে npm ciইনস্টলেশনটি বীমা করার জন্য বিদ্যমান যা যুক্ত করতে পারেন package-lock.json। ( npm installকারণজনিত package-lock.jsonবিভ্রান্তি এবং সম্ভাব্য বাগগুলি রূপান্তরিত করে এবং package-lock.jsonপ্রতি
সেফের

@ k0pernikus আমি npm ciহ্যান্ডলগুলি npm-shrinkwrap.jsonএবং package-lock.jsonএই দুটি ফাইলের মধ্যে পার্থক্য সম্পর্কে এই প্রশ্নের সাথে এর প্রাসঙ্গিকতাটির মধ্যে কোনও পার্থক্য আছে বলে আমি মনে করি না ? এছাড়াও, চারপাশে পড়ার পরে: আমি মনে করি যে " npm install... এর সুবিধা নেবে না package-lock.json" এনপিএম 5.4 থেকে মিথ্যা হয়েছে - আমি বিশ্বাস করি যে npm installএখন আপনার সম্মান করা package-lock যদি না এটি আপনার সাথে সম্পূর্ণ অসম্পূর্ণ হয় package.json, তবে পরবর্তী ক্ষেত্রে অগ্রাধিকার গ্রহণ করবে। (তবে আমি কিছুটা সময়ের জন্য জাভাস্ক্রিপ্টের জগতের বাইরে চলে এসেছি - আমি কি কিছু অনুভব করছি?)
মার্ক অ্যামেরি

27

এনপিএম বিকাশকারী থেকে ব্যাখ্যা :

এই ধারণাটি অবশ্যই প্যাকেজ-লক.জসনের জন্য সঙ্কুচিত প্রযুক্তিগুলির ক্ষেত্রে সর্বশেষ এবং সর্বশ্রেষ্ঠ এবং npm-shrinkwrap.json যারা সেই সমস্ত মূল্যবান কয়েকজন লোকের জন্য সংরক্ষিত থাকবে যারা তাদের গ্রন্থাগারগুলি সম্পর্কে সঠিক নোড_মডিউলগুলি রাখার বিষয়ে খুব বেশি যত্নশীল - এবং যে সমস্ত লোক সিএমআই চান তাদের জন্য এনএমপি @> = 2 ব্যবহার করে কোনও এনএমপি সংস্করণটি নাড়িয়েই একটি নির্দিষ্ট গাছ ইনস্টল করতে পারেন।

নতুন লকফিল ("প্যাকেজ-লক.জসন") মূলত একই কোডটির সমস্ত ভাগ করে, এনপিএম-সঙ্কুচিত আকারের একই বিন্যাস (আপনি একে অপরের মধ্যে নাম পরিবর্তন করতে পারেন!)। এটি সম্প্রদায়টি বোঝার মতো এমন কিছু মনে হচ্ছে: "এটিতে একটি লকফিল রয়েছে" এটি লোকেদের সাথে এত দ্রুত ক্লিক করেছে। পরিশেষে, একটি নতুন ফাইল থাকার অর্থ হ'ল আমরা পিতামাতার পোস্টে উল্লিখিত অনুমতি-প্রকাশনার মতো অদ্ভুত কিছু না করে সঙ্কুচিতভাবে তুলনামূলকভাবে কম-ঝুঁকিযুক্ত পেছনের দিকে তুলনা করতে পারি।


18
আমি এখনও পার্থক্য সম্পর্কে পরিষ্কার না। যদি npm-shrinkwrapসঠিক নোড_মডিউলগুলির জন্য হয় .... আমি ধরে নিচ্ছি যে সঠিকের package-lock.jsonচেয়ে কম লক করছে? এবং যদি তাই হয় তবে লকিংটি লকিংয়ের কী নয় npm-shrinkwrap?
dman

আপনি এটি @Dman ভুল পেয়েছেন। প্যাকেজ-লক হল এনপিএম-সঙ্কলন মোড়কের নতুন সংস্করণ। প্যাকেজ-লকটি অপ্ট-আউট হয়ে গেছে (সুতরাং এটি আপনাকে ডিফল্ট সক্ষম করার কারণে বৈশিষ্ট্যটি সরিয়ে ফেলতে হবে), এনপিএম-সঙ্কুচিতটি অপ্ট-ইন (যাতে এটি আমার ডিফল্ট অন্তর্ভুক্ত না হওয়ায় আপনাকে এটি সক্ষম করতে হবে)। তারা প্যাকেজ-লক প্রবর্তন করার কারণটি হ'ল 1. ব্যবহারকারীর এখন নির্ভরতা মোকাবেলার একটি নিরাপদ উপায় রয়েছে কারণ এটি ডিফল্টরূপে সক্ষম হয় এবং ২. নামটি বোঝায় যে এটি "সঙ্কুচিত" এর অপোসটিতে কী রয়েছে। npm-shrinkwrap এর কিছু বিশেষ নির্ভরতা-আচরণের সেটিংস ছিল যা এখন প্যাকেজ-লকে নেই। npm-shrinkwrap এখন অপ্রচলিত।
সিরিয়াস এম

10
এটি ভুল। এই বলে যে প্যাকেজ-লকটি এনপিএম-সঙ্কোচনের নতুন সংস্করণ, আপনি বলছেন এটি একটি প্রতিস্থাপন। npm-shrinkwrap হ্রাস করা হয় না এবং প্যাকেজ-লক.জসনের সাথে পার্থক্য রয়েছে। তদ্ব্যতীত, প্যাকেজ-লক.জসনের একটি বাগ রয়েছে যখন এনপিএম-সঙ্কুচিত হয় না ... সুতরাং তারা একই কোড না হওয়ায় আরও বেশি জোর দেয় are
dman

এছাড়াও প্যাকেজ-লক.জসন অনুপ্রবেশকারী। সুতরাং এটি সহজেই স্ক্যাম সংঘাত সৃষ্টি করতে পারে যদি আপনি "এনএমপি আই" কল করেন তবে সঙ্কুচিতভাবে স্পষ্টভাবে উত্পন্ন করা উচিত এবং সিআই সার্ভারগুলিতে দ্বন্দ্ব সৃষ্টি না করে। হ্যাঁ, আমি এখানে ভুল হতে পারি।
নোরখভ

@dman "প্যাকেজ-লক.জসনের একটি বাগ রয়েছে যখন এনপিএম-সঙ্কুচিত হয় না" - না এটি হয় না। আপনি যে সমস্যার সাথে যুক্ত হয়েছেন তাতে এর কোনও ইঙ্গিত নেই; এমনকি এটি উল্লেখ না npm-shrinkwrap। আমি আমার উত্তর করে মনে রাখবেন, একটি রূপান্তর package-lock.jsonএকটি থেকে npm-shrinkwrap.jsonআক্ষরিক শুধু ফাইল পুনঃনামকরনের দ্বারা সম্পন্ন করা হয়; তারা হয় "একই কোড"।
মার্ক আমেরিকা

12

আমি মনে করি এই ধারণাটি ছিল - সেভ এবং সঙ্কুচিত হওয়া ডিফল্টরূপে ঘটেছিল তবে সংকুচিতভাবে ঘটে যাওয়া কোনও সম্ভাব্য সমস্যা এড়াতে হবে যেখানে এটি চাওয়া হয়নি। সুতরাং, কোনও দ্বন্দ্ব এড়াতে তারা কেবল এটিকে একটি নতুন ফাইলের নাম দিয়েছেন। এনপিএম থেকে কেউ এখানে আরও বিশদ ব্যাখ্যা করেছেন:

https://www.reddit.com/r/javascript/comments/6dgnnq/npm_v500_released_save_by_default_lockfile_better/di3mjuk/

প্রাসঙ্গিক উক্তি:

এনপিএম আপনার উত্স ডিরেক্টরিতে বেশিরভাগ ফাইল ডিফল্টরূপে প্রকাশ করে এবং বহু বছর ধরে লোকেরা সঙ্কুচিত আকারে প্রকাশ করছে। আমরা সামঞ্জস্যতা ভাঙতে চাইনি। - সেভ এবং সঙ্কুচিতভাবে ডিফল্টরূপে, এটির দুর্ঘটনাক্রমে এটিকে তৈরি করা এবং রেজিস্ট্রি মাধ্যমে প্রচার করার একটি বড় ঝুঁকি ছিল এবং মূলত আমাদের ডেপগুলি আপডেট করার এবং ডিডুপ করার ক্ষমতাটি নাল ...

তাই আমরা একটি নতুন নাম বেছে নিয়েছি। এবং আমরা হঠাৎ করে একটি নতুন নামের ধরণ বেছে নিয়েছি। নতুন লকফিলটি মূলত একই কোডটি, একই একই বিন্যাসের ভাগ করে format

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.