প্যাকেজ.জসনে টিলড (~) এবং ক্যারেট (^) এর মধ্যে পার্থক্য কী?


3378

আমি সর্বশেষ স্থিতিশীল nodeএবং আপগ্রেড করার পরে npm, আমি চেষ্টা করেছি npm install moment --save। এটি package.jsonক্যারেট ^উপসর্গ সহ এন্ট্রি সংরক্ষণ করে । পূর্বে এটি টিলড ~উপসর্গ ছিল।

  1. কেন এই পরিবর্তনগুলি করা হয় npm?
  2. টিলড ~এবং কেরেটের মধ্যে পার্থক্য কী ^?
  3. অন্যের চেয়ে সুবিধা কী?

42
অবগতির জন্য আপনি উপসর্গ প্রতিরোধ বা করে একটি কাস্টম এক ব্যবহার করতে পারেন: npm config set save-prefix=''। ( ~যদি আপনি এটি পছন্দ করেন তবে কোটগুলিতে আঁকুন)) আমি ব্যক্তিগতভাবে এটি করি এবং উত্পাদনের জিনিসগুলির জন্য সঙ্কুচিত করি।
fncomp

19
কীভাবে টিলড এবং ক্যারেট কাজ করে এবং পার্থক্যগুলির সমস্ত কৌতুকপূর্ণ বিবরণ: github.com/npm/node-semver#tilde-ranges-123-12-1
জেফ্রি মার্টিনেজ

11
এই সরঞ্জামটি semver.npmjs.com
ছায়াছাইয়া

@fncomp কেবল আপনার মন্তব্যটি পেয়েছি কিনা তা স্পষ্ট করে বলতে চেয়েছিলেন .. আপনি কি আপনার প্রকল্পের নির্ভরতার নির্দিষ্ট সংস্করণগুলি ব্যবহার করেন? আমাদের দল নির্ভরতা আপগ্রেড করতে দ্বিধাগ্রস্থ .. আপনি নির্ভরশীলতার জন্য নির্দিষ্ট সংস্করণ বা '~' উপসর্গটি ব্যবহার করার পরামর্শ দিচ্ছেন ..?
ব্লগস 4 টি

@ এফএনসিপি আপনি "আমি ব্যক্তিগতভাবে এটি করি এবং উত্পাদনের জিনিসের জন্য সঙ্কুচিত" বলে আপনি কী বোঝাতে চেয়েছেন তা কী আপনি দয়া করে বিশদ বলতে পারেন? ধন্যবাদ!
ব্লগস 4 টি

উত্তর:


3836

দেখুন NPM ডক্স এবং semver ডক্স

~ সংস্করণ "আনুমানিক সংস্করণের সমতুল্য", ছোটখাটো সংস্করণ বৃদ্ধি না করে আপনাকে ভবিষ্যতের সমস্ত প্যাচ সংস্করণে আপডেট করবে। ~1.2.31.2.3 থেকে <1.3.0 এ রিলিজ ব্যবহার করবে।

^ সংস্করণ "সংস্করণের সাথে সামঞ্জস্যপূর্ণ", আপনাকে বড় সংস্করণ বাড়িয়ে না দিয়ে ভবিষ্যতের সমস্ত ছোট / প্যাচ সংস্করণে আপডেট করবে। ^2.3.42.3.4 থেকে <3.0.0 এ রিলিজ ব্যবহার করবে release

নীচে মন্তব্য দেখুন।


323
আশা করি এমন লোকদের ধরার জন্য এখানে পোস্ট করা যা এটিকে পুরোপুরি ভাবেন না, তবে ^ এবং both উভয়ই ধরে নিয়েছেন যে আপনি আপনার নির্ভরতা থেকে অপ্রাপ্তবয়স্ক এবং পয়েন্ট প্রকাশের উপর বিশ্বাস রাখতে পারেন। আপনি যদি কোনও লাইব্রেরি প্রকাশ করছেন এবং অন্য লোকেরা আপনার উপর বিশ্বাস রাখতে চান, তবে বিনা মূল্যে ডাউনস্ট্রেম ডিপেন্ডেন্সগুলি গ্রহণ করবেন না। আপনার নির্ভরতা থেকে একটি খারাপ বিন্দু মুক্তি প্রবাহের চেইন প্রতিক্রিয়া সৃষ্টি করতে পারে এবং জিনিসগুলি যখন নাশপাতি আকারে যায় তখন লোকেরা আপনার দরজায় নক করে। এটি আপনার উত্পাদন কোডে এনপিএম সঙ্কুচিত ব্যবহার করার আরও একটি বিশাল কারণ।
tehfoo

8
আপনি কেবল এনপিএম এর সমস্ত বাজে কথাগুলি আপনার সংস্করণগুলিকে একটি ^বা একটি দিয়ে প্রিন্টিং দিয়ে সরিয়ে ফেলতে পারেন ~। আপনি যদি আপনার সংস্করণগুলিতে কঠোর নিয়ন্ত্রণ রাখতে চান তবে এটি সেট করুন: npm config set save-prefix=''
কুমারহর্ষ

5
@ প্রসংশাথ ঠিক বলেছেন: ডকস.এনএমজেজেএস থেকে / ম্যাসিক / সেমভার থেকে ## ক্রেট- রেঞ্জগুলি 1-2-2-3-0-2-5-0-0-4 : ক্যারেট রেঞ্জগুলি ^ 1.2.3 ^ 0.2.5 ^ 0.0 .4। বাম-সর্বাধিক অ-শূন্য অঙ্ককে [প্রধান, গৌণ, প্যাচ] টিপলটিতে পরিবর্তন না করে এমন পরিবর্তনগুলিকে মঞ্জুরি দেয়। অন্য কথায়, এটি প্যাচ এবং 1.0.0 ও এর বেশি সংস্করণগুলির সামান্য আপডেটগুলি, সংস্করণ 0.X> = 0.1.0 এর জন্য প্যাচ আপডেটগুলি এবং 0.0.X সংস্করণের জন্য কোনও আপডেটের অনুমতি দেয়
rofrol

