আমি কি এনপিএম 5 দ্বারা নির্মিত প্যাকেজ-লক.জসন ফাইলটি প্রতিশ্রুতিবদ্ধ?


1389

এনপিএম 5 আজ প্রকাশিত হয়েছিল এবং নতুন বৈশিষ্ট্যগুলির মধ্যে একটিতে একটি package-lock.jsonফাইল তৈরির সাথে সংযোজনমূলক ইনস্টল অন্তর্ভুক্ত রয়েছে ।

এই ফাইলটি কি সোর্স নিয়ন্ত্রণে রাখার কথা?

আমি ধরে নিচ্ছি যে এটির মতো yarn.lockএবং এটি composer.lockউভয়ই উত্স নিয়ন্ত্রণে রাখার কথা।


20
সংক্ষিপ্ত উত্তর: হ্যাঁ একটি মন্তব্য: যখন প্যাকেজ-লক.জসন পরিবর্তন হয় আপনি অন্যান্য উত্স পরিবর্তন থেকে পৃথক হয়ে কেবল সেই পরিবর্তনের প্রতিশ্রুতিবদ্ধ করতে পারেন। এটি git logমোকাবেলা করতে সহজ করে তোলে ।
বেগুনি জ্যাকেট

14
একটি ফাইল যদি এটি উপস্থিত না থাকে তবে একটি ডিস্ট্রিমেন্টিক ইনস্টল উত্পাদন করতে সহায়তা করতে পারে না।
অ্যালান এইচ।

4
প্রকল্পের উপর নির্ভর করে। github.com/npm/npm/issues/20603
গজুস

3
আপনি যদি সত্যিই এনপিএমকে বিশ্বাস করেন তবে উদ্দেশ্য কী আরও বেশি স্পষ্টভাবে প্রকল্পটি কী ব্যবহার করছে তা জানানো। যদি আপনি সত্যিই অনুমানযোগ্যতা চান তবে এই ফাইলটিকে উপেক্ষা করুন এবং পরিবর্তে আপনার নোড_মডিউলগুলি ইনস্টল করুন (উত্তর + মন্তব্যে .npmrc এবং সম্পর্কিত কনফিগারেশন দেখুন) এবং এটি আপনার প্যাকেজ ম্যানেজার যা বলছে তার চেয়ে প্রকৃতপক্ষে কী পরিবর্তন হচ্ছে তা ট্র্যাক করতে ব্যবহার করুন। শেষ পর্যন্ত: কোনটি আরও গুরুত্বপূর্ণ? আপনার প্যাকেজ পরিচালক বা কোড আপনি ব্যবহার করছেন।
জিম্মন্ট

উত্তর:


1609

হ্যাঁ, package-lock.jsonউত্স নিয়ন্ত্রণে যাচাই করার উদ্দেশ্যে। আপনি যদি এনপিএম 5 ব্যবহার করেন তবে আপনি এটি কমান্ড লাইনে দেখতে পাবেন: created a lockfile as package-lock.json. You should commit this file.অনুসারে npm help package-lock.json:

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

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

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

  • ব্যবহারকারীদের node_modulesডিরেক্টরিটি वचनबद्ध না করে পূর্বের রাজ্যে "সময়-ভ্রমণ" করার জন্য একটি সুবিধা সরবরাহ করুন ।

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

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

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

যদি উভয়ই থাকে package-lock.jsonএবং npm-shrinkwrap.jsonপ্যাকেজের মূলের সাথে উপস্থিত থাকে তবে package-lock.jsonসম্পূর্ণ উপেক্ষা করা হবে।


77
কোন ধরণের প্রকল্পে ফাইলটি প্রতিশ্রুতিবদ্ধ করা আসলে সহায়ক? সেমভার এবং প্যাকেজ.জসনের পুরো পয়েন্টটি হ'ল আপডেটযুক্ত সামঞ্জস্যপূর্ণ নির্ভরতাগুলি লক্ষ্য করার দরকার নেই।
কৌতূহলীনি

