javascript - Bower এবং npm মধ্যে পার্থক্য কি?




(6)

bower এবং npm মধ্যে মৌলিক পার্থক্য কি? শুধু কিছু সহজ এবং সহজ চান। আমি আমার সহকর্মীদের কিছু তাদের প্রকল্পের মধ্যে বিনিময় এবং npm ব্যবহারযোগ্য দেখা করেছি।


2017-অক্টোবর আপডেট

Bower পরিশেষে অব্যবহৃত deprecated । গল্পের শেষে.

পুরোনো উত্তর

স্পটিফিতে জাভাস্ক্রিপ্ট ডেভেলপার ম্যাটিয়াস পেটার জহানসন থেকে :

প্রায় সব ক্ষেত্রে, ব্রাউজারটি এবং Bower এর উপর npm ব্যবহার করা আরও উপযুক্ত। এটি Bower হয় তুলনায় সামনে শেষ অ্যাপ্লিকেশন জন্য কেবল একটি ভাল প্যাকেজিং সমাধান। স্পটিফিতে, আমরা পুরো ওয়েব মডিউলগুলি প্যাকেজ করতে এনপিএম ব্যবহার করি (এইচটিএমএল, CSS, Js) এবং এটি খুব ভাল কাজ করে।

Bower নিজেই ওয়েবের জন্য প্যাকেজ ম্যানেজার হিসাবে ব্র্যান্ড। এটি সত্য ছিল যদি এটি অসাধারণ হবে - একটি প্যাকেজ ম্যানেজার যা আমার জীবনের একটি ভাল শেষ বিকাশকারী হিসাবে ভাল করে তোলে। সমস্যাটি হল যে বower এই উদ্দেশ্যে কোন বিশেষ সরঞ্জাম সরবরাহ করে না। এটা যে এনপিএমএ জানি না কোন টুলিং উপলব্ধ করা হয় না, এবং বিশেষ করে যে কেউ বিশেষভাবে front-end ডেভেলপারদের জন্য দরকারী। Npm উপর বower ব্যবহার করার জন্য একটি ফ্রন্ট শেষ বিকাশকারী জন্য সহজভাবে কোন সুবিধা নেই।

আমরা bower ব্যবহার বন্ধ করা উচিত এবং প্রায় npm একত্রিত করা উচিত। সৌভাগ্যক্রমে, যা ঘটছে তা হল :

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

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

(উল্লেখ্য, Webpack এবং rollup ব্যাপকভাবে ব্রাউজাইফির তুলনায় অগাস্ট 2016 হিসাবে বিবেচিত হয়।)


Node.js এর সাথে কাজ করে এমন অনেক লোকের জন্য, ঘোড়াটির একটি বড় সুবিধা হল নির্ভরশীলতা পরিচালনা করার জন্য যা জাভাস্ক্রিপ্ট নয়। যদি তারা জাভাস্ক্রিপ্ট কম্পাইল করে এমন ভাষাগুলির সাথে কাজ করে তবে এনপিএম তাদের কিছু নির্ভরতা পরিচালনা করতে ব্যবহার করতে পারে। তবে, তাদের সমস্ত নির্ভরতা নোড.জেজেড মডিউল হতে যাচ্ছে না। যাঁরা জাভাস্ক্রিপ্টে সংকলন করেন তাদের মধ্যে কিছু অদ্ভুত উৎস ভাষা নির্দিষ্ট মার্ংলিং থাকতে পারে যা ব্যবহারকারীদের সোর্স কোডের প্রত্যাশার সময় জাভাস্ক্রিপ্টে একটি অসাধারণ বিকল্প সংকলিত করে তাদের পাস করে।

এনপিএম প্যাকেজে সবকিছুই ব্যবহারকারীর মুখোমুখি জাভাস্ক্রিপ্ট হতে হবে না, তবে এনপিএম লাইব্রেরির প্যাকেজগুলির জন্য এটি অন্তত কিছু হওয়া উচিত।


এই উত্তর সিন্ধু Sorhus এর উত্তরের একটি যোগসূত্র। Npm এবং Bower মধ্যে প্রধান পার্থক্য তারা recursive নির্ভরতা আচরণ করে উপায়। মনে রাখবেন যে তারা একক প্রকল্পে একসাথে ব্যবহার করা যেতে পারে।

এনএমপি FAQ এ : (6 সেপ্টেম্বর 2015 থেকে archive.org লিঙ্ক)

নির্ভরশীলতা নিস্তেজ ছাড়া নির্ভরতা দ্বন্দ্ব এড়ানোর জন্য এটি অনেক কঠিন। এটি npm কাজ করে যেভাবে মৌলিক, এবং একটি অত্যন্ত সফল পদ্ধতির প্রমাণিত হয়েছে।

Bower হোমপেজে:

Bower সামনে শেষ জন্য অপ্টিমাইজ করা হয়। ঝরনা একটি সমতল নির্ভরতা গাছ ব্যবহার করে, প্রতিটি প্যাকেজের জন্য শুধুমাত্র একটি সংস্করণ প্রয়োজন, সর্বনিম্ন পৃষ্ঠা লোড হ্রাস।