15
semver মধ্যে @jgillich যখন আপনি ব্যবহার 0.2.x, 2একটি নয় major version। যে কেন docs.npmjs.com নির্দিষ্ট শব্দ ব্যবহৃত: the left-most non-zero digit। এছাড়াও এই ক্ষেত্রে কী: ^ 0.0.4 এর অর্থ 0.0.4
রোফ্রোল

11
@ ফাগনারব্র্যাক: আপনার দেওয়া নির্দিষ্ট উদাহরণটি সঠিক, তবে সাধারণত আপনার চিন্তাভাবনা ভুল is একটি উদাহরণ: আসুন বলে আপনি প্যাকেজ আছে A3 সংস্করণে: 0.0.1, 0.0.2এবং 0.0.3। একটি ত্রুটি রয়েছে 0.0.1যাতে আপনি কমপক্ষে 0.0.2আপনার প্যাকেজে থাকতে চান B। আপনি লিখলে 0.0.xআপনি পাবেন 0.0.3, যা ঠিক আছে। কিন্তু অন্য কিছু প্যাকেজ যদি Cউভয় প্রয়োজন Bএবং Aএবং অতিরিক্ত সীমাবদ্ধ করেছেন "A": "<0.0.2"আপনি পাবেন 0.0.1কোনো বিরোধ ইস্যু, যা নয় কি আপনি চান না দেখিয়ে। টিলড ব্যবহার করা ~0.0.2আপনাকে এই সমস্যাটি এড়াতে সহায়তা করবে।
ম্যাকিয়েজ এসজে

861

আমি আনুষ্ঠানিক এনপিএমজেএস ডকুমেন্টেশন যুক্ত করতে চাই যা সংস্করণে নির্দিষ্টকরণের সমস্ত পদ্ধতির বিবরণ দেয় যা প্রশ্নে উল্লিখিত রয়েছে -

https://docs.npmjs.com/files/package.json

https://docs.npmjs.com/misc/semver#x-ranges-12x-1x-12-

  • ~version"সংস্করণের সমান সমান" এনপিএম সেমভার দেখুন - টিলডে রেঞ্জ এবং সেমভার (7)
  • ^version"সংস্করণের সাথে সামঞ্জস্যপূর্ণ" এনপিএম সেমভার দেখুন - ক্যারেট রেঞ্জ এবং সেমভার (7)
  • version হুবহু সংস্করণ মেলাতে হবে
  • >version সংস্করণের চেয়ে বড় হওয়া আবশ্যক
  • >=version ইত্যাদি
  • <version
  • <=version
  • 1.2.x ১.০.০, ২.২.১ ইত্যাদি, তবে ১.৩.০
  • http://sometarballurl (এটি কোনও টারবলের URL হতে পারে যা স্থানীয়ভাবে ডাউনলোড এবং ইনস্টল করা হবে
  • * কোনও সংস্করণ মেলে
  • latest সর্বশেষ প্রকাশ পেয়েছে

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


8
সংস্করণগুলির যথাযথ পরিসীমা উল্লেখ করাও সম্ভব, যেমন 1.2.0 || >=1.2.2 <1.3.0: ঠিক ১.২.০, বা ১.২.২ থেকে ১.৩.০ (অন্তর্ভুক্ত), তবে ১.২.১, বা ১.৩.১ এবং এর উপরে এবং ১.১ নয় .x এবং নীচে।
কোডম্যানএক্স

উপরের একটি সুনির্দিষ্ট লিঙ্কটি ফর্ম করুন -> ডকস.এনএমজেজেএস
টবি

"Approximately equivalent to version"এবং "Compatible with version"হতাশাজনকভাবে-এবং ^ আচরণ বর্ণনা করার জন্য অ-নির্দিষ্ট উপায়। একটি সত্য উত্তর দেওয়ার জন্য আপনাকে @ jgillich ধন্যবাদ!
স্কট স্টাফোর্ড

635

npm নির্দিষ্ট করে তুলনায় একটি প্যাকেজের নতুন সংস্করণ ইনস্টল করতে দেয়। টিল্ড ( ~) ব্যবহার করা আপনাকে বাগ ফিক্স রিলিজ দেয় এবং ক্যারেট ( ^) আপনাকে পিছনে সামঞ্জস্যপূর্ণ নতুন কার্যকারিতাও দেয়।

সমস্যাটি হ'ল পুরানো সংস্করণগুলি সাধারণত তত বেশি বাগ সংশোধন করে না, তাই এনপিএম ক্যারেট ( ^) ডিফল্ট হিসাবে ব্যবহার করে --save

সেমভার টেবিল

এর মতে: "সেমভার ব্যাখ্যা করেছেন - আমার প্যাকেজ.জসনে একটি ক্যারেট (^) কেন আছে?"

নোট করুন যে বিধিগুলি 1.0.0 এর উপরে সংস্করণগুলিতে প্রযোজ্য এবং প্রতিটি প্রকল্পই সিনেমিক সংস্করণ অনুসরণ করে না। সংস্করণ 0.xx এর জন্য ক্যারেট কেবল প্যাচ আপডেটের অনুমতি দেয় , অর্থাত্ এটি টিলডের মতোই আচরণ করে। দেখুন "ক্যারেট রেঞ্জের"

এখানে ধারণাগুলির একটি চাক্ষুষ ব্যাখ্যা:

সেমভার ডায়াগ্রাম

সূত্র: "শব্দার্থক সংস্করণ চিটশিট"


