এনপিএম প্যাকেজ.জসন ফাইলের নির্ভরতা, ডেভিনিডেন্সিগুলি এবং পিয়ার ডিপেন্ডেন্সিগুলির মধ্যে পার্থক্য কী?


2025

এই ডকুমেন্টেশনটি খুব খারাপভাবে আমার প্রশ্নের উত্তর দেয়। আমি এই ব্যাখ্যাগুলি বুঝতে পারি না। কেউ কি সহজ কথায় বলতে পারেন? উদাহরণ সহকারে যদি সহজ শব্দ নির্বাচন করা শক্ত হয়?

EDIT এছাড়াও যুক্ত করেছে peerDependencies, যা ঘনিষ্ঠভাবে সম্পর্কিত এবং বিভ্রান্তির কারণ হতে পারে।



117
@ আইডানফেল্ডম্যান "alচ্ছিক নির্ভরশীলতা" হ'ল আমার দিনের অক্সিমোরন
নিক বুল

1
এনপিএম ডকুমেন্টেশন বলেছেন: "নির্ভরতা": উত্পাদনে আপনার অ্যাপ্লিকেশন দ্বারা প্রয়োজনীয় প্যাকেজগুলি। "ডিভডিপেন্ডেন্স": প্যাকেজগুলি কেবলমাত্র স্থানীয় বিকাশ এবং পরীক্ষার জন্য প্রয়োজনীয়। লিঙ্কটি দেখুন: docs.npmjs.com/…
Deke

উত্তর:


2359

গুরুত্বপূর্ণ আচরণের পার্থক্যের সংক্ষিপ্তসার:

  • dependencies উভয় ইনস্টল করা হয়:

    • npm install রয়েছে এমন একটি ডিরেক্টরি থেকে package.json
    • npm install $package অন্য কোনও ডিরেক্টরিতে
  • devDependencies আছেন:

    • এছাড়াও npm installকোনও ডিরেক্টরিতে ইনস্টল করা আছে যাতে package.jsonআপনি --productionপতাকাটি পাস না করে ( গায়ান চারিথের উত্তরটি উপরে যান )।
    • npm install "$package"অন্য কোনও ডিরেক্টরিতে ইনস্টল করা নেই , যদি না আপনি এটিকে --devবিকল্পটি দেন।
    • অস্থায়ীভাবে ইনস্টল করা হয় না।
  • peerDependencies:

    • 3.0.০ এর পূর্বে: সর্বদা অনুপস্থিত থাকলে ইনস্টল করা থাকে এবং যদি নির্ভরতার একাধিক অসামঞ্জস্যিত সংস্করণ বিভিন্ন নির্ভরতা দ্বারা ব্যবহৃত হয় তবে একটি ত্রুটি বাড়ান।
    • on.০ (অপরিশোধিত) থেকে শুরু হবে বলে আশা করা হচ্ছে : অনুপস্থিত থাকলে একটি সতর্কতা দিন npm installএবং আপনাকে নিজে নিজে নির্ভরতা সমাধান করতে হবে। চলমান অবস্থায়, যদি নির্ভরতা অনুপস্থিত থাকে তবে আপনি একটি ত্রুটি পান ( @ এনেক্সটজেনটেক দ্বারা উল্লিখিত )
  • ট্রানজিটিভিটি ( বেন হাচিসন উল্লেখ করেছেন ):

    • dependencies অস্থায়ীভাবে ইনস্টল করা হয়: যদি A এর B এর প্রয়োজন হয়, এবং B এর জন্য C প্রয়োজন হয়, তবে সি ইনস্টল হয়ে যায়, অন্যথায় B কাজ করতে পারে না, এবং দুটিও A হয় না A.

    • devDependenciesঅস্থায়ীভাবে ইনস্টল করা হয় না। উদাহরণস্বরূপ, আমাদের A এর পরীক্ষা করার জন্য বি পরীক্ষা করার দরকার নেই, তাই বি এর পরীক্ষার নির্ভরতা বাদ দেওয়া যায়।