45
মূল শব্দটি হ'ল "হওয়া উচিত নয়" - তবে বাস্তবে লোকেরা সেমভারকে পুরোপুরি অনুসরণ করে না। এজন্য প্যাকেজ আপডেট করা সহজ করার জন্য আপনি একসাথে প্যাকেজ-লক.জসন এবং প্যাকেজ.জসন ব্যবহার করতে পারেন তবে তবুও নিশ্চিত হয়ে নিন যে প্রতিটি বিকাশকারী এবং প্রতিটি নিযুক্ত অ্যাপ্লিকেশন একই নির্ভরতা গাছ ব্যবহার করছে।
পানু হর্সমালাহতি

34
@trusktr: সিন্ড্রে সোরহুস "অ্যাপ্লিকেশনগুলির জন্য লকফিলগুলি ব্যবহার করার পরামর্শ দিচ্ছেন, তবে প্যাকেজগুলির জন্য নয়।"
লতা

23
আরেকটি বিষয় হ'ল প্যাকেজ-লক.জসন এনপিএম-এ প্রকাশের জন্য অগ্রাহ্য করা হয়েছে, সুতরাং কোনও বিকাশকারী যদি এটি একটি লাইব্রেরি ডেভের জন্য ব্যবহার করে তবে তারা কোনও আপডেট নির্ভরতা সংস্করণ থেকে কোনও রিগ্রেশন ধরার সম্ভাবনাটি কমিয়ে দিচ্ছে, এবং তাই এটি পাস করবে শেষ ব্যবহারকারীদের মধ্যে বাগ। এই কারণে, লাইব্রেরি ডেভের জন্য লক ফাইলটি ব্যবহার না করা কম বাগের শিপিংয়ের সুযোগ বাড়ে।
trusktr

128
ব্যক্তিগতভাবে আমাকে এখন package-lock.jsonআমার সাথে যুক্ত করার অবলম্বন করতে .gitignoreহয়েছিল ... এটি আমাকে সমাধান করার চেয়ে অনেক বেশি সমস্যা তৈরি করেছিল। যখন আমরা মার্জ করি বা রিবেস করি তখন সর্বদা বিবাদ হয় এবং যখন package-lock.jsonসিআই সার্ভারে কোনও সংশ্লেষ দূষিত হয় তখন এটি ঠিক করে রাখা খুব কষ্ট হয়।
স্টিফান জেড ক্যামিলারি

111

হ্যাঁ, এটি চেক ইন করার উদ্দেশ্যে। আমি এটির নিজস্ব অনন্য প্রতিশ্রুতি পেতে পরামর্শ দিতে চাই। আমরা দেখতে পেলাম যে এটি আমাদের বিভেদে প্রচুর আওয়াজ যোগ করে।


19
এটি আপনার উত্স কোড সংগ্রহস্থলটিতে পরীক্ষা করা উচিত কিনা তা নিয়ে বিতর্ক করা ন্যায়সঙ্গত, তবে এই ফাইলটি এনপিএমে প্রকাশ করা আসলে বিতর্কের পক্ষে নয় - আপনাকে অবশ্যই আপনার প্যাকেজ-লক.জসন বা আপনার সঙ্কুচিত ফাইলটি আপনার এনএমপি রেজিস্ট্রিতে অন্তর্ভুক্ত করতে হবে। যদি আপনি এটি না করেন তবে আপনার প্রকাশিত প্যাকেজটি আপনার 1 ম প্রজন্মের নির্ভরতার নির্ভরতাগুলির আনপিনযুক্ত পরিবর্তন সাপেক্ষে। এই 2 য় প্রজন্মের নির্ভরতাগুলির মধ্যে একটি ব্রেকিং প্রকাশ না করে এবং আপনার প্রকাশিত প্যাকেজটি রহস্যজনকভাবে ভাঙা না হওয়া পর্যন্ত আপনি এটিকে সমস্যা হিসাবে দেখবেন না। এই প্যাকেজ-লক.জসন ফাইলটি সেই সমস্যাটি সমাধান করার জন্য তৈরি করা হয়েছিল।
guerillapresident

8
@ বেটোএভিগা শব্দ করে বলতে চাইছি যে প্যাকেজ-লক.জসনের সাথে কমিট করার পক্ষে নোড প্যাকেজ সংস্করণগুলির অনেকগুলি লাইন থাকতে পারে, যে প্রতিশ্রুতিতে থাকা অন্য কোনও কাজ লুকিয়ে যায়।
xer0x

