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


304

সুতা yarn.lockআপনি একটি সম্পাদন করার পরে একটি ফাইল তৈরি করে yarn install

এটি কি ভাণ্ডার প্রতি প্রতিশ্রুতিবদ্ধ বা উপেক্ষা করা উচিত? এটি কিসের জন্যে?


3
আইএমএইচও, এই প্রশ্নটি (এবং নীচের উত্তরগুলির বেশিরভাগটি) অসম্পূর্ণ, যেহেতু আমাদের সুতা.লক ফাইলটি পুনরায় জেনারেট করা উচিত?
মার্কহু

1
আপনি এখন জানেন কখন এবং কখন?
জয়য়ারজো

@ মার্কহু এটি এখানে পেয়েছেন: yarnpkg.com/lang/en/docs/yarn-lock/#toc-managed-by-yarn তাই মূলত:Your yarn.lock file is auto-generated and should be handled entirely by Yarn. As you add/upgrade/remove dependencies with the Yarn CLI, it will automatically update your yarn.lock file.
জয়য়ারজো

উত্তর:


271

হ্যাঁ, আপনার এটি পরীক্ষা করা উচিত, এনপিএম থেকে স্থানান্তরিত হওয়া দেখুন

সুতা আপনার প্যাকেজের মূল ডিরেক্টরিতে একটি সূতা.লক ফাইল তৈরি করবে। আপনার এই ফাইলটি পড়ার বা বোঝার দরকার নেই - এটি উত্স নিয়ন্ত্রণে পরীক্ষা করে দেখুন।


33
ভাল লাগছে। আমি তাদের ডক্স থেকে নিম্নলিখিতটি খুঁজে পেয়েছি যা "এটি কীসের জন্য?" এর জবাব দেয়: "এনপিএম ক্লায়েন্ট নোড_মডিউল ডিরেক্টরিতে অ-নির্ধারিতভাবে নির্ভরতা ইনস্টল করে This তার মানে অর্ডার নির্ভরতা ইনস্টল করা আছে, নোড_মডিউলগুলির কাঠামো based ডিরেক্টরি এক ব্যক্তি থেকে অন্য ব্যক্তির কাছে আলাদা হতে পারে These
rlay3

13
অবিরত: "সুতা লকফিল এবং একটি ইনস্টল অ্যালগরিদম যা ডিটারিনিস্টিক এবং নির্ভরযোগ্য ব্যবহার করে সংস্করণ এবং অ-নির্ধারণবাদের চারপাশে এই সমস্যাগুলি সমাধান করে These সমস্ত মেশিন জুড়ে নোড_মডিউল। "
rlay3

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

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

2
"আপনার এই ফাইলটি পড়ার বা বোঝার দরকার নেই" এই উক্তিটি সত্যই আমি পছন্দ করি না। আপনার প্রকল্প বজায় রাখতে এটি একটি গুরুত্বপূর্ণ ফাইল।
নাথন গোয়িংস

83

আপনার প্রকল্পের উপর নির্ভর করে:

  1. আপনার প্রকল্প কি একটি অ্যাপ্লিকেশন? তারপরে: হ্যাঁ
  2. আপনার প্রকল্প কি একটি গ্রন্থাগার? যদি তাই হয়: না

এর আরও বিস্তৃত বিবরণ এই গিটহাব ইস্যুতে পাওয়া যাবে যেখানে সুতোর এক স্রষ্টা যেমন। বলেছেন:

প্যাকেজ.জসন মূল লেখকের পছন্দসই সংস্করণগুলি বর্ণনা করে, অন্যদিকে ইয়র্নলক কোনও প্রদত্ত অ্যাপ্লিকেশনটির জন্য সর্বশেষ-জানা-ভাল কনফিগারেশন বর্ণনা করে।

কেবলমাত্র yarn.lockশীর্ষ স্তরের প্রকল্পের ফাইল ব্যবহার করা হবে। সুতরাং যদি না প্রকল্পগুলি এককভাবে ব্যবহৃত হয় এবং অন্য প্রকল্পে ইনস্টল না করা হয়, তবে কোনও- yarn.lockফাইল প্রতিশ্রুতিবদ্ধ করার কোনও লাভ নেই - পরিবর্তে package.jsonপ্রকল্পটি তারপরে নির্ভরতাগুলির কোন সংস্করণটি প্রত্যাশা করে তা সর্বদা ফাইভের হাতে থাকবে।


7
অন্যদিকে, লাইব্রেরি প্রকল্পগুলিতে লক ফাইল না থাকা কি তাদের নিজ নিজ পরীক্ষার পুনরুত্পাদনকে প্রভাবিত করবে?
ই_নেট 4 দ্যোপ ফাইন্ডার

