বোর এবং এনপিএম এর মধ্যে পার্থক্য কী?


1763

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


7
সম্পর্কিত উত্তর stackoverflow.com/a/21199026/1310070
sachinjain024


7
এই প্রশ্নের উত্তর পুরানো বলে মনে হচ্ছে। কেউ যদি আমাদের এনপিএম 3 ব্যবহার করে যা ফ্ল্যাট নির্ভরতা সমর্থন করে তবে কি করতে হবে তা 2016 সালে বলতে পারেন? এনপিএম 3 এবং বোর পার্থক্য কী এবং এই মুহূর্তে সেরা অনুশীলনটি কী?
আমদেব

2
নীচে-রেখা, @ আমদেব: বোভার এখন হ্রাস করা হয়েছে। এনপিএম (বা সুতা, যা কেবলমাত্র সামান্য পার্থক্য) এটি যেখানে রয়েছে। আমি কোনও কার্যকর বিকল্প সম্পর্কে সচেতন নই।
এক্সএমএল

উত্তর:


1914

সমস্ত প্যাকেজ পরিচালকদের অনেক ডাউনসাইড রয়েছে। আপনাকে কেবল বাছাই করতে হবে যা দিয়ে আপনি বেঁচে থাকতে পারেন।

ইতিহাস

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

শক্তিশালী সম্পূর্ণ ফ্রন্ট- এন্ডের জন্য তৈরি করা হয় এবং এটি মনে রেখে অনুকূলিত করা হয়।

রেপোর আকার

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

বোরের প্যাকেজগুলির পরিমাণ অনেক কম।

স্টাইল ইত্যাদি পরিচালনা করা

বুভারের মধ্যে শৈলী ইত্যাদি অন্তর্ভুক্ত রয়েছে B

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

নির্ভরতা পরিচালনা

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

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

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


সম্পদ


37
কেন কোনও নেস্টেড নির্ভরতা গাছ সামনের প্রান্তে ভাল করে না?
লার্স ন্যাস্ট্রিম

24
ফ্রন্ট-এন্ড এনপিএম প্যাকেজটি কি কোনও ফ্ল্যাট নির্ভরতা গাছ হতে পারে না? আমি "কেন আমাদের 2 প্যাকেজ পরিচালক দরকার?" উভয়সঙ্কট।
স্টিভেন ওয়াচন

38
"ফ্ল্যাট নির্ভরতা গাছ" বলতে কী বোঝ? সমতল গাছ কি - একটি তালিকা? এটি তখন গাছ নয়।
mvmn

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

42
এনপিএম 3 এখন একটি ফ্ল্যাট নির্ভরতা গাছ সমর্থন করে।
ভাসা

361

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

উপর npm প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী : (6 থেকে archive.org লিংক সেপ্টেম্বর 2015)

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

উপর আবাস হোমপেজ:

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

সংক্ষেপে, এনপিএম স্থিরতার লক্ষ্যে। বোরের লক্ষ্য ন্যূনতম সংস্থান লোড। আপনি যদি নির্ভরতা কাঠামো আঁকেন তবে আপনি এটি দেখতে পাবেন:

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

এখানে আপনি দেখুন যে সমস্ত অনন্য নির্ভরতা একই স্তরের হয় on

তো, এনপিএম ব্যবহার করে বিরক্ত করবেন কেন?

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

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

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

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

  • [Node_modules]
    • Dep a v1.0
    • Dep B v1.0
      • Dep a v1.0 (মূল সংস্করণ ব্যবহার করে)
    • ডি সি সি v1.0
      • ডিপ এ ভি ২.০ (এই সংস্করণটি মূল সংস্করণ থেকে পৃথক, সুতরাং এটি নেস্টেড ইনস্টলেশন হবে)

আরও তথ্যের জন্য, আমি এনপিএম 3 এর ডক্সটি পড়ার পরামর্শ দিচ্ছি


4
এটি এখন প্রায় ক্লিচé যে "সফটওয়্যার ডেভলপমেন্ট হ'ল ট্রেড-অফ সম্পর্কে।" এটি একটি ভাল উদাহরণ। এক নির্বাচন করা আবশ্যক পারেন সঙ্গে বৃহত্তর স্থিতিশীলতার npm বা সঙ্গে ন্যূনতম সম্পদ লোড bower
jfmercer