সম্পর্কিত বিকল্পগুলি এখানে আলোচনা করা হয়নি:

devDependencies

dependenciesdevDependenciesকেবল চালানোর জন্য প্রয়োজন, কেবল বিকাশ করার জন্য, যেমন: ইউনিট পরীক্ষা, জাভাস্ক্রিপ্ট প্রতিস্থাপন, সংশোধন, কফি স্ক্রিপ্ট ...

আপনি যদি কোনও প্যাকেজ বিকাশ করতে চলেছেন তবে আপনি এটি ডাউনলোড করুন (উদাহরণস্বরূপ git clone), এর মূলটিতে যা যা রয়েছে package.jsonএবং চালনা করুন:

npm install

যেহেতু আপনার আসল উত্স রয়েছে তাই এটি স্পষ্ট যে আপনি এটি বিকাশ করতে চান, তাই ডিফল্টরূপে উভয়ই dependencies(যেহেতু আপনার অবশ্যই অবশ্যই বিকাশ চালাতে হবে) এবং devDependencyনির্ভরতাও ইনস্টল করা আছে।

তবে, আপনি কেবলমাত্র একজন শেষ ব্যবহারকারী যা কেবল এটি ব্যবহারের জন্য প্যাকেজ ইনস্টল করতে চান, আপনি যে কোনও ডিরেক্টরি থেকে এটি করতে পারবেন:

npm install "$package"

সেক্ষেত্রে, আপনি সাধারণত না গঠন নির্ভরতা, তাই আপনি শুধু পেতে কি প্যাকেজ ব্যবহার করতে প্রয়োজন হয় চাই: dependencies

আপনি যদি সত্যিই সেই ক্ষেত্রে বিকাশ প্যাকেজ ইনস্টল করতে চান তবে আপনি কমান্ড লাইন থেকে devকনফিগারেশন বিকল্পটি সেট করতে পারেন true:

npm install "$package" --dev

বিকল্পটি falseডিফল্টরূপে যেহেতু এটি অনেক কম সাধারণ ক্ষেত্রে।

peerDependencies

(3.0 এর আগে পরীক্ষিত)

সূত্র: https://nodejs.org/en/blog/npm/peer-d dependency/

নিয়মিত নির্ভরতা সহ, আপনার নির্ভরতার একাধিক সংস্করণ থাকতে পারে: এটি নির্ভরতাটির অভ্যন্তরে কেবল ইনস্টল করা থাকে node_modules

উদাহরণস্বরূপ যদি dependency1এবং dependency2উভয়ই dependency3বিভিন্ন সংস্করণে নির্ভর করে তবে প্রকল্পের গাছটি দেখতে পাবেন:

root/node_modules/
                 |
                 +- dependency1/node_modules/
                 |                          |
                 |                          +- dependency3 v1.0/
                 |
                 |
                 +- dependency2/node_modules/
                                            |
                                            +- dependency3 v2.0/

প্লাগইনগুলি হ'ল প্যাকেজগুলি যা সাধারণত অন্য প্যাকেজের প্রয়োজন হয় না, যাকে এই প্রসঙ্গে হোস্ট বলা হয় । পরিবর্তে:

  • প্লাগইনগুলি হোস্টের দ্বারা প্রয়োজনীয়
  • প্লাগইনগুলি একটি স্ট্যান্ডার্ড ইন্টারফেস দেয় যা হোস্টটি প্রত্যাশা করে
  • কেবলমাত্র হোস্টটিকে সরাসরি ব্যবহারকারী দ্বারা ডাকা হবে, সুতরাং এর একটি একক সংস্করণ অবশ্যই থাকতে হবে।

উদাহরণস্বরূপ যদি dependency1এবং dependency2পিয়ার নির্ভর করে dependency3তবে প্রকল্পের গাছটি দেখতে পাবেন:

root/node_modules/
                 |
                 +- dependency1/
                 |
                 +- dependency2/
                 |
                 +- dependency3 v1.0/

আপনি কখনও dependency3নিজের package.jsonফাইলটিতে উল্লেখ না করলেও এটি ঘটে ।

আমি মনে করি এটি বিপর্যয় নিয়ন্ত্রণের নকশা প্যাটার্নের একটি উদাহরণ ।

পিয়ার নির্ভরতার একটি নমুনা উদাহরণ গ্রান্ট, হোস্ট এবং এর প্লাগইন its

উদাহরণস্বরূপ, https://github.com/gruntjs/grunt-contrib-uglify এর মতো গ্রান্ট প্লাগইনে আপনি দেখতে পাবেন:

  • grunt ইহা একটি peer-dependency
  • কেবলমাত্র এটির require('grunt')অধীন tests/: এটি প্রোগ্রাম দ্বারা আসলে ব্যবহৃত হয় না।

তারপরে, যখন ব্যবহারকারী কোনও প্লাগইন ব্যবহার করবেন, তখন তিনি স্পষ্টতই Gruntfileএকটি grunt.loadNpmTasks('grunt-contrib-uglify')লাইন যুক্ত করে প্লাগইনটির প্রয়োজন হবে , তবে এটি gruntব্যবহারকারী সরাসরি কল করবে।

এটি যদি কাজ করে না তবে প্রতিটি প্লাগইনের জন্য পৃথক গ্রান্ট সংস্করণ প্রয়োজন।

ম্যানুয়াল

আমি মনে করি ডকুমেন্টেশন প্রশ্নের উত্তরটি বেশ ভালভাবে জবাব দেয়, সম্ভবত আপনি নোড / অন্যান্য প্যাকেজ পরিচালকদের সাথে যথেষ্ট পরিচিত নন। আমি সম্ভবত এটি বুঝতে পারি কারণ আমি রুবি বান্ডলার সম্পর্কে কিছুটা জানি।

মূল লাইনটি হ'ল:

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

এবং তারপরে এনপিএম-কনফিগার (7) এর অধীনে সন্ধান করুন dev:

Default: false
Type: Boolean

Install dev-dependencies along with packages.

5
আহ। আমি ভুল বুঝেছি। আপনার উত্তরটি npm install packageএমনভাবে পড়ছে যে আপনি যে প্যাকেজটি ডেভিনির্ভরতা নয়, আপনি এখন যা বোঝাতে চেয়েছিলেন তার চেয়ে বরং আপনি যে প্যাকেজটি [প্যাকেজ] নামক প্যাকেজটি ইনস্টল করেছিলেন, তার চেয়ে বেশি ইনস্টল করতে ব্যবহার করতে চান I এটি পড়ার আগে। আমি যদি আপনি হয়ে থাকেন তবে আমি [প্যাকেজ-নাম] বলার জন্য সম্পাদনা করব যা পরিষ্কারভাবে দেখায় যে আপনার অর্থ 'সন্নিবেশ-নাম এখানে'।
টম ডাব্লু

184
এটা অসাধারণ! আমি কখনই উপলব্ধি করতে পারি নি, তবে এই উত্তরটি আমাকে শিখিয়েছে যে নির্ভরতা বনাম ডেভডিপেন্সিগুলি পার্থক্য কেবল তখনই প্রযোজ্য যদি আপনি কোনও এনপিএম প্যাকেজ প্রকাশ করতে যাচ্ছেন। আপনি যদি কেবল কোনও অ্যাপ্লিকেশন বা সাইটে কাজ করে থাকেন তবে এটি খুব বেশি গুরুত্বপূর্ণ নয়। ধন্যবাদ!
jedd.ahyoung