সংক্ষেপে, npm স্থায়িত্ব জন্য লক্ষ্য। Bower সংক্ষিপ্ত সম্পদ লোড করার লক্ষ্যে। আপনি নির্ভরতা গঠন আঁকা যদি, আপনি এই দেখতে পাবেন:

npm:

project root
[node_modules] // default directory for dependencies
 -> dependency A
 -> dependency B
    [node_modules]
    -> dependency A

 -> dependency C
    [node_modules]
    -> dependency B
      [node_modules]
       -> dependency A 
    -> dependency D

আপনি এটি পুনরাবৃত্তি কিছু নির্ভরতা ইনস্টল করতে পারেন হিসাবে দেখতে পারেন। নির্ভরতা একটি তিন ইনস্টল ইনস্ট্যান্স আছে!

আবাস:

project root
[bower_components] // default directory for dependencies
 -> dependency A
 -> dependency B // needs A
 -> dependency C // needs B and D
 -> dependency D

এখানে আপনি দেখেন যে সমস্ত অনন্য নির্ভরতা একই স্তরের উপর।

তাই, কেন npm ব্যবহার বিরক্ত?

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

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

Npm 3 এর জন্য আপডেট করুন:

এনপিপি 3 এখনও বower তুলনায় ভিন্নভাবে কাজ করে। এটি বিশ্বব্যাপী নির্ভরতাগুলি ইনস্টল করবে, তবে শুধুমাত্র এটির প্রথম সংস্করণটির মুখোমুখি হবে। অন্যান্য সংস্করণ গাছ (পিতা মডিউল মডিউল, তারপর node_modules) ইনস্টল করা হয়।

  • [Node_modules]
    • ডিপি এ v1.0
    • ডিপি বি v1.0
      • ডিপি এ v1.0 (রুট সংস্করণ ব্যবহার করে)
    • ডিপি সি v1.0
      • ডিপি এ v2.0 (এই সংস্করণ রুট সংস্করণ থেকে ভিন্ন, তাই এটি একটি নিছক ইনস্টলেশন হবে)

আরো তথ্যের জন্য, আমি npm 3 এর ডক্স পড়ার পরামর্শ দিই


ঝরনা এবং Npm জাভাস্ক্রিপ্ট জন্য প্যাকেজ পরিচালকদের হয়।

আবাস

Bower শুধুমাত্র সামনে শেষ বিকাশের জন্য তৈরি করা হয়। এটি ফ্ল্যাট নির্ভরতা ট্রি ব্যবহার করে, প্রতিটি প্যাকেজের জন্য শুধুমাত্র একটি সংস্করণ প্রয়োজন, পৃষ্ঠা লোড হ্রাস করে। এটা প্রধানত সংক্ষিপ্ত সম্পদ লোড করার লক্ষ্যে। এটি কম অবদানকারী এবং তাই উন্নয়ন প্রক্রিয়া ধীর।

Bower একটি bower.json বলা কনফিগারেশন ফাইল আছে। এই ফাইলটিতে আমরা বowerের জন্য কনফিগারেশন বজায় রাখতে পারি যেমন আমাদের নির্ভরশীলতা এবং লাইসেন্সের বিবরণ, বিবরণ, নাম ইত্যাদি। ঝরনা front-end প্যাকেজ যেমন jquery, angular, react, ember, knockout, backbone ইত্যাদি জন্য উপযুক্ত।

Npm

Npm সবচেয়ে সাধারণভাবে Node.js মডিউল পরিচালনার জন্য ব্যবহৃত হয়, কিন্তু এটি খুব সামনের দিকেও কাজ করে। এটি নেস্টেড নির্ভরতা গাছ এবং সমতল নির্ভরতা গাছ ব্যবহার করে। এটি জনপ্রিয় এবং অনেক অবদানকারী আছে। সুতরাং তার নতুন সংস্করণ সবসময় উত্তেজনাপূর্ণ বৈশিষ্ট্য সঙ্গে আসে।

Npm প্যাকেজ.জson নামে একটি কনফিগারেশন ফাইল আছে। এই ফাইলটিতে আমরা এনপিএমের জন্য কনফিগারেশন বজায় রাখতে পারি যেমন আমাদের নির্ভরশীলতা এবং লাইসেন্সের বিবরণ, বিবরণ, নাম ইত্যাদি। Npm নির্ভরশীলতা এবং DevDependencies উপলব্ধ করা হয়। নির্ভরতা ডাউনলোড এবং জাভাসি, Angular মত ফ্রন্ট-শেষ ফাইল এবং তাই বজায় রাখা হবে। দেবতা নির্ভরতাগুলি গ্রান্ট, গুলপ, জেএসহিন্ট ইত্যাদির মতো ডেভেলপমেন্ট টুল ডাউনলোড এবং বজায় রাখবে।