1
আমি যদি আপনার বিবরণটি সঠিকভাবে পড়ি, "আপনার প্রকল্পটি কি একটি লাইব্রেরী?" "আপনি যদি চান" দিয়ে উত্তর দেওয়া যেতে পারে। এটি ডাউনসাইডস বলে মনে হচ্ছে না তবে এটি কার্যকর হতে পারে, যদি আপনার জটিল ডিভিডিপেন্ডেন্সি থাকে এবং আপনি চান যে আপনার লাইবের প্রতিটি বিকাশকারীর একই বিল্ড এবং স্ক্রিপ্টগুলি পরীক্ষা করা হোক। রাইট?
পাইপো

4
যেহেতু লক ফাইলটি আপনার গ্রন্থাগারের কোনও ব্যবহারকারীর জন্য সম্মানিত হবে না, তারপরে লাইব্রেরিটি
বিকাশকালে

1
ডার্টে পাবস্পেক.আইএমএল এবং পাবস্পেক.লক একই সিস্টেম রয়েছে এবং উত্তরের মতোই এটির প্রস্তাব দেয়। দেখুন এই প্রশ্ন ও এই ডকুমেন্টেশন এন্ট্রি।
জোনাস কেলো 17

16
দয়া করে
ইয়ার্নের

66

আমি দেখছি এগুলির একটিতে দুটি পৃথক প্রশ্ন। আমি উভয় উত্তর দিন।

আপনার কি রেপোতে ফাইল করা উচিত?

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

কী yarn.lock?

এটি এমন একটি ফাইল যা প্রতিটি প্যাকেজের জন্য চেকসামের সাথে আপনার প্রকল্পের সঠিক নির্ভরতা সংস্করণগুলি সঞ্চয় করে। এটি আপনার নির্ভরতার জন্য ধারাবাহিকতা সরবরাহ করার সুতার উপায় way

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

  1. নির্ভরতা লেখকরা প্যাচ সংস্করণ আপডেটগুলি প্রকাশ করতে পারে যখন বাস্তবে এমন একটি ব্রেকিং পরিবর্তন প্রবর্তন করবে যা আপনার প্রকল্পকে প্রভাবিত করবে।

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

অন্যদিকে সূতা সর্বাধিক পূর্বাভাসের রুট নেয়। সঠিক নির্ভরতা সংস্করণগুলি yarn.lockসংরক্ষণ করার জন্য এটি ফাইল তৈরি করে । সুতাটিতে সেই ফাইলটি থাকা থেকে সংস্করণগুলি সমাধান করার পরিবর্তে সঞ্চিত সংস্করণগুলি ব্যবহার করা হবে । এই কৌশলটি গ্যারান্টি দেয় যে উপরে বর্ণিত সমস্যাগুলির কোনওটিই ঘটবে না।yarn.lockpackage.json

yarn.lockকমান্ড npm-shrinkwrap.jsonদ্বারা তৈরি করা যেতে পারে যে অনুরূপ npm shrinkwrap। এই দুটি ফাইলের মধ্যে পার্থক্য ব্যাখ্যা করে এই উত্তরটি দেখুন ।


1
তবে আমি yarn.lockএখন এবং তারপরে আপডেট হওয়া দেখতে পাচ্ছি , কেন এবং কখন yarnতা কী আপনি জানেন ?
জয়য়ারজো

1
সুতা ইস্যু # 4379 এবং # 4147 প্যাকেজ.জসনে পরিবর্তন ছাড়াই চালানো সহ অনেক ক্ষেত্রে yarnআপডেটের পরামর্শ দেয় । ব্যবহার হিসাবে প্রস্তাব করা Windows এ সুতা চলমান কেন পরিবর্তন yarn.lock (অথবা মাধ্যমে এটি কনফিগার ) সেরা বাজি মত মনে হয়। yarn.lockyarn installyarn install --frozen-lockfile.yarnrc
লরি হার্পফ

এনপিএম আজকাল একটি package-lock.jsonএবং একটি আছে npm ci। যে কর্মপ্রবাহ অনুরূপ সুতা কারো নির্দেশ চলে না yarn.lockএবং yarn install --frozen-lockfile
k0pernikus

10

আমি হ্যাঁ অনুমান করব, যেহেতু সুতার সংস্করণটি তার নিজস্ব yarn.lock ফাইল: https://github.com/yarnpkg/yarn

এটি ডিটারমিনিস্টিক প্যাকেজ নির্ভরতা সমাধানের জন্য ব্যবহৃত হয় used


8

