আমার কি সুতা.লক এবং প্যাকেজ-লক.জসন ফাইলগুলি করা উচিত?


118

আমরা আমাদের সমস্ত ডিটারমিনিস্টিক পিকেজি ইনস্টলেশনের জন্য সুতা ব্যবহার করছি তবে ব্যবহারকারীকে এনপিএম ব্যবহার করা থেকে বিরত রাখবে না - আমি অনুমান করছি যে এই দুটি ফাইলই সমস্যা সৃষ্টি করবে। আপনার .gitignore দির একটি যুক্ত করা উচিত?


উত্তর:


148

সর্বদা নির্ভরতা লক ফাইলগুলি সাধারণভাবে প্রতিশ্রুতিবদ্ধ করুন

যেমন আছে আবৃত অন্যত্র, নির্ভরতা লক ফাইল, যা অনেক প্যাকেজ ম্যানেজমেন্ট সিস্টেম দ্বারা সমর্থিত (উদাহরণ: সুরকার এবং bundler ), শেষ অফ শৃঙ্খল প্রকল্পে কোডবেস করতে প্রতিশ্রুতিবদ্ধ করা হবে না - যাতে প্রতিটি প্রকল্পের চালানোর চেষ্টা করছে নির্ভরতা ঠিক পরীক্ষিত সেট সঙ্গে তাই ।

এটি লক ফাইলগুলি সর্বদা অন্যান্য প্যাকেজগুলিতে অন্তর্ভুক্ত করার উদ্দেশ্যে প্যাকেজগুলিতে প্রতিশ্রুতিবদ্ধ হওয়া উচিত কিনা (যেখানে আলগা নির্ভরতা কাম্য হয়) এটি কম পরিষ্কার। তবে সুতা এবং এনপিএম উভয়ই (@ সাইরিলে আচ্ছাদিত) বুদ্ধিমানের সাথে উপেক্ষা করুন yarn.lockএবং package-lock.jsonযথাক্রমে যেখানে প্রয়োজন সেখানে এটিকে সর্বদা লকফাইলে আটকানো নিরাপদ করে তোলে।

সুতরাং আপনি সর্বদা কমপক্ষে একটি প্রতিশ্রুতিবদ্ধyarn.lockpackage-lock.json হওয়া উচিত বা আপনি কোন প্যাকেজ পরিচালক ব্যবহার করছেন তার উপর নির্ভর করে।

আপনি কি yarn.lock এবং প্যাকেজ-লক.জসন উভয়ই প্রতিশ্রুতিবদ্ধ?

বর্তমানে আমরা দুটি ভিন্ন প্যাকেজ ম্যানেজমেন্ট সিস্টেম, যা উভয় ইনস্টল আছে নির্ভরতা একই সেট থেকে package.json, কিন্তু যা তৈরী করা এবং দুটি ভিন্ন lockfiles থেকে পড়া। এনপিএম 5 জেনারেট করে package-lock.json, যেখানে সুতা উত্পন্ন করে yarn.lock

যদি আপনি প্রতিশ্রুতি দেন package-lock.jsonতবে আপনি এনপিএম 5 দিয়ে আপনার নির্ভরতা ইনস্টল করা লোকদের সমর্থনে গড়ে তুলছেন you আপনি যদি প্রতিশ্রুতি দেন yarn.lock, আপনি সুতার সাথে নির্ভরতা ইনস্টল করা লোকেদের পক্ষে সমর্থন তৈরি করছেন।

আপনি প্রতিশ্রুতিবদ্ধ yarn.lockবা না বেছে নেওয়া package-lock.jsonউভয়ই নির্ভর করে আপনার প্রকল্পে বিকাশকারীরা কেবল সুতা বা এনপিএম 5 বা উভয়ই ব্যবহার করছেন কিনা on যদি আপনার প্রকল্পটি ওপেন সোর্স হয় তবে সবচেয়ে বেশি সম্প্রদায়-বান্ধব কাজটি হ'ল উভয়কেই প্রতিশ্রুতিবদ্ধ করা yarn.lockএবং package-lock.jsonসর্বদা সিঙ্কে থাকতে নিশ্চিত করার জন্য একটি স্বয়ংক্রিয় প্রক্রিয়া করা হবে ।

