বোর (এবং এনপিএম) সংস্করণ সিনট্যাক্স কী?


274

বোর আমাকে নীচের সিনট্যাক্স ব্যবহার করে প্যাকেজগুলির জন্য সংস্করণ প্রয়োজনীয়তা নির্দিষ্ট করতে সক্ষম করে:

"dependencies": {
  "<name>": "<version>",
},

তবে এর জন্য যে সিনট্যাক্সটি ব্যবহার করব তা আমি খুঁজে পাইনি <version>। আমি জানি যে আমি সংস্করণগুলি নির্দিষ্ট করতে পারি:

  • একটি নির্দিষ্ট সংস্করণ এর চেয়ে বড় ">1.0.0"
  • সংস্করণ থেকে বড় বা সমান: ">=1.0.0"
  • অথবা কিছু সীমার মধ্যে: "1.0.0 - 2.0.0"

আমি এটাও জানি একটি সাধারণ সংস্করণ টিল্ড ধারণকারী সিনট্যাক্স বলেও কিছু নেই; "~1.0.0"। তবে আমি এর অর্থ কী এবং এটি একইরকম কিনা তা সম্পর্কে আমি নিশ্চিত নই "=1.0.0"

আমি একাধিক অ-ক্রমাগত সংস্করণ যেমন , এর 1.0.3চেয়ে ঠিক বেশি প্লাস সংস্করণ 1.5.0ইত্যাদি উল্লেখ করতে সক্ষম কিনা তা জানতে আগ্রহী ...


উত্তর:


341

সংক্ষেপে, বোভার সংস্করণ সংখ্যার (এবং এনপিএম এর) সিনট্যাক্সকে সেমভিয়ার বলা হয়, যা 'সিমেন্টিক ভার্সন' এর জন্য সংক্ষিপ্ত। আপনি নোড / এনপিএম এর মধ্যে সেমভার পার্সারের জন্য এপিআইতে বোভার এবং এনপিএম-তে ব্যবহৃত সেমভেরের বিশদ সিনট্যাক্সের জন্য ডকুমেন্টেশন পেতে পারেন । আপনি semver.org এ অন্তর্নিহিত বৈশিষ্ট সম্পর্কে (যা উল্লেখ না করে ~বা অন্যান্য সিনট্যাক্সের বিবরণ দেয় না ) সম্পর্কে আরও শিখতে পারেন ।

আপনার সাথে খেলতে পারেন এমন একটি সুপার-হ্যান্ডি ভিজ্যুয়াল সেমভার ক্যালকুলেটর রয়েছে, যা এই সমস্তকে খুব সহজেই ছাঁটাই করা এবং পরীক্ষার জন্য সহজ করে তোলে।

সেমওয়ার কেবল একটি বাক্য গঠন নয়! এপিআই-র প্রকাশের সঠিক উপায়গুলি সম্পর্কে কিছু বলার মতো আকর্ষণীয় জিনিস রয়েছে যা সিনট্যাক্সটির অর্থ বুঝতে সাহায্য করবে। গভীরভাবে:

একবার আপনি আপনার সর্বজনীন এপিআই সনাক্ত করে ফেললে আপনি নিজের সংস্করণ নম্বরে নির্দিষ্ট বর্ধিতকরণের সাথে এতে পরিবর্তনগুলি যোগাযোগ করেন। এক্সওয়াইজেড (মেজর.মিনোর.প্যাচ) এর একটি সংস্করণ বিন্যাস বিবেচনা করুন । ত্রুটি সংশোধনগুলি এপিআই বৃদ্ধি প্যাচ সংস্করণকে প্রভাবিত করে না, পিছনের দিকে সামঞ্জস্যপূর্ণ এপিআই সংযোজন / পরিবর্তনগুলি গৌণ সংস্করণে বৃদ্ধি করে এবং পিছনে অসামঞ্জস্যপূর্ণ এপিআই পরিবর্তনগুলি প্রধান সংস্করণে বৃদ্ধি করে।