2
^ 0.2.5 সম্পর্কে কী? থেকে docs.npmjs.com/misc/semver#caret-ranges-1-2-3-0-2-5-0-0-4 : ক্যারেট পরিসর ^ 1.2.3 ^ 0.2.5 ^ 0.0.4। বাম-সর্বাধিক অ-শূন্য অঙ্ককে [প্রধান, গৌণ, প্যাচ] টিপলটিতে পরিবর্তন না করে এমন পরিবর্তনগুলিকে মঞ্জুরি দেয়। অন্য কথায়, এটি প্যাচ এবং 1.0.0 ও এর বেশি সংস্করণগুলির সামান্য আপডেটগুলি, সংস্করণ 0.X> = 0.1.0 এর জন্য প্যাচ আপডেটগুলি এবং 0.0.X সংস্করণের জন্য কোনও আপডেটের অনুমতি দেয়
rofrol

11
০.০.০. এর আগে যে কোনও সংস্করণ @rofrol অস্থির হিসাবে বিবেচনা করা হয় এবং এই বিধিগুলি প্রয়োগ হয় না
pspi

2
সুতরাং আপনার ব্যাখ্যাটি সম্পূর্ণ নয়
rofrol

5
@ রফ্রোল হ্যাঁ, পঠনযোগ্যতার জন্য বাদ দেওয়া কখনও কখনও ভাল, প্যাকেজ জসনে নির্ভরতার জন্য ১.০.০ এর নিচে কিছু থাকার সম্ভাবনা খুব কম। এছাড়াও দেখুন 20/80 নীতি, কি গুরুত্বপূর্ণ তা ফোকাস করার জন্য একটি দুর্দান্ত নিয়ম
pspi

1
@pspi ১.০.০ এর নীচে সংস্করণগুলি থাকা কি "সম্ভাবনা"? 60 এর মধ্যে আমরা 15 ডলার পেয়েছি এবং তাদের বেশিরভাগই অস্পষ্ট নয়।
ডেভ নিউটন

99

Semver

<major>.<minor>.<patch>-beta.<beta> == 1.2.3-beta.2
  • এনপিএম সেমভার ক্যালকুলেটর ব্যবহার করুন পরীক্ষার জন্য। (যদিও ^ (একই বড় পরিসরে একটি নির্দিষ্ট সংস্করণের চেয়ে বড় কিছু অন্তর্ভুক্ত) এবং for (একই মাইনর রেঞ্জের একটি নির্দিষ্ট সংস্করণের চেয়ে বড় কিছু অন্তর্ভুক্ত করা উচিত) এর ব্যাখ্যাগুলি 100% সঠিক না হলেও ক্যালকুলেটরটি ঠিকঠাকভাবে কাজ করছে বলে মনে হচ্ছে )
  • বিকল্পভাবে, পরিবর্তে SemVer চেক ব্যবহার করুন, যার জন্য আপনাকে প্যাকেজ বাছাই করার প্রয়োজন হয় না এবং ব্যাখ্যাও সরবরাহ করে।

পরিবর্তনের অনুমতি দিন বা অনুমতি দিন

  • পিন সংস্করণ: 1.2.3
  • ^(মাথা মত) ব্যবহার করুন । বাম দিক থেকে দ্বিতীয় অ-শূন্য স্তরে আপডেটগুলির অনুমতি দেয়:^0.2.3 মানে 0.2.3 <= v < 0.3
  • ব্যবহার ~(লেজের মতো) । সাধারণত ডান-সর্বাধিক স্তর হিমায়িত করুন বা বাদ দেওয়া হলে শূন্য সেট করুন:
    • ~1 মানে 1.0.0 <= v < 2.0.0
    • ~1.2 মানে 1.2.0 <= v < 1.3.0
    • ~1.2.4মানে 1.2.4 <= v < 1.3.0
  • ডান-সর্বাধিক স্তর ছাড়ুন: 0.2 অর্থ 0.2 <= v < 1। থেকে পৃথক ~:
    • বাদ দেওয়া স্তরের সংস্করণ শুরু করা সর্বদা 0
    • সাবলেভেলগুলি নির্দিষ্ট না করেই আপনি বড় সংস্করণ শুরু করতে পারেন।

সমস্ত (আশা) সম্ভাবনা

প্রধান-স্তরের শুরু করে সেট করুন এবং আপডেটগুলি উপরের দিকে মঞ্জুরি দিন

*  or "(empty string)   any version
1                         v >= 1

প্রধান স্তরের স্থির করুন Free

~0 (0)            0.0 <= v < 1
0.2               0.2 <= v < 1          // Can't do that with ^ or ~ 
~1 (1, ^1)        1 <= v < 2
^1.2              1.2 <= v < 2
^1.2.3            1.2.3 <= v < 2
^1.2.3-beta.4     1.2.3-beta.4 <= v < 2

গৌণ-স্তরের স্থির করুন

^0.0 (0.0)        0 <= v < 0.1
~0.2              0.2 <= v < 0.3
~1.2              1.2 <= v < 1.3
~0.2.3 (^0.2.3)   0.2.3 <= v < 0.3
~1.2.3            1.2.3 <= v < 1.3

প্যাচ-স্তর স্থির করুন

~1.2.3-beta.4     1.2.3-beta.4 <= v < 1.2.4 (only beta or pr allowed)
^0.0.3-beta       0.0.3-beta.0 <= v < 0.0.4 or 0.0.3-pr.0 <= v < 0.0.4 (only beta or pr allowed)
^0.0.3-beta.4     0.0.3-beta.4 <= v < 0.0.4 or 0.0.3-pr.4 <= v < 0.0.4 (only beta or pr allowed)

আপডেটগুলি বাতিল করুন

1.2.3             1.2.3
^0.0.3 (0.0.3)    0.0.3

