প্যাকেজ-লক.জসনের ভূমিকা কী?


291

এনপিএম @ 5 প্রকাশিত হয়েছে, এটিতে একটি নতুন বৈশিষ্ট্য প্যাকেজ-লক.জসন ফাইল রয়েছে (পরে npm install) যা আমাকে বিভ্রান্ত করে। আমি জানতে চাই, এই ফাইলটির প্রভাব কী?

উত্তর:


291

এটি প্যাকেজ.জসন নিজেই (যেমন 1.0। *) এর মতো তারকাযুক্ত সংস্করণ ব্যবহার না করে একটি নির্ভুল, সংস্করণযুক্ত নির্ভরতা গাছ সঞ্চয় করে। এর অর্থ আপনি অন্যান্য বিকাশকারীদের বা প্রোড রিলিজ ইত্যাদির জন্য নির্ভরতার গ্যারান্টি দিতে পারেন etc.

থেকে npm ডক্স :

প্যাকেজ-লক.জসন স্বয়ংক্রিয়ভাবে এমন কোনও ক্রিয়াকলাপের জন্য উত্পন্ন হয় যেখানে এনএমপি নোড_মডিউল গাছ বা প্যাকেজ.জসনকে সংশোধন করে। এটি সঠিক গাছ যা উত্পন্ন হয়েছিল তা বর্ণনা করে, যেমন পরবর্তী ইনস্টলেশনগুলি মধ্যবর্তী নির্ভরতা আপডেটগুলি নির্বিশেষে অভিন্ন গাছ উত্পন্ন করতে সক্ষম হয়।

এই ফাইলটি উত্স ভাণ্ডারগুলিতে প্রতিশ্রুতিবদ্ধ হওয়ার উদ্দেশ্যে এবং বিভিন্ন উদ্দেশ্যে পরিবেশন করা হয়েছে:

নির্ভরতা গাছের একক উপস্থাপনা বর্ণনা করুন যেমন সতীর্থ, স্থাপনা এবং অবিচ্ছিন্ন একীকরণ হুবহু একই নির্ভরতা ইনস্টল করার গ্যারান্টিযুক্ত।

ব্যবহারকারীদের ডিরেক্টরি নষ্ট না করেই নোড_মডিউলগুলির পূর্ববর্তী রাজ্যে "সময়-ভ্রমণ" করার জন্য একটি সুবিধা সরবরাহ করুন।

পাঠযোগ্য উত্স নিয়ন্ত্রণ নিয়ন্ত্রণের মাধ্যমে গাছের পরিবর্তনের বৃহত্তর দৃশ্যমানতার সুবিধার্থে।

পূর্বে ইনস্টল করা প্যাকেজগুলির জন্য পুনরাবৃত্ত মেটাডেটা রেজোলিউশনগুলি এড়িয়ে যাওয়ার জন্য এনপিএমকে অনুমতি দিয়ে ইনস্টলেশন প্রক্রিয়াটি অনুকূলকরণ করুন ""

সম্পাদন করা

ঠিক সংস্করণ সংখ্যা সহ প্যাকেজ.জসন ব্যবহার সম্পর্কে নীচে জড়হালির প্রশ্নের উত্তর দিতে। মনে রাখবেন যে আপনার প্যাকেজ.জসনে আপনার সরাসরি নির্ভরতা রয়েছে, আপনার নির্ভরতার নির্ভরতা নয় (কখনও কখনও নেস্টেড নির্ভরতাও বলা হয়)। এর অর্থ হল স্ট্যান্ডার্ড প্যাকেজ.জসনের সাহায্যে আপনি n নেস্টেড নির্ভরতাগুলির সংস্করণগুলি নিয়ন্ত্রণ করতে পারবেন না, সরাসরি উল্লেখ করা বা পিয়ার নির্ভরতা হিসাবে আপনাকে সহায়তা করবে না কারণ আপনি যে ভার্সন সহনশীলতাও এই নেস্টেড নির্ভরতাগুলির জন্য নির্ধারিত সংস্করণ সহ্য করতে পারবেন না ।

এমনকি আপনি যদি আপনার প্রত্যক্ষ নির্ভরতার সংস্করণগুলি লক করে রাখেন তবে আপনি 100% গ্যারান্টি দিতে পারবেন না যে আপনার পূর্ণ নির্ভরতা গাছ প্রতিবার অভিন্ন হবে। দ্বিতীয়ত আপনি আপনার প্রত্যক্ষ নির্ভরতার অবিচ্ছেদী পরিবর্তনগুলি (শব্দার্থক সংস্করণের উপর ভিত্তি করে) অনুমোদন দিতে চাইতে পারেন যা আপনাকে নেস্টেড নির্ভরতাগুলির এমনকি আরও কম নিয়ন্ত্রণ দেয় এবং আপনি আবার গ্যারান্টি দিতে পারবেন না যে আপনার প্রত্যক্ষ নির্ভরতা কোনও মুহুর্তে শব্দার্থক সংস্করণের নিয়ম ভাঙ্গবে না guarantee নিজেদের.