3
peerDependenciesআসন্ন এনএমপি @ 3 এ পরিবর্তিত আচরণ প্রতিফলিত করতে এই পোস্টটি আপডেট করা উচিত । ব্লগ.এন.এম.এমজেজেস.আর.কম / পোস্ট / ১১১০৯৪৮২৩৯৯২০ / এনপিএম-উইক্লি ৫-৫ থেকে : "আমরা পিয়ারের উপর নির্ভরশীলতা আর স্বয়ংক্রিয়ভাবে ডাউনলোড করব না Instead পরিবর্তে, আমরা আপনাকে সতর্ক করব যদি পীর নির্ভরতা ইতিমধ্যে ইনস্টল না করা থাকে তবে এটি আপনাকে প্রয়োজন পিয়ারডেপেন্ডেন্সির দ্বন্দ্বগুলি ম্যানুয়ালি সমাধান করার জন্য, তবে দীর্ঘমেয়াদে এটির সম্ভাবনা কম হওয়া উচিত যে আপনি আপনার প্যাকেজগুলির নির্ভরতা নিয়ে একটি জটিল জায়গায় পৌঁছে যাবেন। "
পরেরজনটেক

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

9
সেট করা থাকলে devDependenciesইনস্টল করা হয় না এমন মন্তব্য করা গুরুত্বপূর্ণ । NODE_ENVproduction
অগস্টো ফ্রেঞ্জোইয়া

489

আপনি যদি ডিডিডিপেন্ডেন্সগুলি ইনস্টল করতে না চান তবে আপনি ব্যবহার করতে পারেন npm install --production


1
এনপিএম ইনস্টল - সেভ সফ্টওয়্যার নির্ভরতা জন্য?
বংশী পবন মহেশ

18
এনপিএম ইনস্টল সমস্ত নির্ভরতা ইনস্টল করবে। - সেভ ফ্ল্যাগটি ব্যবহৃত হয় যখন আপনি প্যাকেজ.জসনেও নির্দিষ্ট মডিউল যুক্ত করতে চান। উদাহরণস্বরূপ: - এনপিএম ইনস্টল করুন ইউগ্লিফাই - সেভ আপনার প্রকল্প ফোল্ডারে uglify ইনস্টল করবে এবং প্রকল্প, প্যাকেজ.জসন ফাইলের সাথে uglify যুক্ত করবে।
গায়ান চরিত

6
এবং যেহেতু আমরা ডেভডেপেন্ডেন্সের কথা বলছি, আপনি নতুন মডিউলটিকে ডিভডিপেন্ডেন্স হিসাবে সংরক্ষণ করতে - সেভ-ডেভ ব্যবহার করতে পারেন। উদাহরণ: এনপিএম ইনস্টল করুন অগলিফ
সেভ

9
এনপিএম 5 হিসাবে, --saveবিকল্পটির আর প্রয়োজন নেই। আপনি যদি "এনএমপি মাই-প্যাকেজ ইনস্টল করুন" করেন তবে এটি আমার package.jsonফাইলে নির্ভরতা হিসাবে আমার প্যাকেজটি যুক্ত করবে ।
মার্টিন ক্যারেল

মাত্র এনএমপি ইনস্টল করুন
সুলতান আসলাম

116

উদাহরণস্বরূপ, মোচা সাধারণত একটি ডিভডিপেন্সি হতে পারে, যেহেতু উত্পাদনে টেস্টিং প্রয়োজন হয় না, তবে এক্সপ্রেস নির্ভরতা হবে।


4
আমি

47
আমি পরিবর্তে হডসন বা সার্কেলসিআইয়ের মতো একটি অবিচ্ছিন্ন ইন্টিগ্রেশন পরিষেবা ব্যবহার করার পরামর্শ দেব যা আপনার পরীক্ষা চালায় এবং তারপরে পাস হলে প্রোডাক্টে মোতায়েন করে।
ড্যান কোহন