7
আমি সাধারণত প্যাকেজ ইনস্টলেশন অন্যান্য কাজ থেকে পৃথক রাখি। আমাকে "ইনস্টল করা চই এবং মোচা" এর মতো প্রতিশ্রুতি আলাদা করার দরকার নেই, কারণ আমি ইতিমধ্যে জানি কী পরিবর্তন হয়েছে।
কিথ

3
package-lock.jsonট্রাঙ্কস এবং ব্রাঞ্চিংয়ের সাথে এসসিএম সিস্টেমে কাজ করার সময় ফাইল সম্পর্কিত কোনও পরামর্শ ? আমি একটি শাখায় কিছু পরিবর্তন করছি যা ট্রাঙ্কে একীভূত করা দরকার ... এখন দুটি package-lock.jsonফাইলের মধ্যে দ্বন্দ্বের সমাধান করতে হবে আমাকে (কোনওভাবে) ? এটি বেদনাদায়ক বোধ করে।
কিমিকিক্লাস

3
@ গুরিলাপ্রেসিডেন্ট হিসাবে আমি এটি বুঝতে পেরেছি আপনি আংশিকভাবে সঠিক correct এই ফাইলটি এনপিএমে প্রকাশ করা বিতর্কের পক্ষে নয়। আপনি এটি প্রকাশ করতে পারবেন না।
টিম গৌটিয়ার

66

হ্যাঁ তোমার উচিৎ:

  1. কমিট package-lock.json
  2. npm cinpm installআপনার সিআই এবং আপনার স্থানীয় বিকাশ মেশিনে আপনার অ্যাপ্লিকেশনগুলি তৈরি করার পরিবর্তে ব্যবহার করুন

npm ciকর্মপ্রবাহ প্রয়োজন একটি অস্তিত্ব package-lock.json


npm installকমান্ডের একটি বড় অবক্ষয় হ'ল এটির অপ্রত্যাশিত আচরণ যা এটি রূপান্তর করতে পারে package-lock.json, যেখানে npm ciকেবল লকফাইলে বর্ণিত সংস্করণগুলি ব্যবহার করে এবং ত্রুটি তৈরি করে

  • যদি package-lock.jsonএবং package.jsonসিঙ্কের বাইরে থাকে
  • যদি একটি package-lock.jsonঅনুপস্থিত।

সুতরাং, npm installস্থানীয়ভাবে চলমান , esp। একাধিক বিকাশকারী সহ বৃহত্তর দলে, 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


এনপিএম ডকটি উদ্ধৃত করতে :

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

এবং বনামের মধ্যে পার্থক্যের ক্ষেত্রেnpm cinpm install :

  • প্রকল্পে অবশ্যই একটি বিদ্যমান প্যাকেজ-লক.জসন বা এনপিএম-সঙ্কিঙ্ক্র্যাপ.জসন থাকতে হবে।
  • যদি প্যাকেজ লকটিতে নির্ভরতা প্যাকেজ.জসনের মধ্যে মেলে না, npm ciতবে প্যাকেজ লকটি আপডেট করার পরিবর্তে একটি ত্রুটি সহ প্রস্থান করবে।
  • npm ci একসাথে কেবলমাত্র পুরো প্রকল্পগুলি ইনস্টল করতে পারে: এই আদেশের সাথে পৃথক নির্ভরতা যুক্ত করা যায় না।
  • যদি কোনও node_modulesইতিমধ্যে উপস্থিত থাকে তবে এটি পূর্বে স্বয়ংক্রিয়ভাবে সরানো হবেnpm ci ইনস্টল করার হবে।
  • এটি কখনও package.jsonবা কোনও প্যাকেজ-লকগুলিতে লিখবে না : ইনস্টলগুলি মূলত হিমশীতল।

দ্রষ্টব্য: আমি এখানে অনুরূপ উত্তর পোস্ট করেছি


10
এই উত্তরটি আরও creditণের দাবিদার, বিশেষত এনএমপি সিআই ব্যবহার করে। প্যাকেজ লক নিয়ে লোকেরা বেশিরভাগ সমস্যার মুখোমুখি হয়ে এটিকে প্রশমিত করে।
জেমসবি