সুতরাং, আপনার নির্দিষ্ট প্রশ্নটি ~সেই মেজর.মিনোর.প্যাচ স্কিমা সম্পর্কিত। (সম্পর্কিত ক্যারেট অপারেটর হিসাবে ^।) আপনি ~যে সংস্করণগুলি গ্রহণ করতে ইচ্ছুক তার পরিসর সংকীর্ণ করতে আপনি ব্যবহার করতে পারেন :

  • পরবর্তী প্যাচ-লেভেল একই ছোটখাটো সংস্করণে পরিবর্তন হয় ( "বাগের সংশোধনগুলি এপিআইকে প্রভাবিত করে না" ), বা:
  • একই প্রধান সংস্করণে পরবর্তী ক্ষুদ্র-স্তরের পরিবর্তনগুলি ( "পিছনে সামঞ্জস্যপূর্ণ এপিআই সংযোজন / পরিবর্তন" )

উদাহরণস্বরূপ: আপনি 1.2.x গাছের উপরের পরবর্তী প্যাচ-স্তর পরিবর্তনগুলি 1.2.0 থেকে শুরু করে, কিন্তু 1.3.0 এর চেয়ে কম ব্যবহার করবেন তা চিহ্নিত করতে আপনি:

"angular": "~1.2"
  or:
"angular": "~1.2.0"

এটি আপনাকে .xসিনট্যাক্স ব্যবহারের মতো একই ফলাফল পেতে পারে :

"angular": "1.2.x"

তবে, আপনি টিলড / ~সিনট্যাক্সটি আরও সুনির্দিষ্ট করতে ব্যবহার করতে পারেন : আপনি যদি 1.2.4 দিয়ে শুরু প্যাচ-স্তরীয় পরিবর্তনগুলি গ্রহণ করতে ইচ্ছুক হন তবে এখনও 1.3.0 এর চেয়ে কম, আপনি ব্যবহার করতে চান:

"angular": "~1.2.4"

আপনি যদি ব্যবহার করেন তবে প্রধান সংস্করণটির দিকে বাম দিকে সরে যাওয়া ...

"angular": "~1"

... এটি যেমন ...

"angular": "1.x"
  or:
"angular": "^1.0.0"

... এবং কোনও সামান্য- বা প্যাচ-স্তর পরিবর্তনগুলি 1.0.0 এর উপরে এবং 2.0 এরও কমের সাথে মেলে:

উপরের সর্বশেষ প্রকরণটি নোট করুন: এটিকে একটি 'ক্যারেট ব্যাপ্তি' বলা হয় । ক্যারেটটি দেখতে ভীষণ ভয়ঙ্কর দেখায় >, তাই এর অর্থ " 1.0.0 এর চেয়ে বড় সংস্করণ" এর অর্থ আপনি ভেবে ক্ষুব্ধ হবেন । (আমি অবশ্যই এতে পিছলে পড়েছি।) নাহ!

ক্যারেট ব্যাপ্তিগুলি মূলত এটির জন্য ব্যবহৃত হয় যে আপনি কেবল বাম-সর্বাধিক উল্লেখযোগ্য অঙ্ক - সাধারণত প্রধান সংস্করণ - এবং আপনি যে কোনও ন্যূনতম- বা প্যাচ-স্তরীয় পরিবর্তনের অনুমতি পাবেন যা এই বাম-সর্বাধিক অঙ্ককে প্রভাবিত করে না। তবুও, একটি টিলড রেঞ্জের বিপরীতে যা একটি বড় সংস্করণ নির্দিষ্ট করে, ক্যারেট রেঞ্জগুলি আপনাকে একটি সুনির্দিষ্ট ছোট / প্যাচ শুরুর পয়েন্ট নির্দিষ্ট করতে দেয়। সুতরাং, ^1.0.0 === ~1কোনও কেরেটের ব্যাপ্তি যেমন ^1.2.3আপনাকে বলতে দেয় যে আপনি কোনও পরিবর্তন আনবেন >=1.2.3 && <2.0.0। টিলড রেঞ্জের সাহায্যে আপনি এটি করতে পারেন নি।

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

এটি টিলড এবং ক্যারেটের উদ্বেগজনক শক্তি যা ব্যাখ্যা করে যে লোকেরা কেন তাদের সরল .xবাক্য গঠনগুলির চেয়ে বেশি ব্যবহার করে : এগুলি কেবল আপনাকে আরও বেশি করতে দেয়। এজন্য আপনি টিলড দেখতে পাবেন যেখানে প্রায়শই ব্যবহৃত হয় .x। নিজস্ব package.json ফাইলে নির্ভরতা প্রচুর রয়েছে: উদাহরণস্বরূপ, npm নিজেই দেখতে ~2.4.0বিন্যাস বদলে 2.4.xবিন্যাস এটা পারে ব্যবহার করুন। লেগে থাকা দ্বারা ~, সিনট্যাক্সটি 70+ সংস্করণ নির্ভর নির্ভরতার তালিকার সমস্ত দিক দিয়েই সামঞ্জস্যপূর্ণ, তা বিবেচনা না করেই যে প্রারম্ভিক প্যাচ সংখ্যাটি গ্রহণযোগ্য।