বিজ্ঞপ্তি : বড়, নাবালক, প্যাচ অনুপস্থিত বা betaসংখ্যা ছাড়াই নির্দিষ্ট করা, একইany নিখোঁজ স্তরের মতো।

বিজ্ঞপ্তি : আপনি যখন একটি প্যাকেজ ইনস্টল করেন যা 0প্রধান স্তর হিসাবে থাকে, আপডেটটি কেবল নতুন বিটা / পিআর স্তরের সংস্করণ ইনস্টল করবে! এর কারণ হিসাবে ইনস্টল সংস্করণটি ডিফল্ট হিসাবে npmসেট ^হয় package.jsonএবং 0.1.3এটি সমস্ত বড় / গৌণ / প্যাচ স্তরকে হিমায়িত করে।


লোককে 0 থেকে প্রকল্পগুলি শুরু করা এড়াতে বলা কারণ গ্রন্থাগার এবং গ্রাহক বিকাশকারীরা সিস্টেমটি বুঝতে পারে না এটি একটি ভয়াবহ সমাধান। আমার মনে হয় @ এসডিফাসডফ্যাডস এর আরও ভাল তথ্য রয়েছে।
প্রোলোজার

@ প্রলোজার আমি কেবল মনে করি যে সিস্টেমটি সহজ করা উচিত, এবং আমাদের 0.x সংস্করণ ব্যবহার করা উচিত নয়।
রফ্রোল

1
প্রারম্ভিক লাইফসাইकल বিকাশ এবং v0 এর আশেপাশের ব্যবহারের বিষয়টি প্রচুর অর্থবোধ করে। ভি0 কীভাবে সঠিকভাবে আচরণ করে তা শেখার ফলে আমাকে অন্যান্য প্রাথমিক-জীবনচক্র প্রকল্পের প্রত্যাশায় দেখা দিয়েছে। এর অর্থ হ'ল আপনার প্রকল্পটি 1.x (ওরফে: স্থিতিশীল) হিসাবে ঘোষণা করার জন্য বাধ্য না করে প্রচুর ব্যাকওয়ার্ডের সাথে অসম্পূর্ণতার সাথে দ্রুত পরিবর্তনশীল এপিআই থাকতে পারে যখন তা সত্যই নয়।
প্রোলার

আমি এটি বুঝতে পারি, তবে আমি কেবল এটি পছন্দ করি না এটি কীভাবে সেমভার এবং কোয়ালিফায়ারদের সাথে কাজ করে
rofrol

2
এটি আরও একটি মতামত মত মনে হয় এবং একটি সাধারণভাবে গৃহীত পদ্ধতির হিসাবে ফ্রেম করা উচিত নয়। এবং ^ 0.1.x প্যাচগুলি পুরোপুরি সূক্ষ্ম হয়।
প্রোলার

93

~প্রধান এবং গৌণ সংখ্যা সংশোধন করে। আপনি যখন আপনার নির্ভরতার মধ্যে বাগ-ফিক্সগুলি গ্রহণ করতে প্রস্তুত হন তখন এটি ব্যবহার করা হয়, তবে কোনও সম্ভাব্য বেমানান পরিবর্তন চান না।

^শুধুমাত্র প্রধান সংখ্যা স্থির করে। আপনি যখন আপনার নির্ভরতাগুলি ঘনিষ্ঠভাবে পর্যবেক্ষণ করছেন এবং ছোটখাট প্রকাশটি বেমানান হয় তবে আপনার কোডটি দ্রুত পরিবর্তন করতে প্রস্তুত হলে এটি ব্যবহৃত হয়।

যে ছাড়াও, ^হয় সমর্থিত নয় পুরাতন npm সংস্করণ দ্বারা, এবং সাবধানতার সাথে ব্যবহার করা উচিত।

সুতরাং, ^একটি ভাল ডিফল্ট, তবে এটি নিখুঁত নয়। আমি সাবধানে সেমভার অপারেটরটি বাছাই এবং কনফিগার করার পরামর্শ দিচ্ছি যা আপনার পক্ষে সবচেয়ে কার্যকর।


13
সত্য নয়: ক্যারেটের ব্যাপ্তি ^ 1.2.3 ^ 0.2.5 ^ 0.0.4। বাম-সর্বাধিক অ-শূন্য অঙ্ককে [প্রধান, গৌণ, প্যাচ] টিপলটিতে পরিবর্তন না করে এমন পরিবর্তনগুলিকে মঞ্জুরি দেয়। অন্য কথায়, এটি প্যাচ এবং 1.0.0 ও এর বেশি সংস্করণগুলির সামান্য আপডেটগুলি, সংস্করণ 0.X> = 0.1.0 এর জন্য প্যাচ আপডেটগুলি এবং 0.0.X সংস্করণের জন্য কোনও আপডেটের অনুমতি দেয় docs.npmjs.com/misc/semver#care-ranges-1-2-3-0-2-5-0-0-04
rofrol

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

2
@ দিবাজ তাদের অর্থ "সংশোধন" না করে "সংজ্ঞায়িত" ("ফিক্সেট") হিসাবে "সংশোধন" করা, যাতে আপনি কীভাবে প্রধান সংখ্যাটি হ্যান্ডেল হয় সে সম্পর্কে আপনি সকলেই একমত হন।
মার্টিনাস

1
হ্যাঁ, এই উত্তরটি পুরোপুরি পেছনের দিকে মনে হয়েছিল যতক্ষণ না আমি উত্তরদাতাকে বুঝিয়েছি "স্থির, স্থির বা অপরিবর্তনীয়" হিসাবে "স্থির" হিসাবে।
NattyC

57

~: যুক্তিসঙ্গতভাবে ঘনিষ্ঠ করার

   ~1.1.5: 1.1.0 <= accepted < 1.2.0