স্পষ্টতই এটি ফ্রন্ট-এ ভাল কাজ করে না, কারণ আমাদের আমাদের প্রকল্পগুলিতে jQuery দরকার। আমাদের জাভাস্ক্রিপ্টের শুধুমাত্র একটি কপি প্রয়োজন, কিন্তু যখন অন্য প্যাকেজটিকে jQuery প্রয়োজন হয়, তখন এটি আবার jQuery এর আরও একটি কপি ডাউনলোড করবে। এটি Npm প্রধান ত্রুটিগুলির একটি।

কী নোট: অনেকগুলি প্রকল্প উভয়ই ব্যবহার করে কারণ তারা ফ্রন্ট-শেষ প্যাকেজের জন্য বউয়ার এবং বিকাশকারী সরঞ্জামগুলির জন্য Npm ব্যবহার করে। আপনার প্রকল্পে মাল্টিপলাইং প্যাকেজ ম্যানেজার আপনার কর্মপ্রবাহ কঠিন করতে। Npm 3 ব্রাউজারিফাই বা webpack সাথে মিলিত এখনই যাওয়ার উপায়।


সমস্ত প্যাকেজ পরিচালকদের অনেক downsides আছে। আপনি শুধু আপনি সঙ্গে বসবাস করতে পারেন, যা নিতে হবে।

ইতিহাস

npm node.js মডিউল পরিচালনা করে (কেন প্যাকেজ ডিফল্টরূপে node_modules চলে যায়), তবে Browserify বা ওয়েবপ্যাকের সাথে মিলিত হলে এটি ফ্রন্ট- Browserify জন্যও কাজ করে।

Bower শুধুমাত্র সামনে শেষের জন্য তৈরি করা হয় এবং মন যে সঙ্গে অপ্টিমাইজ করা হয়।

রেপো আকার

এনপিএম অনেক বেশি, সাধারণ উদ্দেশ্য জাভাস্ক্রিপ্ট (যেমন দেশের তথ্য বা দেশটির তথ্য বা সামনের ফাঁকে ফাংশন বাছাই করার জন্য যেগুলি ফাংশন বা সামনের অংশে ব্যবহারযোগ্য)।

Bower প্যাকেজের অনেক ছোট পরিমাণ আছে।

শৈলী ইত্যাদি হ্যান্ডলিং

ঝরনা শৈলী ইত্যাদি অন্তর্ভুক্ত।

npm জাভাস্ক্রিপ্ট উপর দৃষ্টি নিবদ্ধ করা হয়। শৈলীগুলি npm-sass ডাউনলোড করা হয় অথবা npm-sass বা sass-npm মতো কিছু প্রয়োজনীয়।

নির্ভরতা হ্যান্ডলিং

সবচেয়ে বড় পার্থক্য হল এনএমপি নেস্টেড নির্ভরতাগুলি (কিন্তু ডিফল্টরূপে সমতল) করে থাকে, যখন বয়ারের জন্য একটি সমতল নির্ভরতা গাছ দরকার (ব্যবহারকারীর উপর নির্ভরতার রেজল্যুশনের বোঝা রাখে)

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

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

সম্পদ


http://ng-learn.org/2013/11/Bower-vs-npm/ থেকে এই দরকারী ব্যাখ্যা পাওয়া গেছে

Node.js পরিবেশে ব্যবহৃত মডিউলে ইনস্টল করার জন্য একদিকে npm তৈরি করা হয়েছিল, অথবা নোড.জেএস যেমন কর্ম, লিন্ট, মিনিফায়ার ইত্যাদি ব্যবহার করে নির্মিত বিকাশ সরঞ্জামগুলি। npm একটি প্রকল্পে স্থানীয়ভাবে মডিউল ইনস্টল করতে পারে (ডিফল্টরূপে node_modules) অথবা বিশ্বব্যাপী একাধিক প্রকল্প দ্বারা ব্যবহার করা যেতে পারে। বড় প্রকল্পগুলিতে নির্ভরশীলতা উল্লেখ করার উপায় package.json নামে একটি ফাইল তৈরি করে যার মধ্যে নির্ভরতাগুলির তালিকা রয়েছে। যখন আপনি npm ইনস্টল চালান তখন সেই তালিকাটি npm দ্বারা স্বীকৃত হয়, যা তখন আপনার জন্য ডাউনলোড এবং ইনস্টল করে।

অন্যদিকে ঘোড়া আপনার ফ্রন্টেন্ড নির্ভরতা পরিচালনা করার জন্য তৈরি করা হয়েছিল। JQuery, AngularJS, underscore, ইত্যাদি লাইব্রেরিগুলি যেমন npm এর অনুরূপ একটি ফাইল রয়েছে যা আপনি bower.json নামক নির্ভরতাগুলির তালিকা নির্দিষ্ট করতে পারেন। এই ক্ষেত্রে আপনার ফ্রন্টেন্ড নির্ভরতাগুলি বower ইন্সটল চালানোর মাধ্যমে ইনস্টল করা হয় যা ডিফল্টভাবে bower_components নামে একটি ফোল্ডারে ইনস্টল করে।

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







bower