6
@ শ্রেক আমি সুস্পষ্টভাবে বলছি যে আপনি আসলে দুটোই ব্যবহার করতে পারবেন। চূড়ান্ত অনুচ্ছেদে আমি উল্লেখ করেছি বলে তাদের বিভিন্ন উদ্দেশ্য রয়েছে। এটি আমার দৃষ্টিতে বাণিজ্য নয়।
জাস্টাস রোমিজন

আহ, আমি আপনাকে ভুল বুঝেছি। বা আমি যথেষ্ট মনোযোগ দিয়ে পড়িনি। স্পষ্টতার জন্য ধন্যবাদ। :-) এটি ভাল যে উভয়ই বাণিজ্য বন্ধ ছাড়াই ব্যবহার করা যায়।
jfmercer

4
@ অ্যালেক্সআঙ্গাস আমি এনপিএম 3 এর জন্য একটি আপডেট যুক্ত করেছি। বওয়ারের তুলনায় এটির এখনও কিছু বড় পার্থক্য রয়েছে। এনপিএম সম্ভবত সর্বদা নির্ভরশীলতার একাধিক সংস্করণকে সমর্থন করবে, যদিও বোভার তা করেন না।
জাস্টাস রোমিজন

এনপিএম 3
বোরের

269

টিএল; ডিআর: প্রতিদিনের ব্যবহারের সবচেয়ে বড় পার্থক্য নেস্টেড নির্ভরতা নয় ... এটি মডিউল এবং গ্লোবালের মধ্যে পার্থক্য।

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

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

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

বাওয়ার অ্যাপ্রোচ: গ্লোবাল রিসোর্স, <script>ট্যাগগুলির মতো

মূলে, বোভার প্লেইন-পুরানো স্ক্রিপ্ট ফাইলগুলি লোড করার বিষয়ে। এই স্ক্রিপ্ট ফাইলগুলিতে যা কিছু থাকুক না কেন, বোভার সেগুলি লোড করবে। মূলত এর অর্থ হ'ল বাওয়ার ঠিক আপনার HTML <script>এর সাদামাটা-পুস্তকের সমস্ত স্ক্রিপ্টগুলি সমেতের মতো including<head>

সুতরাং, একই বেসিক পদ্ধতির জন্য আপনি অভ্যস্ত হন তবে আপনি কিছু দুর্দান্ত অটোমেশন সুবিধা পান:

  • আপনার প্রজেক্টের রেপোতে (বিকাশকালে) জেএস নির্ভরতা অন্তর্ভুক্ত করার দরকার ছিল, বা সেগুলি সিডিএন এর মাধ্যমে পাওয়ার প্রয়োজন। এখন, আপনি রেপোগুলিতে অতিরিক্ত ডাউনলোডের ওজন এড়িয়ে যেতে পারেন এবং যে কেউ bower installস্থানীয়ভাবে তাদের প্রয়োজন অনুযায়ী দ্রুত এবং তাত্ক্ষণিকভাবে তা করতে পারেন।
  • যদি কোনও বাওয়ার নির্ভরতা তার নিজস্ব নির্ভরতা নির্দিষ্ট করে তবে bower.jsonসেগুলি আপনার জন্যও ডাউনলোড করা হবে।

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