1
প্রকৃত সার্ভারটি পরীক্ষা করার জন্য এটি এখনও প্রাসঙ্গিক হতে পারে কারণ সিআই সার্ভারটি প্রোড সার্ভার থেকে কোনওভাবে আলাদা হতে পারে এবং এই পার্থক্যটি যেমন অ্যাপ্লিকেশনটি শুরু হতে বাধা দিতে পারে ...
নিকোল

2
@ নিকোল কেন আপনি আপনার স্টেজিং সার্ভারটিকে আপনার প্রোডের সাথে কনফিগারেশনে অভিন্ন হিসাবে তৈরি করবেন না?
লুকাস

1
তারপরে, পরীক্ষার নির্ভরতাগুলি নিয়মিত নির্ভরশীলতা যুক্ত করে অতিরিক্ত পুস্তকাগুলির পুরো গুচ্ছকে পরিচয় করিয়ে দেয়, যার প্রতিটিটি কোনও না কোনওভাবে ব্যর্থ হতে পারে। আমি যতটা সম্ভব কম কোড সহ হালকা ওজন উত্পাদনের সার্ভারগুলির দিকে ঝুঁকছি (পুং!)। মনে রাখবেন, সেরা কোডটি কোনও কোড নয়!
স্টিজন ডি উইট

69

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

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

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

এই দস্তাবেজগুলি পিয়ার নির্ভরতাগুলি সত্যই ভালভাবে ব্যাখ্যা করে: https://nodejs.org/en/blog/npm/peer-d dependferences/

এছাড়াও, npm ডকুমেন্টেশন সময়ের উন্নত করা হয়েছে, এবং এখন নির্ভরতা বিভিন্ন ধরনের ভাল ব্যাখ্যা রয়েছে: https://github.com/npm/cli/blob/latest/doc/files/package.json.md#devdependencies


63

Dev depend dependations হিসাবে একটি প্যাকেজটি package.json এ সংরক্ষণ করতে :

npm install "$package" --save-dev

যখন আপনি চালাতে npm installএটি উভয় ইনস্টল করবে devDependenciesএবং dependencies। ইনস্টল devDependenciesরান এড়ানোর জন্য :

npm install --production

3
আপনি এটিও ব্যবহার করতে পারেন: এনএমপি আই-এস
মায়সারা আলহিন্দি

36

কেবলমাত্র উন্নয়নের জন্য প্রয়োজনীয় কিছু মডিউল এবং প্যাকেজ রয়েছে, যা উত্পাদন প্রয়োজন হয় না। এটি ডকুমেন্টেশনে এটিকে বলে :

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


আপনি যদি প্রোডাকশনে কেবল বান্ডেল.জেএস ফাইল চালাচ্ছেন তবে কী হবে? আপনার কি সত্যিই সেই নির্ভরতা দরকার?
রেগারবয়

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

16

একটি সহজ ব্যাখ্যা যা আমার কাছে এটি আরও স্পষ্ট করে তুলেছে:

আপনি যখন আপনার অ্যাপ্লিকেশন স্থাপন করবেন তখন নির্ভরতাগুলির মডিউলগুলি ইনস্টল করা দরকার বা আপনার অ্যাপ্লিকেশনটি কাজ করবে না। আপনি machine মেশিনে বিকাশ করছেন না বলে ডেভডিপেন্ডেনসের মডিউলগুলি প্রোডাকশন সার্ভারে ইনস্টল করার দরকার নেই। লিংক