আপডেট: সুতা এখন একটি importকমান্ড চালু করেছে যা একটি yarn.lockফাইল থেকে একটি package-lock.jsonফাইল উত্পন্ন করবে । দুটি ফাইল সিঙ্কে রাখার জন্য এটি কার্যকর হতে পারে। (ধন্যবাদ @ উইকিশ)


এই বিষয়গুলি সুতা প্রকল্পে দৈর্ঘ্যে আলোচনা করা হয়েছিল:

দুটোই এখন বন্ধ।


1
দুর্দান্ত উত্তর। তবে, আপনার বক্তব্য সম্পর্কে: "সবচেয়ে নিরাপদ কাজটি হ'ল প্রতিবারই আপনার নির্ভরতা পরিবর্তিত হয়ে এগুলি উভয়ই উত্পন্ন করা এবং প্রতিশ্রুতিবদ্ধ করা।" আমি নিশ্চিত না কেন এটি করা "নিরাপদ" জিনিস হবে। যেমনটি আপনি উল্লেখ করেছেন, এটি সম্ভবত খুব সম্ভবত "দুটি ফাইল সিঙ্কের বাইরে চলে যেতে পারে।" @ ক্রিম্বোর উত্তর এই সমস্যাটিকে আরও বিশদে ব্যাখ্যা করে।
TachyonVortex

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

1
yarn import2018 সালে চালু হয়েছিল। yarnpkg.com/blog/2018/06/04/yarn-import-package-lock
দুর্বল

18

আপনার 1 টি নির্ভরতা ট্রি লক ফাইল প্রতিশ্রুতিবদ্ধ হওয়া উচিত, তবে আপনার উভয় প্রতিশ্রুতি দেওয়া উচিত নয়। এটির সাথে একটি প্রকল্প বিকাশ করতে সুতা বা এনপিএম (উভয় নয়) উভয়ই মানককরণ প্রয়োজন।

আপনি যদি সুতার মানকে মানিক করেন তবে এখানে সুতা.লকটি কেন প্রতিশ্রুতিবদ্ধ হওয়া উচিত তা সম্পর্কে সুতা নিবন্ধটি এখানে দেওয়া হয়েছে।

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