এনপিএম পদ্ধতির: সাধারণ জেএস মডিউল, সুস্পষ্ট নির্ভরতা ইনজেকশন

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

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

  • মডিউলটির অভ্যন্তরের যে কোনও কিছুই কার্যকরভাবে নাম-গতিযুক্ত , এর অর্থ এটি কোনও বিশ্বব্যাপী চলক নয়, এবং আপনি ইচ্ছা করে এটিকে উদ্দেশ্য না করে রেফারেন্স করতে পারবেন না।
  • মডিউলটির অভ্যন্তরের যে কোনও কিছুই ইচ্ছাকৃতভাবে কোনও নির্দিষ্ট প্রসঙ্গে (সাধারণত অন্য একটি মডিউল) ইনজেকশনের প্রয়োজন যাতে এটি ব্যবহার করতে পারে
  • এর অর্থ আপনার আবেদনের বিভিন্ন অংশে আপনার একই বহিরাগত নির্ভরতা (লড্যাশ, বলুন) এর একাধিক সংস্করণ থাকতে পারে এবং এগুলির সংঘর্ষ / সংঘাত হবে না। (এটি আশ্চর্যরকমভাবে প্রায়শই ঘটে কারণ আপনার নিজস্ব কোড নির্ভরশীলতার একটি সংস্করণ ব্যবহার করতে চায় তবে আপনার বাহ্যিক নির্ভরতার মধ্যে একটির অন্যটির বিরোধ রয়েছে Or বা আপনার দুটি বাহ্যিক নির্ভরতা পেয়েছেন যা প্রত্যেকে আলাদা সংস্করণ চায়))
  • সমস্ত নির্ভরতা ম্যানুয়ালি একটি নির্দিষ্ট মডিউলে ইনজেকশনের কারণে এগুলি সম্পর্কে তর্ক করা খুব সহজ। আপনি একটি বাস্তবতার জন্য জানেন: "এটিতে কাজ করার সময় আমার একমাত্র কোডটি বিবেচনা করা উচিত যা আমি ইচ্ছাকৃতভাবে এখানে ইনজেক্ট করার জন্য বেছে নিয়েছি"
  • এমনকি ইনজেকশনের মডিউলগুলির সামগ্রীটি আপনি যে ভেরিয়েবলটিকে অর্পণ করেছেন তার পিছনে আবদ্ধ হয় এবং সমস্ত কোড একটি সীমিত সুযোগের মধ্যে কার্যকর হয়, অবাক করে দেয় এবং সংঘর্ষগুলি খুব অসম্ভব হয়ে যায়। এটি অনেক বেশি, আপনার নির্ভরতাগুলির মধ্যে থেকে কোনওটি ঘটনাক্রমে কোনও গ্লোবাল ভেরিয়েবলকে উপলব্ধি না করে ভুলভাবে সংজ্ঞায়িত করবে বা আপনি এটি করবেন likely (এটা করতে ঘটতে, কিন্তু আপনি সাধারণত এটা করতে আপনার পথ থেকে সরে যেতে ভালো কিছু সঙ্গে আছে window.variable। এক দুর্ঘটনা এখনও ঘটতে বরাদ্দ করা হয় থাকে this.variable, বুঝতে না যে thisআসলে windowবর্তমান প্রেক্ষাপটে।)
  • আপনি যখন একটি পৃথক মডিউল পরীক্ষা করতে চান, আপনি খুব সহজেই জানতে সক্ষম হবেন: মডিউলের অভ্যন্তরে চলমান কোডটিকে অন্য কী (নির্ভরতা) প্রভাবিত করছে? এবং, আপনি সমস্ত কিছু স্পষ্টভাবে ইনজেকশনের কারণে আপনি সহজেই সেই নির্ভরতাগুলি উপহাস করতে পারেন।

আমার কাছে, ফ্রন্ট-এন্ড কোডের জন্য মডিউলগুলির ব্যবহার নীচে নেমে আসে: অনেক সঙ্কুচিত প্রসঙ্গে কাজ করা যা সম্পর্কে বিতর্ক করা এবং পরীক্ষা করা সহজ এবং কী ঘটছে সে সম্পর্কে আরও দৃty়তা।


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

var React = require('react');

ফাইল / মডিউলটির অভ্যন্তরে, আপনি সাধারণত যা কিছু করেন তা করেন এবং এমন কিছু অবজেক্ট বা ফাংশন তৈরি করেন যা আপনি বাইরের ব্যবহারকারীদের কাছে প্রকাশ করতে চাইবেন, সম্ভবত এটি কল করে myModule

একটি ফাইলের শেষে, আপনি বিশ্বের সাথে যা কিছু ভাগ করতে চান তা রপ্তানি করুন:

module.exports = myModule;

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

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

এই ডেকের মডিউলগুলির সাথে কাজ করার জন্য নিদর্শনগুলি সম্পর্কে আরও ।


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