2
সুতরাং, যদি আমরা ওয়েবসাইট তৈরি করে থাকি এবং প্রোড সংস্করণে সমস্ত লিবস ইনলাইন করা হবে vendor.js, সংকলিত কোডটি রেপোতে কমিট করা থাকলে আমাদের সমস্ত ডিপগুলি ডেভ ডিপস হওয়া উচিত? এবং এটি কমিট করা উচিত, অন্যথায় এটি আশ্চর্যের বিষয় যে আপনাকে মডিউলটি সংকলন করতে হবে, কেবল এটি ইনস্টল করবেন না (এবং পরীক্ষা এখানে কোথাও রয়েছে যেহেতু
সাবমোডিয়ালের

দুর্দান্ত উত্তর, কিন্তু একটি প্রশ্ন আছে? সম্ভাব্য ওয়েবপ্যাক কি একটি দূষিত বান্ডিল তৈরি করতে পারে? আমার অনুমান, ডেভডিপেন্ডেন্সি প্যাকেজগুলি পণ্য সংস্করণে কাজ করবে না, webpack -pআমি বলতে চাইছি। অনুগ্রহ করে আমার প্রশ্নের উত্তর দাও.
আমেরেলিকাএ

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

এবং পিয়ার নির্ভরতা সম্পর্কে কি?
dev27

13

আমি এই নির্ভরশীলতার ব্যাখ্যাগুলিতে আমার মতামতটির উত্তরটিতে যুক্ত করতে চাই

  • dependencies আপনার কোডবেসে সরাসরি ব্যবহারের জন্য, সাধারণত উত্পাদন কোডে শেষ হওয়া জিনিসগুলি বা কোডের কিছু অংশের জন্য ব্যবহার করা হয়
  • devDependencies বিল্ড প্রক্রিয়াটির জন্য ব্যবহৃত হয়, এমন সরঞ্জামগুলি যা আপনাকে শেষ কোডটি কীভাবে শেষ হবে তা পরিচালনা করতে সহায়তা করে, তৃতীয় পক্ষের পরীক্ষা মডিউলগুলি (প্রাক্তন ওয়েবপ্যাক স্টাফ)

সিএসএস সম্পদ সম্পর্কে কী?
ব্রায়ান জেলিপ

8

সংক্ষেপে

  1. নির্ভরতা - npm install <package> --save-prodউত্পাদন পরিবেশে আপনার অ্যাপ্লিকেশন দ্বারা প্রয়োজনীয় প্যাকেজ ইনস্টল করে।

  2. দেবনির্ভরতা - npm install <package> --save-devকেবল স্থানীয় বিকাশ এবং পরীক্ষার জন্য প্রয়োজনীয় প্যাকেজ ইনস্টল করে

  3. কেবল টাইপিং npm installপ্যাকেজ.জসনে উল্লিখিত সমস্ত প্যাকেজ ইনস্টল করে

সুতরাং আপনি যদি নিজের স্থানীয় কম্পিউটারে কাজ করছেন তবে কেবল টাইপ করুন npm installএবং চালিয়ে যান :)


6

peerDependenciesউপরে উল্লেখ করা সিরিও বিষয়ের উপর একটি ব্লগ পোস্ট থেকে এই স্নিপেটটি পড়া না হওয়া পর্যন্ত আমার পক্ষে যথেষ্ট অর্থবহ হয়নি :

[ প্লাগিনগুলি ] যা প্রয়োজন তা হ'ল প্লাগইন এবং তাদের হোস্ট প্যাকেজের মধ্যে এই "নির্ভরতা" প্রকাশ করার একটি উপায়। কিছু বলার উপায়, "আমি যখন আমার হোস্ট প্যাকেজের 1.2.x সংস্করণে প্লাগ ইন করি তখনই আমি কাজ করি, সুতরাং আপনি যদি আমাকে ইনস্টল করেন তবে নিশ্চিত হয়ে নিন যে এটি একটি সামঞ্জস্যপূর্ণ হোস্টের পাশাপাশি রয়েছে” " আমরা এই সম্পর্কটিকে পিয়ার নির্ভরতা বলি।

প্লাগইন হোস্টের একটি নির্দিষ্ট সংস্করণ আশা করে ...

peerDependenciesপ্লাগইন, লাইব্রেরিগুলির জন্য যা তাদের ফাংশন সম্পাদন করার জন্য একটি "হোস্ট" লাইব্রেরি প্রয়োজন, তবে হোস্টের সর্বশেষতম সংস্করণ প্রকাশের আগে একটি সময়ে লেখা হতে পারে ।