এই সমস্তটির সমাধান হ'ল লক ফাইল যা সম্পূর্ণ নির্ভরতা গাছের সংস্করণগুলিতে উপরে লক হিসাবে বর্ণনা করা হয়েছে। এটি আপনাকে অন্যান্য বিকাশকারীদের বা রিলিজের জন্য আপনার নির্ভরশীলতা গাছের গ্যারান্টি দিতে দেয় যখন এখনও আপনার স্ট্যান্ডার্ড প্যাকেজ.জসন ব্যবহার করে নতুন নির্ভরতা সংস্করণ (প্রত্যক্ষ বা অপ্রত্যক্ষ) পরীক্ষা করার অনুমতি দেয়।

বিশেষ দ্রষ্টব্য। পূর্ববর্তী সঙ্কুচিত মোড়ক জেসন বেশ একই জিনিস করেছিল তবে লক ফাইলটির নামটি পুনরায় নামকরণ করে যাতে এটির কার্যকারিতা আরও পরিষ্কার হয়। যদি প্রকল্পটিতে ইতিমধ্যে সঙ্কুচিত মোড়কের ফাইল থাকে তবে এটি কোনও লক ফাইলের পরিবর্তে ব্যবহৃত হবে।


78
নির্ভরতার সঠিক সংস্করণটি যদি এমনভাবে চাওয়া হয় তবে কেন প্যাকেজ.জসনে সঠিক সংস্করণটি নির্দিষ্ট করে প্রয়োগ করে প্যাকেজ-লক.জসন ফাইলটি ত্যাগ করবেন না?
জড়হালি

15
@ জরাজহালি - আপনার প্রশ্নের ভিত্তিতে আমার উত্তরটি সংশোধন করেছেন।
ম্যাট

1
অন্যান্য বিকাশকারীদের জন্য প্যাকজ.জেসন.লক প্রয়োগ করে এই নির্ভরতা গাছটি কীভাবে পায়? স্বয়ংক্রিয়ভাবে?
স্টিভেক

40
দয়া করে মনে রাখবেন যে এই উত্তরটি এখন আর সঠিক নয় ! 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
খ্রিস্টান

5
প্যাকেজ-লক.জসন আপডেট করার সাথে npm ciসাথে npm installআপনাকে সিআই এর সামগ্রী ব্যবহার করার জন্য আপনার কাছে একটি উল্লেখ যুক্ত করা উচিত । কেবলমাত্র npm ciআপনিই পুনরাবৃত্তিযোগ্য দৃust় বিল্ডগুলি পাবেন।
k0pernikus

34

এটি এনপিএমের জন্য একটি অত্যন্ত গুরুত্বপূর্ণ উন্নতি: প্রতিটি প্যাকেজের সঠিক সংস্করণের গ্যারান্টি দেয়

আপনার প্রকল্পটি বিভিন্ন সময়ে একই পরিবেশে একই প্যাকেজগুলির সাথে নির্মিত কীভাবে নিশ্চিত করবেন? ধরা যাক, আপনি ^1.2.3আপনার ব্যবহার করতে পারেন package.json, বা আপনার কিছু নির্ভরশীলতা সেভাবে ব্যবহার করছেন তবে আপনি কীভাবে নিশ্চিত করতে পারবেন যে প্রতিবার npm installআপনার ডিভাইস এবং বিল্ড সার্ভারে একই সংস্করণটি বেছে নেবে? প্যাকেজ-লক.জসন এটি নিশ্চিত করবে।

npm installবিল্ড সার্ভার বা স্থাপনার সার্ভারে লক ফাইলটি পুনরায় উত্পন্ন করবে, npm ciযা (লক ফাইল থেকে পড়বে এবং পুরো প্যাকেজ ট্রিটি ইনস্টল করবে)


9
মনে রাখবেন যে এটি এখন পুরানো। 5.1.0 এর পরে, "এনপিএম ইনস্টল" package-lock.jsonফাইলটি একেবারেই পড়ে না । এটি আগের package.jsonমতোই ইনস্টল করে। package-lock.jsonফাইলটি ব্যবহার করতে , আপনাকে নতুন "এনপিএম সিআই" কমান্ডটি ব্যবহার করতে হবে, যা উল্লিখিত package-lock.jsonসংস্করণটির পরিবর্তে উল্লিখিত সংস্করণগুলি ইনস্টল করবে package.json
ভেনেরিক্স