^: কি সমঞ্জসে সঙ্গে

   ^1.1.5: 1.1.5 <= accepted < 2.0.0

   ^0.1.3: 0.1.3 <= accepted < 0.2.0

   ^0.0.4: 0.0.4 <= accepted < 0.1.0

17
@kytwb - না জেরোথ-রিলিজ সংস্করণ সংখ্যার বিশেষ ক্ষেত্রে ক্যারেট টিলডের সমান। এটি ^0.1.3কেবলমাত্র সামান্য বর্ধন সত্ত্বেও কেবল সংস্করণগুলি গ্রহণ করে 0.1.xএবং গ্রহণ করবে না 0.2.0। এই আচরণ সমতুল্য ~0.1.3। এই আচরণের পিছনে যুক্তিটি জেরোথ-রিলিজ প্যাকেজগুলি এখনও অস্থির হিসাবে বিবেচিত হওয়ার কারণে হয়; semver.org , # 4 এর কথায় , "যে কোনও সময়ে যে কোনও কিছুতেই পরিবর্তন হতে পারে" (পিছনের দিকে-অসম্পূর্ণ পরিবর্তনগুলি সহ)।
ছারভে

31

^[১] [যে কোনও] (সর্বশেষ মাইনর সংস্করণ)
~১.২। [যে কোনও] (সর্বশেষ প্যাচ)

একটি মহান পঠিত এই ব্লগ পোস্টে কিভাবে semver npm প্রযোজ্য উপর
এবং যা তারা করছেন এটি মেলে করতে semver মান
http://blog.npmjs.org/post/98131109725/npm-2-0-0


2
সত্য নয়: ক্যারেটের ব্যাপ্তি ^ 1.2.3 ^ 0.2.5 ^ 0.0.4। বাম-সর্বাধিক অ-শূন্য অঙ্ককে [প্রধান, গৌণ, প্যাচ] টিপলটিতে পরিবর্তন না করে এমন পরিবর্তনগুলিকে মঞ্জুরি দেয়। অন্য কথায়, এটি প্যাচ এবং 1.0.0 ও এর বেশি সংস্করণগুলির সামান্য আপডেটগুলি, সংস্করণ 0.X> = 0.1.0 এর জন্য প্যাচ আপডেটগুলি এবং 0.0.X সংস্করণের জন্য কোনও আপডেটের অনুমতি দেয় docs.npmjs.com/misc/semver#care-ranges-1-2-3-0-2-5-0-0-04
rofrol

28

টুপি মিলে যাওয়া "ভাঙ্গা" হিসাবে বিবেচিত হতে পারে কারণ এটি আপডেট ^0.1.2হয় না 0.2.0। সফ্টওয়্যারটি যখন ব্যবহার 0.x.yসংস্করণগুলি এবং হ্যাট ম্যাচিংয়ের উত্থান ঘটবে কেবল তখনই শেষের ভিন্ন ভিন্ন অঙ্কের সাথে মিলবে y। এটি উদ্দেশ্য অনুযায়ী করা হয়। কারণটি হ'ল সফ্টওয়্যারটি বিকশিত হওয়ার সাথে সাথে এপিআই দ্রুত পরিবর্তন হয়: একদিন আপনার এই পদ্ধতিগুলি রয়েছে এবং অন্য দিন আপনার সেই পদ্ধতিগুলি রয়েছে এবং পুরানোগুলি চলে গেছে। আপনি যদি ইতিমধ্যে আপনার লাইব্রেরি ব্যবহার করছেন এমন লোকদের জন্য কোডটি ভাঙতে না চান তবে আপনি যান এবং প্রধান সংস্করণটি বৃদ্ধি করুন: যেমন 1.0.0-> 2.0.0-> 3.0.0। সুতরাং, আপনার সফ্টওয়্যারটি অবশেষে 100% সম্পন্ন হয়ে গেছে এবং পূর্ণ বৈশিষ্ট্যযুক্ত সংস্করণটির মতো হবে 11.0.0এবং এটি খুব অর্থবহ দেখাচ্ছে না এবং আসলে বিভ্রান্তিকর দেখাচ্ছে। আপনি যদি অন্যদিকে ছিলেন 0.1.x-> ব্যবহার করে0.2.x-> 0.3.xসংস্করণগুলি তখন সফ্টওয়্যার অবশেষে ১০০% হয়ে যায় এবং সম্পূর্ণ বৈশিষ্ট্যযুক্ত সংস্করণ হিসাবে এটি প্রকাশিত হয় 1.0.0এবং এর অর্থ "এই প্রকাশটি দীর্ঘমেয়াদী একটি পরিষেবা, আপনি আপনার প্রোডাকশন কোডে লাইব্রেরির এই সংস্করণটি ব্যবহার করতে পারেন, এবং লেখক আগামীকাল বা পরের মাসে সবকিছু পরিবর্তন করবেন না এবং তিনি প্যাকেজটি ত্যাগ করবেন না।

নিয়ম হল: ব্যবহার 0.x.yভার্সন যখন আপনার সফ্টওয়্যার এখনো পূর্ণবিকশিত নি এবং মধ্যম অঙ্ক যখন আপনার সর্বজনীন এপিআই পরিবর্তন বৃদ্ধিশীল সঙ্গে এটি রিলিজ (অতএব থাকার মানুষ ^0.1.0পাবেন না 0.2.0আপডেট এবং এটা তাদের কোড ভঙ্গ হবে না)। তারপর যখন সফ্টওয়্যার matures, নীচে মুক্তি 1.0.0এবং বামদিকের অঙ্ক প্রতিটি সময় আপনার সর্বজনীন এপিআই পরিবর্তন বাড়ায় (অতএব থাকার মানুষ ^1.0.0পাবেন না 2.0.0আপডেট এবং এটা তাদের কোড ভঙ্গ হবে না)।

Given a version number MAJOR.MINOR.PATCH, increment the:

MAJOR version when you make incompatible API changes,
MINOR version when you add functionality in a backwards-compatible manner, and
PATCH version when you make backwards-compatible bug fixes.

এই মন্তব্যটি হাস্যকরভাবে সহায়ক এবং এটি খুব ভালভাবে নথিভুক্ত করা হয়নি বলে মনে হয়। এই আচরণের চারপাশে আপনার কী ডকুমেন্টেশনের লিঙ্ক আছে? ভি0 প্রকল্পগুলি সম্পর্কে এই উত্তরটি আমাকে অনেক সহায়তা করেছে।
প্রোলোজার

আমার কোনও লিঙ্ক নেই: এনপিএম শব্দার্থক সংস্করণ ক্যালকুলেটর semver.npmjs.com
ক্যাথামফেটামাইন

2
আরও আনুষ্ঠানিক উপায়ে তাদের ডকুমেন্টেশনে যুক্ত হওয়ার প্রয়োজন। আমি সনিতে আমার ইঞ্জিনিয়ারিং দলে একটি বক্তব্য দিয়েছি কারণ মনে হয় এটি এত সহজেই উপেক্ষা করা যায়। slides.com/proloser/semver-v0
ProLoser

24

Il টিল্ড:

  • ~বড় এবং ছোটখাটো সংখ্যা হিমশীতল করে
  • আপনি যখন আপনার নির্ভরতার মধ্যে বাগ-ফিক্সগুলি গ্রহণ করতে প্রস্তুত হন তখন এটি ব্যবহার করা হয়, তবে কোনও সম্ভাব্য বেমানান পরিবর্তন চান না।
  • টিলডে সাম্প্রতিকতম গৌণ সংস্করণটির (মধ্য সংখ্যাটি) মিল রয়েছে ।
  • ~ 1.2.3 সমস্ত 1.2.x সংস্করণের সাথে মিলবে তবে এটি মিস করবে 1.3.0।
  • টিলডে (~) আপনাকে বাগ ফিক্স রিলিজ দেয়

ক্যারেট:

  • ^ শুধুমাত্র প্রধান সংখ্যা হিমশীতল।
  • আপনি যখন আপনার নির্ভরতাগুলি ঘনিষ্ঠভাবে পর্যবেক্ষণ করছেন এবং ছোটখাট প্রকাশটি বেমানান হয় তবে আপনার কোডটি দ্রুত পরিবর্তন করতে প্রস্তুত হলে এটি ব্যবহৃত হয়।
  • এটি আপনাকে সাম্প্রতিকতমতম সংস্করণে আপডেট করবে (প্রথম সংখ্যা) ।
  • ^ ১.২.৩ 1.3.0 সহ যে কোনও ১.২.২.০ রিলিজের সাথে মিলবে তবে এটি ২.০.০ এ বন্ধ থাকবে।
  • ক্যারেট (^) আপনাকে পাশাপাশি-সামঞ্জস্যপূর্ণ নতুন কার্যকারিতাও দেয়।

1
টিল্ডটি সাম্প্রতিকতম প্যাচ সংস্করণটির সাথে মিলিত হয়েছে (শেষ সংখ্যা)। ক্যারেটটি সর্বাধিক সাম্প্রতিক গৌণ সংস্করণের সাথে (মধ্য সংখ্যাটি) মিলছে।
আব্দুল রউফ

"হিমশীতল" সেরা ব্যাখ্যা is
mhrabiee

ক্যারেট উভয়ই প্রধান সংখ্যা হিমশীতল করে এবং আপনাকে সাম্প্রতিকতম প্রধান সংস্করণে (প্রথম সংখ্যা) আপডেট করবে? প্রধান সংখ্যাটি প্রথম সংখ্যা, সুতরাং এটি বোঝা যায় না।
নেটটিসি

19

টিলডে minor গৌণ সংস্করণটির সাথে মেলে, আপনি যদি একটি প্যাকেজ ইনস্টল করে থাকেন যা ১.৪.২ রয়েছে এবং আপনার ইনস্টলেশনের পরে, সংস্করণ ১.৪.৩ এবং ১.৪.৪ এছাড়াও উপলব্ধ যদি আপনার প্যাকেজ.জেএসনে এটি ~ 1.4.2 হিসাবে ব্যবহৃত হয় তবে এনপিএম ইনস্টল করুন আপনার প্রকল্পে আপগ্রেড হওয়ার পরে আপনার প্রকল্পে 1.4.4 ইনস্টল হবে। তবে সেই প্যাকেজের জন্য 1.5.0 উপলব্ধ আছে তবে এটি ~ দ্বারা ইনস্টল করা হবে না ~ একে ছোটখাটো সংস্করণ বলা হয়।

ক্যারেট major প্রধান সংস্করণটির সাথে মেলে, যদি আপনার প্রকল্পে ১.৪.২ প্যাকেজ ইনস্টল করা থাকে এবং আপনার ইনস্টলেশনের পরে 1.5.0 প্রকাশিত হয় তবে ^ বড় সংস্করণ ইনস্টল করবে। আপনার যদি 1.4.2 ডলার থাকে তবে এটি 2.1.0 ইনস্টল করার অনুমতি দেবে না ।

ফিক্সড সংস্করণ যদি আপনি প্রতিটি ইনস্টলেশন আউট করে কোনো বিশেষ চরিত্র যেমন সঙ্গে সংশোধন সংস্করণ ব্যবহার উপর প্যাকেজের পরিবর্তন সংস্করণে চাই না "1.4.2"

সর্বশেষ সংস্করণ * আপনি যদি সর্বশেষতম সংস্করণ ইনস্টল করতে চান তবে কেবল প্যাকেজের নামের সামনে ব্যবহার করুন।