মানে, যদি আমি লিখি PluginX v1জন্য HostLibraryX v3এবং দূরে পদব্রজে ভ্রমণ, আছে কোন গ্যারান্টি PluginX v1যখন কাজ করবে HostLibraryX v4(এমনকি HostLibraryX v3.0.1) উন্মুক্ত করা হয়েছে।

... তবে প্লাগইন হোস্টের উপর নির্ভর করে না ...

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

এর অর্থ dependenciesপ্লাগইনগুলির জন্য সত্যিকারের সঠিক ধারণা নয়।

আরও খারাপ, যদি আমার হোস্টকে নির্ভরতার মতো আচরণ করা হয় তবে আমরা একই পরিস্থিতিতে একই ব্লগ পোস্টটির উল্লেখ করব (এই উত্তরের হোস্ট এবং প্লাগইনটি ব্যবহারের জন্য কিছুটা সম্পাদনা করা):

তবে এখন, [যদি আমরা প্লাস্টিনএক্সের নির্ভরতা হিসাবে হোস্টলিবেরিএক্সের সমসাময়িক সংস্করণটিকে বিবেচনা করি]] npm installএর অপ্রত্যাশিত নির্ভরতা গ্রাফের চলমান ফলাফল

├── HostLibraryX@4.0.0
└─┬ PluginX@1.0.0
  └── HostLibraryX@3.0.0

আমি আপনার কল্পনার মূল অ্যাপ্লিকেশনটির চেয়ে আলাদা [হোস্টলিবারিয়ানএক্স] এপিআই ব্যবহার করে প্লাগইন থেকে আসা সূক্ষ্ম ব্যর্থতাগুলি ছেড়ে দেব।

... এবং হোস্ট অবশ্যই প্লাগইনের উপর নির্ভর করে না ...

... এটি প্লাগইনগুলির পুরো পয়েন্ট। এখন হোস্টটি যদি তার সমস্ত প্লাগইনগুলির জন্য নির্ভরতা সম্পর্কিত তথ্য অন্তর্ভুক্ত করতে পারে তবে সমস্যাটি সমাধান হবে, তবে এটি একটি বিশাল নতুন সাংস্কৃতিক সমস্যাও প্রবর্তন করতে পারে : প্লাগইন পরিচালনা!

প্লাগইনগুলির পুরো বিষয়টি হ'ল তারা বেনামে জুটি বাঁধতে পারে। একটি নিখুঁত বিশ্বে, হোস্টকে পরিচালনা করা তাদের সমস্ত পরিষ্কার ও পরিশ্রমী হবে তবে আমরা লাইব্রেরিগুলির পাল পশুর বিড়ালগুলির প্রয়োজন নেই।

আমরা যদি শ্রেণিবদ্ধভাবে নির্ভর না হয়ে থাকি তবে সম্ভবত আমরা অন্তর্নির্ভর সহকর্মীরা ...

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


... তবে এটি কোনও স্বয়ংক্রিয় সম্পর্ক নয়। <<< মানিবল !!!

যদি আমি PluginX v1এবং তার পিয়ারের প্রত্যাশা করি ( এটির একটি পিয়ার ডিপেন্ডেন্সি আছে ) তবে HostLibraryX v3আমি এটি বলব। আপনি সর্বশেষ স্বয়ংক্রিয়ভাবে আপগ্রেড করে থাকেন তাহলে HostLibraryX v4(নোট যে এর সংস্করণ 4 ) আছে Plugin v1ইনস্টল, আপনি কি জানেন, ঠিক হবে?

npm আমার জন্য এই পরিস্থিতি পরিচালনা করতে পারে না -

