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




git npm (7)

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

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

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


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

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

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

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

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

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

[email protected]:introcart_wagtail$ rm package.json
[email protected]:introcart_wagtail$ npm install
npm WARN saveError ENOENT: no such file or directory, open '/home/jason/webapps/introcart_devtools/introcart_wagtail/package.json'

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

[email protected]:introcart_wagtail$ rm package-lock.json 
[email protected]:introcart_wagtail$ npm run dev

> [email protected].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 ...

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

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

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

শুভেচ্ছা।


হ্যাঁ, package-lock.json উত্স নিয়ন্ত্রণে যাচাই করার উদ্দেশ্যে। আপনি যদি এনপিএম 5 ব্যবহার করেন তবে আপনি এটি কমান্ড লাইনে দেখতে পাবেন: created a lockfile as package-lock.json. You should commit this file. 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 সম্পর্কে একটি মূল বিবরণ package-lock.json এটি প্রকাশ করা যাবে না, এবং শীর্ষ স্তরের প্যাকেজ ব্যতীত অন্য কোনও জায়গায় পাওয়া গেলে এটি উপেক্ষা করা হবে। এটি এনপিএম-সঙ্কিঙ্ক্র্যাপ.জসন (5) এর সাথে একটি ফর্ম্যাট ভাগ করে, যা মূলত একই ফাইল, তবে প্রকাশের অনুমতি দেয়। কোনও সিএলআই সরঞ্জাম মোতায়েন না করা বা অন্যথায় উত্পাদন প্যাকেজ উত্পাদন করার জন্য প্রকাশনা প্রক্রিয়া ব্যবহার না করা বাঞ্ছনীয় নয়।

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


হ্যাঁ, আপনার package-lock.json উচিত।

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

npm install কমান্ডের একটি বড় package-lock.json এটি package-lock.json রূপান্তর করতে পারে, যদিও npm ci কেবল লকফাইলে বর্ণিত সংস্করণগুলি ব্যবহার করে এবং package-lock.json এবং package.json সিঙ্কের বাইরে না থাকলে একটি ত্রুটি তৈরি করে।

সুতরাং, স্থানীয়ভাবে npm install চলছে, esp। একাধিক বিকাশকারী সহ বৃহত্তর দলে, package-lock.json এবং বিকাশকারীদের মধ্যে package-lock.json সম্পূর্ণরূপে মোছার সিদ্ধান্ত নেওয়ার মধ্যে প্রচুর দ্বন্দ্ব package-lock.json দিতে পারে।

তবুও প্রকল্পটির নির্ভরতা বিভিন্ন মেশিন জুড়ে নির্ভরযোগ্য উপায়ে পুনরাবৃত্তি সমাধান করতে পারে বলে বিশ্বাস করতে সক্ষম হওয়ার জন্য শক্তিশালী ব্যবহারের মামলা রয়েছে।

একটি package-lock.json আপনি হুবহু এটি পাবেন: একটি কাজ-থেকে-পরিচিত রাষ্ট্র।

অতীতে, আমার package-lock.json / npm-shrinkwrap.json package-lock.json / package-lock.json প্রকল্পগুলি ছিল যার yarn.lock একদিন ব্যর্থ হবে কারণ একটি এলোমেলো নির্ভরতা ব্রেকিং আপডেট পেয়েছে।

এই সমস্যাগুলি সমাধান করা শক্ত কারণ আপনার মাঝে মাঝে অনুমান করতে হবে শেষ কার্য সংস্করণটি কী ছিল।

আপনি যদি কোনও নতুন নির্ভরতা যুক্ত করতে চান তবে আপনি এখনও npm install {dependency} আপনি যদি আপগ্রেড করতে চান তবে npm update {dependency} use ব্যবহার করুন এবং পরিবর্তিত package-lock.json । (যদি কোনও আপগ্রেড ব্যর্থ হয়, আপনি শেষ কার্যকারী package-lock.json ফিরে যেতে পারেন))

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

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

এবং npm ci বনাম npm install মধ্যে পার্থক্য সম্পর্কিত :

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

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


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


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

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

পেশাদাররা: -

  • প্রকল্পের প্রত্যেকে একই প্যাকেজ সংস্করণে থাকবে, আপনাকে যা করতে হবে তা হ'ল

    এনপিএম ইনস্টল

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

কনস: -

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

হ্যাঁ, সেরা অনুশীলনটি চেক ইন করা

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

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





lockfile