যাইহোক, সেমভিয়ারের আরও অনেক কিছু আছে, তবে আমি এখানে সমস্ত বিস্তারিত জানার চেষ্টা করব না। নোড সেমভার প্যাকেজের রিডমে এটি পরীক্ষা করে দেখুন । এবং আপনি যখন অনুশীলন করছেন এবং SemVer কীভাবে কাজ করে তার চারপাশে আপনার মাথা পেতে চেষ্টা করার সময় অর্থপূর্ণ সংস্করণী ক্যালকুলেটরটি ব্যবহার করার বিষয়ে নিশ্চিত হন


পুনরায়: অ-ধারাবাহিক সংস্করণ নম্বর: ওপির চূড়ান্ত প্রশ্নটি মনে হয় না যে ধারাবাহিক সংস্করণ সংখ্যা / রেঞ্জগুলি নির্দিষ্ট করা (যদি আমি এটি মোটামুটি সম্পাদনা করেছি)। হ্যাঁ, আপনি সাধারণ ডাবল পাইপ "বা" অপারেটর: ব্যবহার করে এটি করতে পারেন ||। তাই ভালো:

"angular": "1.2 <= 1.2.9 || >2.0.0"

27
সুতরাং ~বিশেষ অর্থ হলো প্যাচ (তৃতীয়) সংখ্যা নির্দিষ্ট করা এক, যেমন চেয়ে তার চেয়ে অনেক বেশী হতে পারে ~1.2.3সমতূল্য >=1.2.3 <1.3.0
z0r

1
উপরের ইনলাইন প্রতি সম্পাদিত নাবালিক (দ্বিতীয়) সংখ্যার জন্যও ব্যবহার করা যেতে পারে।
এক্সএমএল

আকর্ষণীয়, SemVer ডকুমেন্টেশন এছাড়াও এক্স-নোটেশন অনুমতি দেয় বলে মনে হয় (যা মানুষের কাছে আরও অনেক স্বজ্ঞাত)।
ফ্রাঙ্ক নোক্কে

2
এক্স-নোটেশনটি প্রথমে পড়তে স্বজ্ঞাত, তবে অনেক কম নমনীয়। উদাহরণস্বরূপ '1.1.x' === '>=1.1.0' === '~1.1.0',। 1.1.0 কেস সহজ। তবে এক্স-নোটেশন দানাদার হতে পারে না, যেমন হতে পারে '>=1.1.4'বা '~1.1.4'। সুতরাং, তারপরে আপনি '1.1.x'আপনার নির্ভরতা তালিকার এক জায়গায় এবং '~2.7.3'অন্য কোনও স্থানে বাতাস বেঁধেছেন । এটি দুর্দান্ত, এবং কাজ করে তবে একটি বিকাশকারীকে একক তালিকা পড়ার জন্য একাধিক বাক্য গঠন পার্স করতে হবে। এবং, আপনি যদি প্রোগ্রামটিগতভাবে সংস্করণ সেট করতে প্যাকেজগুলি লিখছেন তবে আপনি একটি একক বাক্য গঠন চান। এবং, বেশিরভাগ লোকেরা ব্রেকিং পরিবর্তনগুলি রোধ করতে চায়। অতএব, সমস্ত সমস্যার সাথে সমাধান করা ~
এক্সএমএল

1
Hah। আমি মনে করি যে "গ্রুক" হতাশ-লিট সংস্কৃতি (এবং সম্ভবত বয়সের সাথে সম্পর্কিত) এর চেয়ে কম ভৌগলিক, @ ক্লোনকেেক্স। ভবিষ্যতের পাঠকদের জন্য: এটি একটি অদ্ভুত জমিতে হেইনলিনের অপরিচিতের একটি উল্লেখ ...
এক্সএমএল

141