"আরে, আমি দেখছি আপনি ব্যবহার করছেন PluginX v1! আমি স্বয়ংক্রিয়ভাবে HostLibraryXভি 4 থেকে ভি 3, কে কে ডাউনগ্রেজ করছি ?"

... বা ...

"আরে আমি দেখতে পাচ্ছি আপনি ব্যবহার করছেন PluginX v1That এটি প্রত্যাশা করে HostLibraryX v3, যা আপনি আপনার শেষ আপডেটের সময় ধূলিকণায় ফেলে রেখেছিলেন safe সুরক্ষিত থাকার জন্য, আমি স্বয়ংক্রিয়ভাবে আনইনস্টল করছি Plugin v1! 1!

কীভাবে, এনপিএম ?!

সুতরাং এনপিএম না। এটি আপনাকে পরিস্থিতি সম্পর্কে সতর্ক করে, এবং আপনাকে HostLibraryX v4উপযুক্ত সমবয়সী কিনা তা খুঁজে বের করতে দেয় Plugin v1


কোডা

peerDependencyপ্লাগইনগুলিতে ভাল পরিচালনা অনুশীলনে আরও বেশি স্বজ্ঞাতভাবে এই ধারণাটি তৈরি করবে। থেকে ব্লগ পোস্ট , এখনো আবার ...

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


4

নির্ভরতা বনাম দেব নির্ভরতা

দেব নির্ভরতা হ'ল মডিউল যা কেবল বিকাশের সময় প্রয়োজন যখন রানটাইম সময়ে নির্ভরতা প্রয়োজন required আপনি যদি নিজের অ্যাপ্লিকেশন স্থাপন করছেন, নির্ভরতা ইনস্টল করতে হবে, অন্যথায় আপনার অ্যাপ্লিকেশনটি কার্যকরভাবে কাজ করবে না। আপনার কোড থেকে আপনি যে লাইব্রেরিগুলি কল করেছেন যেগুলি প্রোগ্রাম চালানোর জন্য সক্ষম করে তা নির্ভরতা হিসাবে বিবেচিত হতে পারে।

যেমন- প্রতিক্রিয়া, প্রতিক্রিয়া - ডোম

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

যেমন- ESLint, বাবেল, ওয়েবপ্যাক

@FYI,

mod-a
  dev-dependents:
    - mod-b
  dependents:
    - mod-c

mod-d
  dev-dependents:
    - mod-e
  dependents:
    - mod-a

----

npm install mod-d

installed modules:
  - mod-d
  - mod-a
  - mod-c

----

checkout the mod-d code repository

npm install

installed modules:
  - mod-a
  - mod-c
  - mod-e

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

# For dependent modules
npm install dependent-module --save

# For dev-dependent modules
npm install development-module --save-dev

1

একটি এনপিএম প্যাকেজ বিতরণের চেষ্টা করার সময় আপনার ব্যবহার এড়ানো উচিত dependencies। পরিবর্তে আপনাকে এটিকে যুক্ত করার বিষয়টি বিবেচনা করতে হবে peerDependenciesবা এটিকে সরিয়ে ফেলতে হবে dependencies


1

আমি একটি সহজ ব্যাখ্যা পেয়েছি।

সংক্ষিপ্ত উত্তর:

নির্ভরতা "... সেগুলি যা আপনার প্রকল্পে সত্যিকার অর্থে প্রযোজনায় কাজ করতে সক্ষম হওয়া প্রয়োজন" "

ডেভডিপেনডেন্সিগুলি "... সেগুলি যা আপনার বিকাশের সময় প্রয়োজন" "

পিয়ারডিপেন্ডেন্সি "যদি আপনি নিজের লাইব্রেরি তৈরি করতে এবং প্রকাশ করতে চান তবে এটি নির্ভরতা হিসাবে ব্যবহার করা যেতে পারে"

এই পোস্টে আরও বিশদ: https://code-trotter.com/web/d dependferences-vs-devd depend depend-vs-peerd dependferences

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