অনেক বেশি ক্লিনার বিকল্প হিসাবে আমি প্যাকেজ.জসনে (কোনও ক্যারেট বা টিলড নেই) ফিক্সড সংস্করণ ব্যবহার করেছি। এটি আমাকে একধরণের whose build would fail one day because a random dependency got a breaking updateইস্যু থেকে বাঁচায় । যদিও এটি একই সমস্যা ব্যবহার করে সন্তানের নির্ভরতার সম্ভাবনা ছেড়ে দেয়।
অশ্বানী আগরওয়াল

58

হ্যাঁ, সেরা অনুশীলন হ'ল চেক-ইন করা (হ্যাঁ, চেক-ইন)

আমি সম্মত হই যে ভিন্নতা দেখে এটি প্রচুর শব্দ বা দ্বন্দ্ব সৃষ্টি করবে। তবে সুবিধাগুলি হ'ল:

  1. প্রতিটি প্যাকেজের ঠিক একই সংস্করণ গ্যারান্টি । বিভিন্ন সময়ে বিভিন্ন পরিবেশে নির্মাণের সময় এই অংশটি সবচেয়ে গুরুত্বপূর্ণ। আপনি ^1.2.3আপনার ব্যবহার করতে পারেন package.jsonতবে আপনি কীভাবে নিশ্চিত করতে পারবেন যে প্রতিবার npm installআপনার ডিভ মেশিনে এবং বিল্ড সার্ভারে, বিশেষত পরোক্ষ নির্ভরতা প্যাকেজগুলিতে একই সংস্করণটি গ্রহণ করবে? ঠিক আছে, package-lock.jsonএটি নিশ্চিত করবে। ( npm ciযার সাহায্যে লক ফাইলের ভিত্তিতে প্যাকেজ ইনস্টল করা হয়)
  2. এটি ইনস্টলেশন প্রক্রিয়া উন্নত করে।
  3. এটি নতুন নিরীক্ষণের বৈশিষ্ট্যটির সাথে সহায়তা করে npm audit fix(আমি মনে করি নিরীক্ষা বৈশিষ্ট্যটি এনপিএম সংস্করণ 6 থেকে রয়েছে)।

3
যতদূর আমি জানি, কখনই সেমভার ব্যবহার করা হয়নি (যা এনপিএম ডেভস যেভাবেই বোঝে না) কমপক্ষে 99% ক্ষেত্রে লকফাইলে থাকার মতো আচরণ করা উচিত। আমার নিজের অভিজ্ঞতা হ'ল সেমভার ফাকআপগুলি বেশিরভাগ প্রাথমিক প্যাকেজগুলির সাথে ঘটে (সরাসরি নির্ভরতা, ক্রেপি জ্যাকোরি ডেটপিকার্স ইত্যাদি)। এনপিএমের সাথে আমার ব্যক্তিগত অভিজ্ঞতাটি হ'ল লক ফাইলগুলি চিরকালের জন্য শোনা যায়। আমি আশা করি সাম্প্রতিক সংস্করণগুলির সাথে এই প্রজ্ঞাটি অপরিবর্তিত রয়েছে।
সোভেল

13
উল্লেখ করার জন্য +1 npm ci। লোকেরা প্রায়শই উল্লেখ করে যে package-lock.jsonএটি প্যাকেজগুলির একটি ডিটারমিনিস্টিক ইনস্টলেশনের অনুমতি দেয় তবে প্রায়শই কখনই আদেশটি উল্লেখ করে না যা এই আচরণটি সহজতর করে! অনেক লোক সম্ভবত npm installলক ফাইলের মধ্যে সঠিকভাবে ইনস্টলগুলি ধরে নিয়েছে ...
আহুরাত

এনপিএম সিআই এনপিএম 5-এ নয়
dpurrington