সেমভারের ভিত্তিতে , আপনি ব্যবহার করতে পারেন

  • হাইফেন পরিসর XYZ - এবিসি 1.2.3-2.3.4 চিহ্নিত > = 1.2.3 <= 2.3.4

  • এক্স-রেঞ্জের 1.2.x 1.X 1.2.*

  • টিলডে রেঞ্জগুলি ~1.2.3 ~1.2 প্যাচ-স্তরীয় পরিবর্তন বা ছোট সংস্করণ পরিবর্তনের অনুমতি দেয় allowing

  • ক্যারেটের ব্যাপ্তি ^ 1.2.3 ^ 0.2.5 ^ 0.0.4

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

    • ^1.2.x (মানে> = 1.2.0 <2.0.0)
    • ^0.0.x (মানে> = 0.0.0 <0.1.0)
    • ^0.0 (মানে> = 0.0.0 <0.1.0)

21
কোন উত্তরহীন, সহজ উত্তর পড়ার জন্য আপনাকে ধন্যবাদ। আমি ফিরে বা কিছুই ট্র্যাক করতে হবে না, ঠিক, বুম, উত্তর আছে। ভাল হয়েছে;)
টুডমো

76

বোভার সেমভার সিনট্যাক্স ব্যবহার করে তবে কয়েকটি দ্রুত উদাহরণ এখানে দেওয়া হয়েছে:

আপনি একটি নির্দিষ্ট সংস্করণ ইনস্টল করতে পারেন:

$ bower install jquery#1.11.1

আপনি 'এর সাথে শুরু হওয়া কোনও সংস্করণ' নির্দিষ্ট করতে use ব্যবহার করতে পারেন:

$ bower install jquery#~1.11

আপনি একসাথে একাধিক সংস্করণ প্রয়োজনীয়তা নির্দিষ্ট করতে পারেন:

$ bower install "jquery#<2.0 >1.10"

1
আমি এর ব্যবহারিক ব্যবহার সম্পর্কে আগ্রহী। রুলেট ইনস্টলেশন?
gravidThoughts

@ এক্সএমএলির উত্তর (এবং সেমভার ডক্স) 'স্টার্টস উইথ' দেখে মনে হচ্ছে, 1.12 হিসাবে, 1.13 হিসাবেও ঠিক আছে, যতক্ষণ না বড় সংস্করণটি উঠে না যায় ...
ফ্রাঙ্ক নোক

13

আপনি latestসর্বাধিক সাম্প্রতিক সংস্করণটি ইনস্টল করতে কীওয়ার্ডটি ব্যবহার করতে পারেন :

  "dependencies": {
    "fontawesome": "latest"
  }

1
সেমভার এটি উল্লেখ করে না আপনি এটি বৈধ কোথায় প্রতিষ্ঠিত করেছেন? :) এটি " "*" := >=0.0.0(যে কোনও সংস্করণ সন্তুষ্ট করে)" বলে যা এটি নিকটে তবে কিছুটা অস্পষ্ট কারণ এটি সুনির্দিষ্টভাবে সর্বশেষ বলে না বলে এটি এটির প্রথমটি হতে পারে?
GazB

সত্যি কথা বলতে কী, এটি কেবল পরীক্ষা এবং ত্রুটি ছিল - আমি এটি চেষ্টা করেছি এবং এটি কার্যকর হয়েছে! আপনি সঠিক হতে পারেন যে এটি 100% বৈধ নয়, তবে এটি কার্যকর হয়।
শ্যাকার

7

যদি কোনও প্যাচ নম্বর না থাকে তবে এটি নন-টিলড সংস্করণে ~সংযোজনের সমতুল্য .x। যদি কোনও প্যাচ নম্বর ~থাকে তবে সমস্ত প্যাচ সংখ্যা> = নির্দিষ্ট করা মঞ্জুরি দেয়।

~1     := 1.x
~1.2   := 1.2.x
~1.2.3 := (>=1.2.3 <1.3.0)

আমি গৃহীত উত্তরে মন্তব্যের যথেষ্ট পয়েন্ট আছে না, কিন্তু টিল্ড কিছু তথ্য দিয়ে ডকুমেন্টেশন semver লিঙ্ক মতভেদ হল: "angular": "~1.2"হবে না মেলে 1.3, 1.4, 1.4.9। এছাড়াও "angular": "~1"এবং "angular": "~1.0"হয় না সমতুল্য। এটি এনপিএম সেমভার ক্যালকুলেটর দ্বারা যাচাই করা যেতে পারে ।

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