সম্পাদনা করুন (মে 2019) "আবাস পরিশেষে হয়েছে অবচিত । গল্প শেষ।" (এইচ / টি: পিথির সংক্ষিপ্তসার জন্য নীচে @ ড্যানডাসক্লেস্কু।

এবং, সুতা এখনও সক্রিয় থাকাকালীন , ইয়ার্নের কিছু মূল বৈশিষ্ট্য গ্রহণ করার পরে এটির জন্য প্রচুর গতিবেগ আবার এনএমপিতে ফিরে যায়।


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

আমি দুঃখিত, এমন একটি লোকের কাছ থেকে যা জাভাস্ক্রিপ্ট পারল্যান্ডে সমস্ত ধোঁয়াশার জন্য খুব কম যত্ন করে তবে এমনটি ঘটে এটি একটি ব্যবসায় পরিচালনা করে যা একটি ছোট ওয়েব অ্যাপ্লিকেশন ব্যবহার করে। ডার্ন ওয়েব জিনিসটি বিকাশের জন্য আমরা যে টুলকিটটি ব্যবহার করি তা দিয়ে বোরওয়ার ব্যবহার থেকে সম্প্রতি এনপিএম চেষ্টা করতে বাধ্য হয়েছিল। আমি আপনাকে বলতে পারি যে সবচেয়ে বড় পার্থক্য অপেক্ষা অপেক্ষা সময়, এনপিএম কয়েক বছর সময় লাগে। মনে রাখবেন যে xkcd কার্টুনটি ছেলেদের সাথে তরোয়াল মারামারিগুলি তাদের মনিবকে 'সংকলন' করে বাজায়; বেশ কিছুটা কি এনপিএম বোরারে যুক্ত করেছে।
পেড্রো

129

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

বোর অবশেষে হ্রাস করা হয়েছে । গল্পের শেষে.

পুরানো উত্তর

স্পটিফায় জাভাস্ক্রিপ্ট বিকাশকারী ম্যাটিয়াস পেটার জোহানসন থেকে :

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

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

আমাদের বোরই ব্যবহার বন্ধ করা উচিত এবং এনপিএমের চারপাশে একীকরণ করা উচিত। ধন্যবাদ, যা ঘটছে তা হচ্ছে :

মডিউল গণনা - বোর বনাম এনপিএম

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

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

(নোট করুন যে ওয়েবপ্যাক এবং রোলআপ ব্যাপকভাবে আগস্ট ২০১ of সালের হিসাবে ব্রাউজরিফির চেয়ে ভাল হিসাবে বিবেচিত হয়))


7
<সার্কাসম> দয়া করে মনে রাখবেন যে এমনকি 'হ্যালো ওয়ার্ল্ড' এনপিএম প্রকল্পের চালনার জন্য 300+ মডিউলগুলির প্রয়োজন ... </
সার্কাসম

1
আমি সম্মত হই না যে "বিগ মিনিফাইড ফাইলগুলি" "পারফরম্যান্সের জন্য বিশেষত মোবাইল ডিভাইসগুলির জন্য" দুর্দান্ত। একেবারে বিপরীত: সীমাবদ্ধ ব্যান্ডউইথের প্রয়োজন মতো ছোট ছোট ফাইল দরকার on
মাইকেল ফ্রানজল

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

4
@ জেরার্ডো গ্রিগনোলি: বোভার শেষ হচ্ছে
ড্যান ড্যাসকলেসকু

45

বোর মডিউলগুলির একটি একক সংস্করণ বজায় রাখে, এটি কেবল আপনাকে আপনার জন্য সঠিক / সেরাটি নির্বাচন করতে সহায়তা করার চেষ্টা করে।

জাভাস্ক্রিপ্ট নির্ভরতা পরিচালনা: এনপিএম বনাম বোরো বনাম ভোলো?

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


4
আমার মনে হয় সিন্ড্রে উল্লেখ করেছেন যে যখন তিনি নেস্টেড নির্ভরতা সম্পর্কে কথা বলেন।
গেমস ব্রেনিয়াক

5
@ গেমস ব্রেনিয়াক আপনার সঠিক, কেবল ভেবেছি আমি এটি নিজের কথায় প্রকাশ করব।
সাগিফ

1
@Sagivf এগুলি না আপনার নিজের ভাষায়, wheresrhys যারা মূল উত্তর প্রদান যদি না আপনি এছাড়াও এখানে
dayuloli

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

2
আপনি কেন এই উত্তরটি এত পছন্দ করেছেন তা আমি জানি না। আমার এই উত্তরটিতে সত্যই নতুন তথ্য / দৃষ্টিভঙ্গি রয়েছে।
ক্যালভিন

33