ধন্যবাদ! আপনি যদি ব্যবহার করে থাকেন তবে কেবল প্যাকেজ-লক.জসন প্রতিশ্রুতিবদ্ধ হওয়া বোধগম্য npm ci। আপনার দল / সীসা বিকাশকারী কখন আপডেট করবেন তা সিদ্ধান্ত নিতে পারে। প্রত্যেকে যদি স্বেচ্ছায় এটিকে প্রতিশ্রুতিবদ্ধ হয় তবে এর কোনও অর্থ নেই এবং এটি কেবল আপনার রেপোতে শব্দ তৈরি করছে। এনপিএম ডকুমেন্টেশনগুলির এটি আরও স্পষ্ট করা উচিত। আমি মনে করি বেশিরভাগ বিকাশকারীরা কেবল এই বৈশিষ্ট্য দ্বারা বিভ্রান্ত।
অ্যাডাম্প্যাসজ

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

38

আমি আমার প্রকল্পগুলিতে এই ফাইলটি প্রতিশ্রুতিবদ্ধ না। আলোচ্য বিষয়টি কি ?

  1. এটি উত্পন্ন
  2. এটি গিটল্যাব-সিআইআইএমএল বিল্ড সহ গিটল্যাবে একটি SHA1 কোড অখণ্ডতা ত্রুটির কারণ

যদিও এটি সত্য যে আমি কখনই আমার প্যাকেজটিতে ব্যবহার করি না j জিজসনটি লিবের জন্য কারণ আমার এটির সাথে খারাপ অভিজ্ঞতা ছিল।


11
আমি আশা করি এনপিএম ডক্সের মধ্যে থেকে এটি আরও ব্যাখ্যা করা যেতে পারে - প্রতিশ্রুতি না দিয়ে আপনি কী সুনির্দিষ্টভাবে হারাবেন তার একটি রূপরেখা তৈরি করা কার্যকর হবে package-lock.json। কিছু রিপোসগুলি গ্রহণ করে যে উপকারগুলি আসে সেগুলির প্রয়োজন নাও হতে পারে এবং উত্সটিতে স্বয়ংক্রিয়ভাবে উত্পাদিত সামগ্রী থাকতে পছন্দ করতে পারে।
আলুফর্মার

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

6
আপনি আপনার প্যাকেজ.জসনে ^ ব্যবহার করতে পারেন না তবে আপনি নিশ্চিত হতে পারেন যে আপনার নির্ভরতাগুলি এটি ব্যবহার করে না?
নিকিকার

35

গিট ডিফার্ট করার সময় লোকেরা গোলমাল সম্পর্কে অভিযোগ করে:

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

এর ফলে "প্যাকেজ লক ফাইলটি পরিবর্তন করা হয়েছিল বাইনারি ফাইলগুলিকে একটি / প্যাকেজ-লক.জসন এবং বি / প্যাকেজ-লক.জসন পৃথক করে দেখায় dif এই ফাইলগুলি অনলাইনে দেখার সময় ডিফগুলি থেকে এই ফাইলগুলি (আর কোনও 10k লাইন পরিবর্তিত হয়নি!)।


1
আমার gd() { git diff --color-words $1 $2 -- :!/yarn.lock :!/package-lock.json; }একটি উলামের পরিবর্তে আমার .bashrc এ আছে ।
অ্যাসিস্টল 3pol

16

হ্যাঁ, আপনি এই ফাইলটি প্রতিশ্রুতিবদ্ধ করতে পারেন। থেকে npm এর অফিসিয়াল ডক্স :

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

এই ফাইলটি উত্স সংগ্রহস্থলগুলিতে প্রতিশ্রুতিবদ্ধ হওয়ার উদ্দেশ্যে করা হয়েছে [।]


13
কোনও ইনস্টল সর্বদা নোড_মডিউলগুলি আপডেট করবে না এবং তাই প্যাকেজ-লক.জসন আপডেট করবে?
টিম গাউটিয়ার

2
না, আপনি npm ciপ্যাকেজ-লক.জসন থেকে ইনস্টল করতে দৌড়াতে পারেন
উইলিয়াম হ্যাম্পশায়ার

আপনার উত্তরে আপনাকে জোর দেওয়া উচিত যে আপনার রেপোতে প্যাকেজ-লক.জসন থাকলে আপনার অবিচ্ছিন্ন ইন্টিগ্রেশন বিল্ডে এনপিএম সিআই ব্যবহার করা উচিত
ম্যাজিক্ল্যাম্প

6

বিশ্বব্যাপী প্যাকেজ-লক.জসন অক্ষম করুন

আপনার টার্মিনালে নিম্নলিখিত টাইপ করুন:

npm config set package-lock false

এটি আমার পক্ষে যাদুবিদ্যার মতো কাজ করে


2
এটি সামগ্রী তৈরি করে ~/.npmrc(কমপক্ষে আমার ম্যাকোজে) তৈরি করে package-lock=falseএবং এটি একই সাথে কোনও নির্দিষ্ট প্রকল্পেও করা যেতে পারে node_modules/(যেমনecho 'package-lock=false' >> .npmrc
জিম্মন্ট

6
এটি আমার কাছে মজার বিষয় যে এটি একটি নেতিবাচক হবে। এনপিএম সম্প্রদায় কেবল এই প্যাকেজ-লকটিকে স্বীকার করতে পারে না j একটি দল প্রক্রিয়া প্রভাবিত করতে পারে এমন স্টাফ আপনার করা উচিত নয়। এটি সক্ষম করার একটি বিকল্প হওয়া উচিত ছিল না, বাধ্য করা হয়নি। কত লোক কেবল "গিট অ্যাড *" করেন এবং এটি লক্ষ্য করে না এবং তৈরি করে দেয়। আপনার যদি একত্রীকরণ ভিত্তিক প্রবাহ থাকে তবে আমি জানি যে গিট ফ্লো এটি ব্যবহার করা লোকদের কাছে বাইবেলের মতো, এটি কার্যকর হবে না। আপনার একত্রে প্রজন্ম থাকতে পারে না! এনপিএম সংস্করণটি নষ্ট, প্যাকেজ: 1.0.0 ডিটারমিনিস্টিক হওয়া উচিত!
এরিক টোলেগার

3
কেন এই নিচে ভোট দেওয়া হয়? এটি কার্যকরভাবে কোনও বৈশিষ্ট্যটি অক্ষম করার আইনত উপায়। এবং যদিও এটি প্রতি সে প্রশ্নের প্রশ্নের উত্তর দেয় না, তবে এটি প্রশ্নটিকে মূল করে তোলে। অর্থাৎ এর আর উত্তর দেওয়ার দরকার নেই। আমার কাছ থেকে
থাম্বস

এটি হ্রাস পাওয়ার কারণ হ'ল আপনি কেবল কোনও বৈশিষ্ট্য অক্ষম করছেন।
রাজা

5

হ্যাঁ, প্যাকেজ-লক.জসন প্রতিশ্রুতিবদ্ধ করার এটি একটি আদর্শ অনুশীলন

প্যাকেজ-লক.জসন প্রতিশ্রুতি দেওয়ার মূল কারণ হ'ল প্রকল্পের প্রত্যেকে একই প্যাকেজ সংস্করণে রয়েছে।

পেশাদাররা: -

  • যদি আপনি কঠোর সংস্করণ অনুসরণ করেন এবং তৃতীয় পক্ষের প্যাকেজ-লক করার প্রতিশ্রুতিবদ্ধ থেকে নিজেকে বাঁচতে স্বয়ংক্রিয়ভাবে বড় সংস্করণগুলিতে আপডেট করার অনুমতি না দেন তবে তা অনেক সহায়তা করে।
  • আপনি যদি কোনও নির্দিষ্ট প্যাকেজ আপডেট করেন তবে এটি প্যাকেজ-লক.জসনে আপডেট হয় এবং रिपোজিটরি ব্যবহারকারী প্রত্যেকে আপনার পরিবর্তনগুলি টেনে আনলে সেই বিশেষ সংস্করণে আপডেট হয়।

কনস: -

  • এটি আপনার টানার অনুরোধগুলিকে কুৎসিত করে তুলতে পারে :) '

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


4
আপনি যদি এর npm ciপরিবর্তে ব্যবহার করতে চান তবে দূরে চলে যাবে npm install
k0pernikus


1
"প্রকল্পের প্রত্যেকে একই প্যাকেজ সংস্করণে থাকবেন, আপনাকে কেবল এনপিএম ইনস্টল করতে হবে" সত্য নয়, এর পরিবর্তে আপনার "এনপিএম সিআই" ব্যবহার করা দরকার
রেগেগুইটার

ধন্যবাদ, @reggaeguitar। এই জন্য আমার উত্তর আপডেট করা।
নিখিল মহাদিকর