3
এই উত্তরটি বিভ্রান্তিকর। সেমওয়ার স্পষ্টভাবে বলেছে, একটি সাধারণ সংস্করণ নম্বরটি XYZ রূপ ধারণ করে [যেখানে] এক্স এর প্রধান সংস্করণ, ওয়াই ছোটখাটো সংস্করণ এবং জেডটি প্যাচ সংস্করণ।
লিও

15

একটি লাইন ব্যাখ্যা

স্ট্যান্ডার্ড সংস্করণ সিস্টেমটি মেজর.মিনোর.বিল্ড (যেমন ২.৪.১)

এনপিএম এই অক্ষরগুলির উপর ভিত্তি করে একটি নির্দিষ্ট প্যাকেজের সংস্করণ পরীক্ষা করে এবং ঠিক করে

: প্রধান সংস্করণ স্থির হয়েছে, ছোটখাটো সংস্করণ স্থির আছে, কোনও বিল্ড সংখ্যার সাথে মেলে

উদাহরণস্বরূপ: ~ 2.4.1 এর অর্থ এটি 2.4.x চেক করবে যেখানে এক্স কিছু আছে

: প্রধান সংস্করণ স্থির হয়েছে, যে কোনও ছোটখাটো সংস্করণের সাথে মেলে, কোনও বিল্ড সংখ্যার সাথে মেলে

উদাহরণস্বরূপ: ^ 2.4.1 এর অর্থ এটি 2.XX এর জন্য পরীক্ষা করবে যেখানে এক্স কিছু আছে


5
আমি এই উত্তরে 7 টি লাইন দেখছি
ফ্লাক্সলেমুর

11

আপনি সম্ভবত প্যাকেজ.জসনে টিলড (~) এবং ক্যারেট (^) দেখেছেন। তাদের মধ্যে পার্থক্য কী?

আপনি যখন এনএমপি ইনস্টল করার মুহুর্তটি করেন - সেভ করেন, এটি ক্যারেটের (^) উপসর্গের সাহায্যে প্যাকেজ.জসনে প্রবেশ সংরক্ষণ করে।

টিলড (~)

সহজ কথায়, টিলড (~) সাম্প্রতিকতম গৌণ সংস্করণ (মাঝের সংখ্যা) এর সাথে মেলে। ~ 1.2.3 সমস্ত 1.2.x সংস্করণের সাথে মিলবে তবে 1.3.0 মিস করবে।

ক্যারেট (^)

অন্যদিকে ক্যারেট (^) আরও স্বচ্ছন্দ। এটি আপনাকে সর্বশেষতম সংস্করণে (প্রথম সংখ্যা) আপডেট করবে। ^ ১.২.৩ 1.3.0 সহ যে কোনও ১.২.২.০ রিলিজের সাথে মিলবে তবে এটি ২.০.০ এ অনুষ্ঠিত হবে।

তথ্যসূত্র: https://medium.com/@Hardy2151/care-and-tilde-in-package-json-57f1cbbe347b


আবার এই উত্তরটি বিভ্রান্তিকর। সেমওয়ার স্পষ্টভাবে বলেছে, একটি সাধারণ সংস্করণ নম্বরটি XYZ রূপ ধারণ করে [যেখানে] এক্স এর প্রধান সংস্করণ, ওয়াই ছোটখাটো সংস্করণ এবং জেডটি প্যাচ সংস্করণ।
লিও

5

সেমভারটি 3 টি প্রধান বিভাগে আলাদা যা বিন্দু দ্বারা বিভক্ত।

major.minor.patch
1.0.0

এই বিভিন্ন বড়, নাবালক এবং প্যাচ বিভিন্ন প্রকাশ প্রকাশ করতে ব্যবহার করছে। জোয়ার (~) এবং ক্যারেট (^) প্যাকেজ সংস্করণে কোন গৌণ এবং প্যাচ সংস্করণ ব্যবহার করা হবে তা সনাক্ত করতে ব্যবহার করছে।

~1.0.1
 Install 1.0.1 or **latest patch versions** such as 1.0.2 ,1.0.5
^1.0.1
 Install 1.0.1 or **latest patch and minor versions** such as 1.0.2 ,1.1.0 ,1.1.1

4

টিল্ড (~)

প্রধান সংস্করণ স্থির, গৌণ সংস্করণ স্থির, কোনও বিল্ড সংখ্যার সাথে মেলে

"express": "~4.13.3" 

~4.13.3 এর অর্থ এটি 4.13.x এর জন্য পরীক্ষা করবে যেখানে এক্স কিছু এবং 4.14.0

ক্যারেট (^)

প্রধান সংস্করণ স্থির হয়েছে, কোনও ছোটখাটো সংস্করণ মেলে, কোনও বিল্ড সংখ্যার সাথে মেলে

"supertest": "^3.0.0"

^3.0.0 এর অর্থ এটি 3.XX এর জন্য পরীক্ষা করবে যেখানে এক্স কিছু আছে


4 বছর আগে পোস্ট করা একই উত্তর থেকে এই উত্তরটি কীভাবে আলাদা তা কী আপনি ব্যাখ্যা করতে পারেন ?
ফ্রাঙ্কলিন ইউ

2

সংস্করণ নম্বরটি সিনট্যাক্সে রয়েছে যা প্রতিটি বিভাগকে বিভিন্ন অর্থ সহ ডিজাইন করে। সিনট্যাক্সটি একটি বিন্দুর দ্বারা পৃথক করে তিনটি ভাগে বিভক্ত হয়।

মেজর.মিনোর.প্যাচ 1.0.2

মেজর, মাইনর এবং প্যাচ প্যাকেজের বিভিন্ন প্রকাশের প্রতিনিধিত্ব করে।

npm টিলেড (~) এবং ক্যারেট (^) ব্যবহার করে যথাক্রমে কোন প্যাচ এবং গৌণ সংস্করণগুলি ব্যবহার করবে design