তোমার উচিত:

  1. এটি সংগ্রহস্থলে যুক্ত করুন এবং এটি প্রতিশ্রুতিবদ্ধ করুন
  2. স্থানীয়ভাবে এবং সিআই বিল্ড সার্ভারগুলিতে উভয়ই ডিফল্ট হিসাবে ব্যবহার করুন yarn install --frozen-lockfileএবং না yarn install

(হিমায়িত-লকফিল ডিফল্ট আচরণ করার জন্য কেস করার জন্য আমি সুতার ইস্যু ট্র্যাকারটিতে একটি টিকিট খুলেছি, # 4147 দেখুন )।


ফাইলটিতে frozen-lockfileপতাকাটি সেট না করার বিষয়ে সতর্ক থাকুন .yarnrcযা প্যাকেজ.জসন এবং ইয়ার্ন.লক ফাইলটি সিঙ্ক করতে আপনাকে আটকাবে। গিতুব সম্পর্কিত সুতা ইস্যু দেখুন


yarn installআপনার সুতাটিকে অনাকাঙ্ক্ষিতভাবে পরিবর্তন করতে পারে , পুনর্বারযোগ্যযোগ্য সুতার দাবী বাতিল এবং অকার্যকর করে তোলে। আপনার কেবল yarn installএকটি সুতা.লক আরম্ভ করার জন্য এবং এটি আপডেট করার জন্য ব্যবহার করা উচিত ।

এছাড়াও, এসএসপি বৃহত্তর দলে, আপনার সুতোর লক পরিবর্তনের বিষয়ে আপনার প্রচুর শব্দ হতে পারে কেবল কারণ কোনও বিকাশকারী তাদের স্থানীয় প্রকল্প স্থাপন করে setting

আরও তথ্যের জন্য, এনপিএমের প্যাকেজ-লক.জসন সম্পর্কে আমার উত্তরটি পড়ুন যেটি এখানেও প্রযোজ্য।


সুতা ইনস্টল করার জন্য ডক্সে এটি সম্প্রতি স্পষ্ট করে দেওয়া হয়েছিল :

yarn install

স্থানীয় নোড_মডিউল ফোল্ডারে প্যাকেজ.জসনের মধ্যে তালিকাভুক্ত সমস্ত নির্ভরতা ইনস্টল করুন।

yarn.lockফাইল নিম্নরূপ ব্যবহৃত হয়:

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

আপনি যদি নিশ্চিত করতে চান যে সুতা.লক আপডেট করা হয়নি তবে ব্যবহার করুন --frozen-lockfile.


যদিও সত্য, শুধুমাত্র সময় আমি মনে করি আপনি যে আছে ব্যবহার --frozen-lockfileযদি কেউ নিজে পরবর্তীকালে চলমান ছাড়া package.json আপডেট করা হয় yarn installএবং আপডেটের সংগঠনের। সুতরাং কোনও সিআই সেই পতাকাটি ব্যবহার করতে পারে, তবে বিকাশকারীদের উচিত নয় কারণ এটি সমস্যাগুলি লুকিয়ে রাখে।
jkrehm

@jkrehm সমস্যাগুলি গোপন করে আপনি কী বোঝাতে চান তার উপর নির্ভর করে। টানা অনুরোধগুলি ব্লুটিংয়ের মাধ্যমে বা অপ্রয়োজনীয় সংযুক্তির দ্বন্দ্ব সৃষ্টি করে বা ব্রেকিং লাইব্রেরিটি টানিয়ে অপ্রত্যাশিতভাবে পরিবর্তিত yarn.lockফাইলগুলির সাথে আমার আরও সমস্যা হয়েছিল yarn install। (কেবলমাত্র একটি গ্রন্থাগার সেমভার ব্যবহার করে, তার অর্থ এই নয় যে কোনও প্যাচ / মাইনর আপডেট আপনার অ্যাপ্লিকেশনটি ভাঙবে না - আমি সেখানে ছিলাম)) আমি বিবেচনা করি আপডেটটি yarn.lockকেবল একটি ম্যানুয়াল পদক্ষেপ হওয়া উচিত, এ কারণেই আমি আমার ডিভাইসটিতে yarn install --frozen-lockfile(এবং npm ciএনপিএম প্রকল্পগুলিতে) নির্ভর করি কারণ এটি নির্ভরযোগ্য এবং নির্বিচারক।
k0pernikus