5
আমার ভয় হচ্ছে ভেন্রিক্স ভুল আছে। 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 ইনস্টল করা হবে।
জুমাফরা

2
এবং কেবল এটিই নয়, আপনি যদি ক্যারেট-এ যুক্ত করার মতো কিছু করতে চান তবে এটি package-lock.jsonকরার একমাত্র যুক্তিযুক্ত উপায় হ'ল এটি মুছে ফেলা package-lock.jsonএবং পুনরায় জেনারেট করে ব্যবহার করে npm install। (আপনি নিজে সম্পাদনা করতে চান না package-lock.json)। (শীর্ষ নিকটে) এর "সংস্করণ" সম্পত্তির মূল্য পরিবর্তন package.jsonএকই পরিবর্তন করতে হবে package-lock.jsonউপর npm install, কিন্তু একটি নির্ভরতা করার জন্য একটি ক্যারেট যোগ একই করব না package-lock.json
জুমাফরা

1
এমন কোনও বিষয় package.jsonহিসাবে ভাবুন যা আপনি ম্যানুয়ালি সংশোধন করতে পারেন এবং package-lock.jsonএমন কোনও বিষয় হিসাবে যা আপনি নিজে নিজে স্পর্শ করতে পারেন না। আপনি সর্বদা সংস্করণ দুটি ফাইল নিয়ন্ত্রণ করেন - বিশেষত package-lock.json। দুটি ফাইলই খুলুন, ম্যানুয়ালি প্রকল্পের নাম সম্পাদনা করুন package.json, চালান npm installএবং দেখুন কীভাবে প্রকল্পের নাম পরিবর্তন হয় package-lock.jsonlicenseরেকর্ড করা আছে বলে মনে হচ্ছে না package-lock.json
zumafra

2
যখন করছেন @zumafra প্যাকেজ-lock.json ফাইলটি ব্যবহার হতে হবে npm ci, npm installশুধু package.json, যদিও লক ফাইল প্রদান করা হয় ব্যবহার করা হবে
শিন

13

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 installpackage-lock.jsonহয়েছে লেখা , এবং এখন দেখাব:

"sinon": {
  "version": "^7.3.0",

7

সেই সাথে উল্লেখ করার জন্য একটি গুরুত্বপূর্ণ বিষয় হ'ল সুরক্ষা উন্নতি যা প্যাকেজ-লক ফাইলের সাথে আসে। যেহেতু এটি প্যাকেজগুলির সমস্ত হ্যাশ রাখে যদি কেউ সর্বজনীন এনএমপি রেজিস্ট্রিতে ছড়িয়ে পড়ে এবং প্যাকেজের সংস্করণ পরিবর্তন না করেই প্যাকেজের উত্স কোড পরিবর্তন করে তবে এটি প্যাকেজ-লক ফাইল দ্বারা সনাক্ত করা হবে।


4

প্যাকেজ-লক.জসন স্বয়ংক্রিয়ভাবে এমন কোনও ক্রিয়াকলাপের জন্য উত্পন্ন হয় যেখানে এনএমপি নোড_মডিউল গাছ বা প্যাকেজ.জসনকে সংশোধন করে। এটি সঠিক গাছ যা উত্পন্ন হয়েছিল তা বর্ণনা করে, যেমন পরবর্তী ইনস্টলেশনগুলি মধ্যবর্তী নির্ভরতা আপডেটগুলি নির্বিশেষে অভিন্ন গাছ উত্পন্ন করতে সক্ষম হয়।

এটি নির্ভরশীলতা গাছের একক উপস্থাপনের বর্ণনা দেয় যেমন সতীর্থ, স্থাপনা এবং অবিচ্ছিন্ন একীকরণ হুবহু একই নির্ভরতা ইনস্টল করার গ্যারান্টিযুক্ত 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"
  }
},

}


2

আপনার ফাইলটি প্যাকেজ ইনস্টলেশনের উপর নজর রাখতে এবং আপনার প্রকল্পের নির্ভরতার অবস্থা ও ইতিহাস পরিচালনা করতে এনএমপি দ্বারা স্বয়ংক্রিয়ভাবে তৈরি এবং ব্যবহার করা হয়। আপনি এই ফাইলের বিষয়বস্তু পরিবর্তন করা উচিত নয়।


1
সুতরাং এই ফাইলটির সাথে আমার যদি দ্বন্দ্ব হয় তবে কি হবে?
অলিভার ওয়াটকিন্স

0

প্যাকেজ-লক.জসন: এটিতে বর্তমানে আপনার অ্যাপ্লিকেশনের জন্য ইনস্টল করা হ'ল সংস্করণ বিবরণ রয়েছে।


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