2

আমার এনপিএমের ব্যবহার হ'ল মিনিফাইড / অগ্লিফাইড সিএসএস / জেএস উত্পন্ন করা এবং জাঙ্গো অ্যাপ্লিকেশন দ্বারা পরিবেশন করা পৃষ্ঠাগুলিতে প্রয়োজনীয় জাভাস্ক্রিপ্ট তৈরি করা। আমার অ্যাপ্লিকেশনগুলিতে, জাভাস্ক্রিপ্ট অ্যানিমেশনগুলি তৈরি করতে পৃষ্ঠায় চালিত হয়, কিছু সময় অ্যাজাক্স কল করে, একটি ভ্যু ফ্রেমওয়ার্কের মধ্যে কাজ করে এবং / অথবা CSS এর সাথে কাজ করে। যদি প্যাকেজ-লক.জসনের প্যাকেজ.জসনে যা আছে তার কিছুটা ওভাররাইডিং নিয়ন্ত্রণ থাকে, তবে এই ফাইলটির একটি সংস্করণ থাকা প্রয়োজন। আমার অভিজ্ঞতায় এটি হয় এনপিএম ইনস্টল দ্বারা ইনস্টল করা কোনটি প্রভাবিত করে না, বা এটি যদি হয় তবে এটি আমার জ্ঞানের উপরে নিযুক্ত অ্যাপ্লিকেশনগুলিকে বিরূপ প্রভাবিত করে না। আমি মোংডব বা অন্যান্য অ্যাপ্লিকেশনগুলি ব্যবহার করি না যা traditionতিহ্যগতভাবে পাতলা ক্লায়েন্ট।

আমি রেপো থেকে প্যাকেজ-লক.জসনটি অপসারণ করি কারণ এনপিএম ইনস্টল এই ফাইলটি উত্পন্ন করে এবং এনপিএম ইনস্টল অ্যাপ্লিকেশনটি চালিত প্রতিটি সার্ভারে স্থাপন করা প্রক্রিয়াটির অংশ। নোড এবং এনপিএমের সংস্করণ নিয়ন্ত্রণ প্রতিটি সার্ভারে ম্যানুয়ালি করা হয় তবে আমি সতর্কতা অবলম্বন করি যে সেগুলি একই হয়।

যখন npm installসার্ভারে চালানো হয়, তবে পরিবর্তনটি প্যাকেজ-lock.json, এবং যদি সেখানে যে সার্ভারে রেপো দ্বারা নথিভুক্ত করা হয় একটি ফাইলে পরিবর্তন, পরবর্তী প্রয়োগের আপনি মূল থেকে নতুন পরিবর্তনের টান করার অনুমতি দেয় অভ্যস্ত। এটিই আপনি মোতায়েন করতে পারবেন না কারণ টানাটি প্যাকেজ-লক.জসনে যে পরিবর্তনগুলি হয়েছে সেগুলি ওভাররাইট করে।

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

যদি নোড_মডিউলগুলি আপনার রেপোতে না থাকে (এবং এটি হওয়া উচিত নয়) তবে প্যাকেজ-লক.জসন উপেক্ষা করা উচিত।

যদি আমি কিছু মিস করছি তবে দয়া করে মন্তব্যে আমাকে সংশোধন করুন, তবে এই ফাইলটি থেকে সংস্করণটি নেওয়া হয়েছে তা বোঝা যায় না। ফাইল প্যাকেজ.জসনের এতে সংস্করণ নম্বর রয়েছে এবং আমি ধরে নিচ্ছি এনপিএম ইনস্টল যখন ঘটে তখন প্যাকেজগুলি তৈরি করতে এই ফাইলটি ব্যবহার করা হয়েছিল, যখন আমি এটি সরিয়ে দেই, এনপিএম ইনস্টলটি নীচে অভিযোগ করে:

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'

এবং বিল্ডটি ব্যর্থ হয়, তবে নোড_মডিউলগুলি ইনস্টল করার সময় বা জেএস / সিএসএস তৈরি করতে এনপিএম প্রয়োগ করার সময়, আমি প্যাকেজ-লক.জসন সরিয়ে দিলে কোনও অভিযোগ করা হবে না

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 ...

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