সুতরাং আপনি যদি ~ 1.0.2 দেখেন তবে এর অর্থ সংস্করণ 1.0.2 ইনস্টল করা বা সর্বশেষ প্যাচ সংস্করণ যেমন 1.0.4। আপনি যদি ^ 1.0.2 দেখেন তবে এর অর্থ সংস্করণ 1.0.2 ইনস্টল করা বা সর্বশেষ গৌণ বা প্যাচ সংস্করণ যেমন 1.1.0 ইনস্টল করা।


1
4 বছর আগে পোস্ট করা একই উত্তর থেকে এই উত্তরটি কীভাবে আলাদা তা কী আপনি ব্যাখ্যা করতে পারেন ?
ফ্র্যাঙ্কলিন ইউ

2

ক্যারেটে ^ একই বড় পরিসরে একটি নির্দিষ্ট সংস্করণের চেয়ে বড় কিছু অন্তর্ভুক্ত।

টিলডে ~ একই ছোট পরিসরের একটি নির্দিষ্ট সংস্করণের চেয়ে বড় কিছু অন্তর্ভুক্ত।

উদাহরণস্বরূপ, 1.0.4 অবধি গ্রহণযোগ্য সংস্করণ ব্যাপ্তি নির্দিষ্ট করতে, নিম্নলিখিত সিনট্যাক্সটি ব্যবহার করুন:

  • প্যাচ প্রকাশ: 1.0 বা 1.0.x বা ~ 1.0.4
  • গৌণ প্রকাশগুলি: 1 বা 1.x বা .4 1.0.4
  • প্রধান রিলিজ: * বা এক্স

শব্দার্থক সংস্করণ সংশ্লেষ সম্পর্কিত আরও তথ্যের জন্য, এনপিএম সেমিভার ক্যালকুলেটর দেখুন

প্রকাশিত প্যাকেজগুলিতে এনপিএম শব্দার্থক সংস্করণ

এনপিএম ডকুমেন্টেশন থেকে আরও শব্দাবদ্ধ সংস্করণ সম্পর্কে


1

প্রতি সেউ উত্তর নয়, তবে এমন একটি পর্যবেক্ষণ যা উপেক্ষা করা হয়েছে বলে মনে হয়।

ক্যারেট ব্যাপ্তির জন্য বর্ণনা:

দেখুন: https://github.com/npm/node-semver#care-ranges-123-025-004

বাম-সর্বাধিক অ-শূন্য অঙ্ককে [প্রধান, গৌণ, প্যাচ] টিপলটিতে পরিবর্তন না করে এমন পরিবর্তনগুলিকে মঞ্জুরি দেয়।

মানে যা ^10.2.3মেলে10.2.3 <= v < 20.0.0

আমি মনে করি না যে এগুলি তাদের বোঝাতে চেয়েছিল। ১৯.০৯.০১ এর মধ্যে ১১.১.০ সংস্করণে টানা আপনার কোডটি ভেঙে দেবে।

আমি মনে করি তারা বোঝানো left most non-zero number field। সেমভিয়ারে এমন কোনও কিছুই নেই যার একক-সংখ্যা হওয়ার জন্য নম্বর-ক্ষেত্রের প্রয়োজন।


0

minor গৌণ সংস্করণ রিলিজের স্পেসিফিকেশনস major প্রধান সংস্করণ প্রকাশের ক্ষেত্রে নির্দিষ্ট করে

উদাহরণস্বরূপ, যদি প্যাকেজ সংস্করণটি 4.5.2 হয়, আপডেট হয় ~ 4.5.2 সর্বশেষ 4.5.x সংস্করণ (মাইনর সংস্করণ) ইনস্টল করবে ^ 4.5.2 সর্বশেষ 4.xx সংস্করণ ইনস্টল করবে (মেজর সংস্করণ)


8
4 বছর আগে পোস্ট করা একই উত্তর থেকে এই উত্তরটি কীভাবে আলাদা তা কী আপনি ব্যাখ্যা করতে পারেন ?
ফ্রাঙ্কলিন ইউ

0

এই প্রশ্নের সাথে সম্পর্কিত আপনি সংস্করণগুলিতে রচয়িতা ডকুমেন্টেশন পর্যালোচনা করতে পারেন , তবে এখানে সংক্ষেপে:

  • টিলেড সংস্করণ পরিসর ( ~ ) - ~ 1.2.3 => = 1.2.3 < 1.3.0 এর সমান
  • ক্যারেট সংস্করণ পরিসর ( ^ ) - ~ 1.2.3> = 1.2.3 < 2.0.0 এর সমান

তাই, টিলডির সাহায্যে আপনি প্যাচগুলির স্বয়ংক্রিয় আপডেট পাবেন তবে ছোট এবং বড় সংস্করণগুলি আপডেট হবে না। তবে আপনি যদি ক্যারেট ব্যবহার করেন প্যাচ এবং ছোটখাটো সংস্করণ পাবেন তবে আপনি বড় (সংস্করণ পরিবর্তন) সংস্করণ পাবেন না।

টিলডে সংস্করণটিকে "নিরাপদ" পদ্ধতির হিসাবে বিবেচনা করা হয় তবে আপনি যদি নির্ভরযোগ্য নির্ভরশীলতা (ভালভাবে বজায় রাখা গ্রন্থাগার) ব্যবহার করেন তবে আপনার ক্যারেট সংস্করণে কোনও সমস্যা হবে না (কারণ ছোটখাট পরিবর্তনগুলি ভাঙ্গা পরিবর্তন হওয়া উচিত নয়)।

সুরকার ইনস্টল এবং সুরকার আপডেটের মধ্যে পার্থক্য সম্পর্কে আপনার সম্ভবত এই স্ট্যাকওভারফ্লো পোস্টটি পর্যালোচনা করা উচিত ।

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