যদি এবং যখন সুতাটি ( ইস্যুyarn.lock করতে পারে ) ব্যবহার থেকে স্যুইচ করে , তবে লক ফাইলটি নির্বাচন করা পছন্দ করা সহজ হয়ে যায়, এবং আমাদের আর সুতা এবং এনপিএম সম্পর্কে চিন্তা করতে হবে না যার ফলে বিভিন্ন বিল্ড তৈরি হয়। এই ব্লগ পোস্টের উপর ভিত্তি করে , এই একটি পরিবর্তন আমরা শীঘ্রই আশা করবেন উচিত (ব্লগ লেখাটি মধ্যে পার্থক্য বর্ণনা এবং ।package-lock.jsonyarn.lockpackage-lock.json


11

আমি একই প্রশ্ন সম্পর্কে চিন্তা ছিল। এখানে আমার চিন্তাভাবনা, আশা করি এটি সহায়তা করবে:

Npm প্যাকেজ-lock.json ডকুমেন্টেশন নিম্নলিখিত বলেছেন:

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

এটি দুর্দান্ত কারণ এটি "আমার মেশিনে কাজ করে" প্রভাব প্রতিরোধ করে।

এই ফাইলটি ব্যতীত, আপনি npm install --save A, এনপিএম "A": "^1.2.3"আপনার যুক্ত হবে package.json। অন্য কেউ রান যখন npm installআপনার প্রকল্পের উপর, এটা সম্ভব যে সংস্করণ 1.2.4এর Aউঠিয়ে নেওয়া হয়েছে। যেহেতু এটি সর্বশেষতম উপলব্ধ সংস্করণ যা আপনার নির্দিষ্ট করা সেমভার পরিসীমা সন্তুষ্ট করে তাই package.jsonএটি এই সংস্করণটি ইনস্টল করবে। তবে এই সংস্করণে নতুন বাগ প্রবর্তিত হলে কী হবে? এই ব্যক্তির একটি সমস্যা থাকবে যা আপনি পুনরুত্পাদন করতে পারবেন না কারণ আপনার পূর্ববর্তী সংস্করণ রয়েছে কোনও বাগ ছাড়াই।

আপনার node_modulesডিরেক্টরিতে স্থির করে package-lock.jsonফাইলটি এই সমস্যাটিকে প্রতিরোধ করে কারণ প্রত্যেকেরই প্রতিটি প্যাকেজের একই সংস্করণ থাকবে।

তবে, আপনি যদি এনপিএম মডিউলটি লিখছেন এবং প্রকাশ করছেন? ডকুমেন্টেশন নিম্নলিখিত বলে:

প্যাকেজ-লক.জসন সম্পর্কে একটি মূল বিবরণ হ'ল এটি প্রকাশ করা যাবে না, এবং শীর্ষ স্তরের প্যাকেজ ব্যতীত অন্য কোথাও পাওয়া গেলে এটি উপেক্ষা করা হবে।

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


7

আমার থাম্বের নিয়মটি এখানে: আপনি যদি কোনও অ্যাপ্লিকেশন নিয়ে কাজ করছেন তবে লক ফাইল (গুলি) কমিট করুন। আপনি যদি কোনও লাইব্রেরি বজায় রাখছেন তবে এটিকে আপনার উপেক্ষা করা তালিকায় যুক্ত করুন। যে কোনও উপায়ে আপনার সঠিক সেমভার রেঞ্জগুলি ব্যবহার করা উচিত package.jsonইহুদা কাটজ ( ক্যাশেড ) কখন প্রতিশ্রুতি দেবেন Gemfile.lock(রুবির লক ফাইল) এবং কখন করবেন না তার দুর্দান্ত ব্যাখ্যা লিখেছিলেন । কমপক্ষে tl; dr বিভাগটি পড়ুন।


লিঙ্কটি নষ্ট হয়ে গেছে।
জুহা সিরিজালি

ধন্যবাদ @ জুহাসিরজিলি। আমি নিবন্ধে একটি দ্বিতীয় লিঙ্ক যুক্ত।
রেভেনজিনিয়াস

এনপিএম বা সুতার জন্য উপেক্ষা করার তালিকা কোথায়?
Neves

"উপেক্ষা তালিকা" আপনার প্রকল্পের উত্স ভান্ডার (গিট, পারদর্শী, সাবভার্সন) এর জন্য সুনির্দিষ্ট হবে। গিটের ক্ষেত্রে, ফাইলটি বলা হয় .gitignoreএবং সাধারণত প্রকল্পের মূলে থাকে।
ravinggenius

4

আপনি সঠিক! উভয়কে ব্যবহার npmএবং yarnব্যবহারের অনুমতি দেওয়া সমস্যার কারণ হতে চলেছে। এই নিবন্ধটি একবার দেখুন ।

বর্তমানে, আমরা প্যাকেজ ইনস্টল করতে ব্যবহারকারীyarn এবং npmএকই সংগ্রহস্থল উভয় ব্যবহার করে এমন কিছু সতর্কতা যুক্ত করার পরিকল্পনা করছি

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

আপনি উভয় npmএবং yarnআপনার প্যাকেজ পরিচালক হিসাবে না চাইতে পারেন ।


2

এই ফাইলগুলি আপনার সরঞ্জামগুলি দ্বারা পরিচালিত হয়, সুতরাং সুতা ব্যবহার করে ধরে নেওয়া কার্যকরভাবে আপডেট হবে package-lock.json– আমি মনে করি উভয় ফাইলই ঠিকঠাক করে কাজ করে।

আমি মনে করি আপনার ব্যবহারকারীর পক্ষে সবচেয়ে গুরুত্বপূর্ণ হ'ল package-lock.json(আমি উদাহরণস্বরূপ, সুতা ব্যবহার করি না) সুতরাং এটির প্রতিশ্রুতিবদ্ধ হতে হবে।

আপনি yarn.lockযদি একা বা একটি দলে কাজ করেন তবে এটি নির্ভর করে। যদি একক হয়, তবে আমি মনে করি এটি করার কোন দরকার নেই। আপনি যদি কোনও দলে কাজ করার পরিকল্পনা করেন তবে কমপক্ষে সুতার আগ পর্যন্ত আপনার সম্ভবত এটি করা উচিত সমর্থন না করা 🙂

আমি অবশেষে ব্যবহার বন্ধ করবে সুতা দল অনুমান করা yarn.lockএবং ব্যবহার package-json.lockপরিবর্তে, এই সময়ে এটা সহজ হয়ে যাবে 😛


1
সুতা.লক ব্যবহার করা থামেনি।
জয়য়ারজো

0

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

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