এনপিএম @ 5 প্রকাশিত হয়েছে, এটিতে একটি নতুন বৈশিষ্ট্য প্যাকেজ-লক.জসন ফাইল রয়েছে (পরে npm install
) যা আমাকে বিভ্রান্ত করে। আমি জানতে চাই, এই ফাইলটির প্রভাব কী?
এনপিএম @ 5 প্রকাশিত হয়েছে, এটিতে একটি নতুন বৈশিষ্ট্য প্যাকেজ-লক.জসন ফাইল রয়েছে (পরে npm install
) যা আমাকে বিভ্রান্ত করে। আমি জানতে চাই, এই ফাইলটির প্রভাব কী?
উত্তর:
এটি প্যাকেজ.জসন নিজেই (যেমন 1.0। *) এর মতো তারকাযুক্ত সংস্করণ ব্যবহার না করে একটি নির্ভুল, সংস্করণযুক্ত নির্ভরতা গাছ সঞ্চয় করে। এর অর্থ আপনি অন্যান্য বিকাশকারীদের বা প্রোড রিলিজ ইত্যাদির জন্য নির্ভরতার গ্যারান্টি দিতে পারেন etc.
থেকে npm ডক্স :
প্যাকেজ-লক.জসন স্বয়ংক্রিয়ভাবে এমন কোনও ক্রিয়াকলাপের জন্য উত্পন্ন হয় যেখানে এনএমপি নোড_মডিউল গাছ বা প্যাকেজ.জসনকে সংশোধন করে। এটি সঠিক গাছ যা উত্পন্ন হয়েছিল তা বর্ণনা করে, যেমন পরবর্তী ইনস্টলেশনগুলি মধ্যবর্তী নির্ভরতা আপডেটগুলি নির্বিশেষে অভিন্ন গাছ উত্পন্ন করতে সক্ষম হয়।
এই ফাইলটি উত্স ভাণ্ডারগুলিতে প্রতিশ্রুতিবদ্ধ হওয়ার উদ্দেশ্যে এবং বিভিন্ন উদ্দেশ্যে পরিবেশন করা হয়েছে:
নির্ভরতা গাছের একক উপস্থাপনা বর্ণনা করুন যেমন সতীর্থ, স্থাপনা এবং অবিচ্ছিন্ন একীকরণ হুবহু একই নির্ভরতা ইনস্টল করার গ্যারান্টিযুক্ত।
ব্যবহারকারীদের ডিরেক্টরি নষ্ট না করেই নোড_মডিউলগুলির পূর্ববর্তী রাজ্যে "সময়-ভ্রমণ" করার জন্য একটি সুবিধা সরবরাহ করুন।
পাঠযোগ্য উত্স নিয়ন্ত্রণ নিয়ন্ত্রণের মাধ্যমে গাছের পরিবর্তনের বৃহত্তর দৃশ্যমানতার সুবিধার্থে।
পূর্বে ইনস্টল করা প্যাকেজগুলির জন্য পুনরাবৃত্ত মেটাডেটা রেজোলিউশনগুলি এড়িয়ে যাওয়ার জন্য এনপিএমকে অনুমতি দিয়ে ইনস্টলেশন প্রক্রিয়াটি অনুকূলকরণ করুন ""
ঠিক সংস্করণ সংখ্যা সহ প্যাকেজ.জসন ব্যবহার সম্পর্কে নীচে জড়হালির প্রশ্নের উত্তর দিতে। মনে রাখবেন যে আপনার প্যাকেজ.জসনে আপনার সরাসরি নির্ভরতা রয়েছে, আপনার নির্ভরতার নির্ভরতা নয় (কখনও কখনও নেস্টেড নির্ভরতাও বলা হয়)। এর অর্থ হল স্ট্যান্ডার্ড প্যাকেজ.জসনের সাহায্যে আপনি n নেস্টেড নির্ভরতাগুলির সংস্করণগুলি নিয়ন্ত্রণ করতে পারবেন না, সরাসরি উল্লেখ করা বা পিয়ার নির্ভরতা হিসাবে আপনাকে সহায়তা করবে না কারণ আপনি যে ভার্সন সহনশীলতাও এই নেস্টেড নির্ভরতাগুলির জন্য নির্ধারিত সংস্করণ সহ্য করতে পারবেন না ।
এমনকি আপনি যদি আপনার প্রত্যক্ষ নির্ভরতার সংস্করণগুলি লক করে রাখেন তবে আপনি 100% গ্যারান্টি দিতে পারবেন না যে আপনার পূর্ণ নির্ভরতা গাছ প্রতিবার অভিন্ন হবে। দ্বিতীয়ত আপনি আপনার প্রত্যক্ষ নির্ভরতার অবিচ্ছেদী পরিবর্তনগুলি (শব্দার্থক সংস্করণের উপর ভিত্তি করে) অনুমোদন দিতে চাইতে পারেন যা আপনাকে নেস্টেড নির্ভরতাগুলির এমনকি আরও কম নিয়ন্ত্রণ দেয় এবং আপনি আবার গ্যারান্টি দিতে পারবেন না যে আপনার প্রত্যক্ষ নির্ভরতা কোনও মুহুর্তে শব্দার্থক সংস্করণের নিয়ম ভাঙ্গবে না guarantee নিজেদের.
এই সমস্তটির সমাধান হ'ল লক ফাইল যা সম্পূর্ণ নির্ভরতা গাছের সংস্করণগুলিতে উপরে লক হিসাবে বর্ণনা করা হয়েছে। এটি আপনাকে অন্যান্য বিকাশকারীদের বা রিলিজের জন্য আপনার নির্ভরশীলতা গাছের গ্যারান্টি দিতে দেয় যখন এখনও আপনার স্ট্যান্ডার্ড প্যাকেজ.জসন ব্যবহার করে নতুন নির্ভরতা সংস্করণ (প্রত্যক্ষ বা অপ্রত্যক্ষ) পরীক্ষা করার অনুমতি দেয়।
বিশেষ দ্রষ্টব্য। পূর্ববর্তী সঙ্কুচিত মোড়ক জেসন বেশ একই জিনিস করেছিল তবে লক ফাইলটির নামটি পুনরায় নামকরণ করে যাতে এটির কার্যকারিতা আরও পরিষ্কার হয়। যদি প্রকল্পটিতে ইতিমধ্যে সঙ্কুচিত মোড়কের ফাইল থাকে তবে এটি কোনও লক ফাইলের পরিবর্তে ব্যবহৃত হবে।
package-lock.json
ফাইল আপডেট করা হচ্ছে প্রতি একক সময় আপনি ইনস্টল npm কল NPM 5.1 থেকে। (পরিবর্তন github.com/npm/npm/issues/16866 , উদাহরণ github.com/npm/npm/issues/17979 ) সুতরাং করতে আর সব ডেভেলপারদের জন্য একই সংস্করণ সেট ব্যবহার করা যেতে , যদি না আপনি সঠিক সংস্করণ উল্লেখ আপনার ফাইলের 1.2.3
পরিবর্তে পছন্দ করুন। 1.2.*
package.json
npm ci
সাথে npm install
আপনাকে সিআই এর সামগ্রী ব্যবহার করার জন্য আপনার কাছে একটি উল্লেখ যুক্ত করা উচিত । কেবলমাত্র npm ci
আপনিই পুনরাবৃত্তিযোগ্য দৃust় বিল্ডগুলি পাবেন।
এটি এনপিএমের জন্য একটি অত্যন্ত গুরুত্বপূর্ণ উন্নতি: প্রতিটি প্যাকেজের সঠিক সংস্করণের গ্যারান্টি দেয় ।
আপনার প্রকল্পটি বিভিন্ন সময়ে একই পরিবেশে একই প্যাকেজগুলির সাথে নির্মিত কীভাবে নিশ্চিত করবেন? ধরা যাক, আপনি ^1.2.3
আপনার ব্যবহার করতে পারেন package.json
, বা আপনার কিছু নির্ভরশীলতা সেভাবে ব্যবহার করছেন তবে আপনি কীভাবে নিশ্চিত করতে পারবেন যে প্রতিবার npm install
আপনার ডিভাইস এবং বিল্ড সার্ভারে একই সংস্করণটি বেছে নেবে? প্যাকেজ-লক.জসন এটি নিশ্চিত করবে।
npm install
বিল্ড সার্ভার বা স্থাপনার সার্ভারে লক ফাইলটি পুনরায় উত্পন্ন করবে, npm ci
যা (লক ফাইল থেকে পড়বে এবং পুরো প্যাকেজ ট্রিটি ইনস্টল করবে)
package-lock.json
ফাইলটি একেবারেই পড়ে না । এটি আগের package.json
মতোই ইনস্টল করে। package-lock.json
ফাইলটি ব্যবহার করতে , আপনাকে নতুন "এনপিএম সিআই" কমান্ডটি ব্যবহার করতে হবে, যা উল্লিখিত package-lock.json
সংস্করণটির পরিবর্তে উল্লিখিত সংস্করণগুলি ইনস্টল করবে package.json
।
npm install
নেই থেকে পড়া package-lock.json
। পুনরুত্পাদন করতে, নিম্নলিখিতটি করুন। এই প্যাকেজ.জসন ব্যবহার করে, চালান npm install
{... "" ডিভিনিডেন্ডেন্স ": {" সিনোন ":" 7.2.2 "}} এখন অনুলিপি / আটকান package.json
এবং package-lock.json
একটি নতুন ডিরেক্টরিতে। এতে পরিবর্তন package.json
করুন: "সিনন": "^ 7.2.2" রান npm install
। এনপিএম প্যাকেজ-লক.জসন থেকে পড়ে এবং 7.3.0 এর পরিবর্তে 7.2.2 ইনস্টল করে। প্যাকেজ-লক.জসন ছাড়া 7.3.0 ইনস্টল করা হবে।
package-lock.json
করার একমাত্র যুক্তিযুক্ত উপায় হ'ল এটি মুছে ফেলা package-lock.json
এবং পুনরায় জেনারেট করে ব্যবহার করে npm install
। (আপনি নিজে সম্পাদনা করতে চান না package-lock.json
)। (শীর্ষ নিকটে) এর "সংস্করণ" সম্পত্তির মূল্য পরিবর্তন package.json
একই পরিবর্তন করতে হবে package-lock.json
উপর npm install
, কিন্তু একটি নির্ভরতা করার জন্য একটি ক্যারেট যোগ একই করব না package-lock.json
।
package.json
হিসাবে ভাবুন যা আপনি ম্যানুয়ালি সংশোধন করতে পারেন এবং package-lock.json
এমন কোনও বিষয় হিসাবে যা আপনি নিজে নিজে স্পর্শ করতে পারেন না। আপনি সর্বদা সংস্করণ দুটি ফাইল নিয়ন্ত্রণ করেন - বিশেষত package-lock.json
। দুটি ফাইলই খুলুন, ম্যানুয়ালি প্রকল্পের নাম সম্পাদনা করুন package.json
, চালান npm install
এবং দেখুন কীভাবে প্রকল্পের নাম পরিবর্তন হয় package-lock.json
। license
রেকর্ড করা আছে বলে মনে হচ্ছে না package-lock.json
।
npm ci
, npm install
শুধু package.json, যদিও লক ফাইল প্রদান করা হয় ব্যবহার করা হবে
package-lock.json
যখন "সংস্করণ" সম্পত্তি হিসাবে কোনও সংখ্যার মান বা একটি নির্ভরতা সম্পত্তি পরিবর্তিত হয় তখন তাতে লিখিত হয় package.json
।
যদি এই সংখ্যাসূচক মানগুলিতে package.json
এবং package-lock.json
মিল থাকে তবে সেগুলি package-lock.json
থেকে পড়ে।
যদি এই সংখ্যাসূচক মানগুলিতে মিল থাকে package.json
এবং package-lock.json
এটি মেলে না, package-lock.json
তবে সেই নতুন মানগুলির সাথে লিখিত হয়, এবং কেরেট এবং টিলডের মতো নতুন সংশোধকগুলি উপস্থিত থাকলে। তবে এটি এমন একটি সংখ্যা যা পরিবর্তনটি ট্রিগার করে package-lock.json
।
আমি কী বোঝাতে চাইছি তা নীচে করুন। package.json
ছাড়া ব্যবহার করে package-lock.json
, চালান npm install
:
{
"name": "test",
"version": "1.0.0",
...
"devDependencies": {
"sinon": "7.2.2"
}
}
package-lock.json
এখন থাকবে:
"sinon": {
"version": "7.2.2",
এখন দুটি ফাইলই একটি নতুন ডিরেক্টরিতে কপি / পেস্ট করুন। এ পরিবর্তন package.json
করুন (কেবল ক্যারেট যুক্ত করে):
{
"name": "test",
"version": "1.0.0",
...
"devDependencies": {
"sinon": "^7.2.2"
}
}
চালান npm install
। কোনও package-lock.json
ফাইল না থাকলে sinon@7.3.0 ইনস্টল করা হবে। npm install
হয় থেকে পড়া package-lock.json
এবং 7.2.2 ইনস্টল।
এখন এতে পরিবর্তন package.json
করুন:
{
"name": "test",
"version": "1.0.0",
...
"devDependencies": {
"sinon": "^7.3.0"
}
}
চালান npm install
। package-lock.json
হয়েছে লেখা , এবং এখন দেখাব:
"sinon": {
"version": "^7.3.0",
সেই সাথে উল্লেখ করার জন্য একটি গুরুত্বপূর্ণ বিষয় হ'ল সুরক্ষা উন্নতি যা প্যাকেজ-লক ফাইলের সাথে আসে। যেহেতু এটি প্যাকেজগুলির সমস্ত হ্যাশ রাখে যদি কেউ সর্বজনীন এনএমপি রেজিস্ট্রিতে ছড়িয়ে পড়ে এবং প্যাকেজের সংস্করণ পরিবর্তন না করেই প্যাকেজের উত্স কোড পরিবর্তন করে তবে এটি প্যাকেজ-লক ফাইল দ্বারা সনাক্ত করা হবে।
প্যাকেজ-লক.জসন স্বয়ংক্রিয়ভাবে এমন কোনও ক্রিয়াকলাপের জন্য উত্পন্ন হয় যেখানে এনএমপি নোড_মডিউল গাছ বা প্যাকেজ.জসনকে সংশোধন করে। এটি সঠিক গাছ যা উত্পন্ন হয়েছিল তা বর্ণনা করে, যেমন পরবর্তী ইনস্টলেশনগুলি মধ্যবর্তী নির্ভরতা আপডেটগুলি নির্বিশেষে অভিন্ন গাছ উত্পন্ন করতে সক্ষম হয়।
এটি নির্ভরশীলতা গাছের একক উপস্থাপনের বর্ণনা দেয় যেমন সতীর্থ, স্থাপনা এবং অবিচ্ছিন্ন একীকরণ হুবহু একই নির্ভরতা ইনস্টল করার গ্যারান্টিযুক্ত t এতে নিম্নলিখিত বৈশিষ্ট্য রয়েছে।
{
"name": "mobileapp",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@angular-devkit/architect": {
"version": "0.11.4",
"resolved": "https://registry.npmjs.org/@angular- devkit/architect/-/architect-0.11.4.tgz",
"integrity": "sha512-2zi6S9tPlk52vyqNFg==",
"dev": true,
"requires": {
"@angular-devkit/core": "7.1.4",
"rxjs": "6.3.3"
}
},
}
আপনার ফাইলটি প্যাকেজ ইনস্টলেশনের উপর নজর রাখতে এবং আপনার প্রকল্পের নির্ভরতার অবস্থা ও ইতিহাস পরিচালনা করতে এনএমপি দ্বারা স্বয়ংক্রিয়ভাবে তৈরি এবং ব্যবহার করা হয়। আপনি এই ফাইলের বিষয়বস্তু পরিবর্তন করা উচিত নয়।
প্যাকেজ-লক.জসন: এটিতে বর্তমানে আপনার অ্যাপ্লিকেশনের জন্য ইনস্টল করা হ'ল সংস্করণ বিবরণ রয়েছে।