1
yarn.lockঅপ্রত্যাশিতভাবে আপডেট হওয়ার সাথে আমার কখনই সমস্যা হয়নি (অক্টোবর ২০১ since সাল থেকে এটি প্রকাশের পরে ব্যবহার করা হচ্ছে)। এটি সর্বদা একজন ব্যবহারকারী হ'ল ম্যানুয়ালি কিছু কাজ করেছে বা একটি ইনস্টল পোস্ট-ইনস্টল পরবর্তী স্ক্রিপ্ট। এ কারণেই আমি এনপিএমের চেয়ে সুতা পছন্দ করি (এনপিএম যেকোন অল'ম সময় চায় তার আপডেট করে)। আমি অনুমান করি যে আমি এই বিষয়গুলিতে চালিত না হওয়ার জন্য নিজেকে ভাগ্যবান মনে করব।
jkrehm

5

আমার অভিজ্ঞতা থেকে আমি বলব হ্যাঁ আমাদের yarn.lockফাইল করা উচিত । এটি নিশ্চিত করবে যে, যখন অন্যান্য ব্যক্তিরা আপনার প্রকল্প ব্যবহার করে তারা আপনার প্রকল্পের প্রত্যাশার মতো একই নির্ভরতা পাবে।

ডক থেকে

আপনি যখন সুতা বা সুতা যোগ করুন চালনা করেন, সুতাটি আপনার প্যাকেজটির মূল ডিরেক্টরিতে একটি সূতা.লক ফাইল তৈরি করবে। আপনার এই ফাইলটি পড়ার বা বোঝার দরকার নেই - এটি উত্স নিয়ন্ত্রণে পরীক্ষা করে দেখুন। অন্যান্য ব্যক্তিরা যখন এনপিএমের পরিবর্তে সুতা ব্যবহার শুরু করেন, তখন yarn.lock ফাইলটি নিশ্চিত করবে যে তারা ঠিক আপনার মতোই নির্ভরতা পেয়েছে।

একটি যুক্তি হতে পারে, আমরা প্রতিস্থাপন করে এটি অর্জন করতে পারেন ^ সঙ্গে --। হ্যাঁ আমরা পারব, তবে সাধারণভাবে আমরা দেখেছি যে বেশিরভাগ npmপ্যাকেজগুলি ^স্বরলিপি সহ আসে এবং স্থির নির্ভরতার yarn.lockসংস্করণ নিশ্চিত করার জন্য আমাদের ম্যানুয়ালি স্বরলিপি পরিবর্তন করতে হয়। তবে আপনি যদি এটি ব্যবহার করেন তবে ক্রমবর্ধমানভাবে আপনার সঠিক সংস্করণটি নিশ্চিত করা হবে।

পাশাপাশি এরিক এলিয়ট এখানে বলেছিলেন

.Gitignore সুতা.লক না। এটি "আমার মেশিনে কাজ করে" বাগগুলি এড়ানোর জন্য নির্বিচার নির্ভর নির্ভরতা সমাধানের নিশ্চয়তা রয়েছে।



3

হ্যাঁ! yarn.lockঅবশ্যই নির্ভরযোগ্যতা ইনস্টল করে এমন কোনও বিকাশকারী ঠিক একই আউটপুট পান! সঙ্গে npm [যে অক্টোবর 2016 সালে পাওয়া যেত] , উদাহরণস্বরূপ, আপনি যদি একটি থাকতে পারে patchসংস্করণ (বলতে 1.2.0) স্থানীয়ভাবে ইনস্টল একটি নতুন ডেভেলপার একটি তাজা চলমান installএকটি ভিন্ন সংস্করণ (1.2.1) পেতে পারে।


1
আপনি উল্লিখিত এনপিএম আচরণ নির্ভর করে আপনি কীভাবে আপনার নির্ভরতাগুলি সংরক্ষণ করেন। আপনি যদি --save-exactএনপিএম ব্যবহারের সাথে সঞ্চয় করেন , আপনি একই আচরণ অর্জন করতে পারেন।
অ্যালিক্যানস

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

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

আমি এখনও এটি পুরোপুরি পুরোপুরি ঘোরাঘুরি করি নি, তবে আমি বিশ্বাস করি যে yarn upgradeকমান্ডটি কার্যকর হয়। এই কমান্ডটি সমস্ত প্যাকেজ আপগ্রেড করবে এবং লক ফাইলটি পুনরায় তৈরি করবে। সুতরাং, উদাহরণস্বরূপ, আপনি যদি কোনও অ্যাপ্লিকেশন উত্পাদনে নিযুক্ত করে থাকেন এবং এটি নির্ভরতা ইনস্টল করার প্রয়োজন হয় তবে এটি ভাণ্ডার থেকে নামানো লক ফাইলের ভিত্তিতে এটি করবে do আপনি yarn upgradeস্পষ্টভাবে নির্ভরতার তথ্য পরিবর্তন করতে না চাইলে কখনও চালানো উচিত নয় (এবং এইভাবে একটি নতুন লক ফাইল প্রতিশ্রুতিবদ্ধ)।
পরেরজনটেক

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