আমার দলটি টাওয়ার থেকে দূরে সরে গেছে এবং এনপিএমে স্থানান্তরিত হয়েছে কারণ:

  • প্রোগ্রাম্যাটিক ব্যবহার বেদনাদায়ক ছিল
  • বোর ইন্টারফেস পরিবর্তন রাখা
  • ইউআরএল শর্টহ্যান্ডের মতো কিছু বৈশিষ্ট্য সম্পূর্ণরূপে ভাঙা
  • একই প্রকল্পে বাওয়ার এবং এনপিএম উভয়ই ব্যবহার করা বেদনাদায়ক
  • গিটার ট্যাগগুলির সাথে সিঙ্কে bower.json সংস্করণ ক্ষেত্র রাখা বেদনাদায়ক
  • উত্স নিয়ন্ত্রণ! = প্যাকেজ পরিচালনা
  • কমনজেএস সমর্থন সোজা নয়

আরও তথ্যের জন্য দেখুন "কেন আমার দল বোরের পরিবর্তে এনপিএম ব্যবহার করে"


17

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

একদিকে নোড.জেএস এনভায়রনমেন্টে ব্যবহৃত মডিউল বা নোড.জেস যেমন কর্মা, লিঙ্ক, মিনিফায়ার ব্যবহার করে নির্মিত উন্নয়ন সরঞ্জামগুলি ইনস্টল করতে এনপিএম তৈরি করা হয়েছিল। এনপিএম কোনও প্রকল্পে স্থানীয়ভাবে মডিউলগুলি ইনস্টল করতে পারে (নোড_মডিউলগুলিতে ডিফল্টরূপে) বা একাধিক প্রকল্পের দ্বারা ব্যবহৃত বিশ্বব্যাপী। বড় প্রকল্পগুলিতে নির্ভরতা নির্দিষ্ট করার উপায় হ'ল প্যাকেজ.জসন নামে একটি ফাইল তৈরি করা যার মধ্যে নির্ভরতার তালিকা থাকে। আপনি এনপিএম ইনস্টল চালনা করার সময় সেই তালিকাটি এনপিএম দ্বারা স্বীকৃত হয়, যা পরে আপনার জন্য ডাউনলোড করে ইনস্টল করে।

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

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


1
আবির্ভাবের সাথে এটি npm dedupeকিছুটা পুরানো। দেখুন Mattias এর উত্তর
ড্যান ড্যাসক্লেস্কু

7

নোড.জেএস নিয়ে কাজ করা অনেক লোকের জন্য, ধনুকের একটি বড় সুবিধা হ'ল জাভাস্ক্রিপ্ট নয় এমন নির্ভরতা পরিচালনা করা। যদি তারা জাভাস্ক্রিপ্টের সাথে সংকলিত ভাষাগুলি নিয়ে কাজ করে থাকে তবে এনপিএম তাদের কিছু নির্ভরতা পরিচালনা করতে ব্যবহার করা যেতে পারে। তবে, তাদের সমস্ত নির্ভরতা নোড.জেএস মডিউল হতে চলেছে না। জাভাস্ক্রিপ্টে সংকলনকারীদের মধ্যে কিছুগুলির কাছে অদ্ভুত উত্স ভাষা নির্দিষ্ট ম্যাঙ্গেলিং থাকতে পারে যা ব্যবহারকারীরা যখন সোর্স কোডের প্রত্যাশা করছেন তখন জাভাস্ক্রিপ্টে একটি অযৌক্তিক বিকল্পটি সংকলিত করে তোলে them

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


এই এনএমপিজেস ব্লগ পোস্টটিতে বলা হয়েছে "আপনার প্যাকেজটিতে ES6, ক্লায়েন্ট-সাইড জেএস, বা এমনকি HTML এবং CSS থাকুক না কেন কিছু থাকতে পারে These
ড্যান ড্যাসকলেসকু

1
থাকতে পারে এর মধ্যে একটি পার্থক্য রয়েছে এবং এর অন্তর্ভুক্ত হওয়া উচিত । অবশ্যই তারা কিছু থাকতে পারে, তবে সাধারণভাবে তাদের সাধারণ জেএসের সাথে কিছু প্রকারের ইন্টারফেস অন্তর্ভুক্ত করা উচিত । এটি সর্বোপরি 'নোড প্যাকেজ ম্যানেজার'। এগুলির অংশটি এমন জিনিস যা জাভাস্ক্রিপ্টের পাশাপাশি স্বাভাবিকভাবেই ঘুরে দেখা যায় গুরুত্বপূর্ণ। জাভাস্ক্রিপ্টের সাথে জড়িত এমন অনেকগুলি বিষয় রয়েছে যা স্বাভাবিকভাবেই এর পাশ দিয়ে আসে না।
জেসোফার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.