it-swarm.asia

ما هو الفرق بين باور و npm؟

ما هو الفرق الأساسي بين bower و npm؟ فقط أريد شيئا عادي وبسيط. لقد رأيت بعض زملائي يستخدمون bower و npm بشكل متبادل في مشاريعهم.

1684
Games Brainiac

جميع مديري الحزم لديهم العديد من الجوانب السلبية. عليك فقط اختيار ما يمكنك العيش معه.

التاريخ

npm بدأ إدارة وحدات node.js (وهذا هو السبب في أن الحزم تدخل في node_modules افتراضيًا) ، لكنها تعمل للجهة الأمامية أيضًا عند دمجها مع Browserify أو WebPack.

Bower يتم إنشاؤه فقط للواجهة الأمامية ويتم تحسينه مع وضع ذلك في الاعتبار.

حجم الريبو

إن npm أكبر بكثير من bower ، بما في ذلك JavaScript للأغراض العامة (مثل country-data لمعلومات البلد أو sorts لفرز الوظائف التي يمكن استخدامها في النهاية الأمامية أو النهاية الخلفية).

يحتوي Bower على كمية أقل من الحزم.

التعامل مع الأنماط وغيرها

ويشمل باور أنماط الخ.

npm يركز على جافا سكريبت. يتم تنزيل الأنماط بشكل منفصل أو مطلوب بواسطة شيء مثل npm-sass أو sass-npm.

التعامل مع التبعية

الاختلاف الأكبر هو أن npm لا تبعيات متداخلة (ولكنها مسطحة بشكل افتراضي) بينما Bower يتطلب شجرة تبعية مسطحة (يضع عبء دقة التبعية على المستخدم) .

تعني شجرة التبعية المتداخلة أن التبعيات الخاصة بك يمكن أن يكون لها تبعيات خاصة بها يمكن أن يكون لها تبعاتها الخاصة ، وهكذا. هذا يسمح لوحدتين تتطلب إصدارات مختلفة من نفس التبعية ولا تزال تعمل. لاحظ أنه منذ npm v3 ، فإن شجرة التبعية ستكون بشكل افتراضي (مساحة التوفير) متداخلة فقط عند الحاجة ، على سبيل المثال ، إذا كانت هناك تبعتان تحتاجان إلى نسختهما الخاصة من Underscore.

تستخدم بعض المشروعات كليهما أنها تستخدم Bower للحزم الأمامية و npm لأدوات المطورين مثل Yeoman و Grunt و Gulp و JSHint و CoffeeScript ، إلخ.


مصادر

1874
Sindre Sorhus

هذه الإجابة هي إضافة إلى إجابة Sindre Sorhus. الفرق الرئيسي بين npm و Bower هو الطريقة التي يعاملون بها التبعيات العودية. لاحظ أنه يمكن استخدامها معًا في مشروع واحد.

على npm FAQ : (رابط archive.org من 6 سبتمبر 2015)

من الأصعب بكثير تجنب تعارضات التبعية دون تداخل التبعيات. هذا أمر أساسي للطريقة التي يعمل بها npm ، وقد أثبت أنه نهج ناجح للغاية.

في Bower الصفحة الرئيسية:

تم تحسين Bower للواجهة الأمامية. يستخدم 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

كما ترى ، يقوم بتثبيت بعض التبعيات بشكل متكرر. التبعية A لها ثلاث حالات مثبّتة!

كوخ في الريف:

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

هنا ترى أن جميع التبعيات الفريدة موجودة على نفس المستوى.

إذن ، لماذا تهتم باستخدام npm؟

ربما تتطلب التبعية B إصدارًا مختلفًا من التبعية A بدلاً من التبعية C. npm تقوم بتثبيت كلا الإصدارين من هذه التبعية بحيث تعمل على أي حال ، لكن Bower سوف يعطيك تعارض لأنه لا يحب الازدواجية (لأن تحميل المورد نفسه على صفحة ويب غير فعال ومكلف للغاية ، كما أنه يمكن أن يعطي بعض الأخطاء الخطيرة). يجب عليك اختيار الإصدار الذي تريد تثبيته يدويًا. يمكن أن يكون لهذا التأثير أن إحدى التبعيات ستتحطم ، ولكن هذا شيء ستحتاج إلى إصلاحه على أي حال.

لذلك ، الاستخدام الشائع هو Bower للحزم التي تريد نشرها على صفحات الويب الخاصة بك (على سبيل المثال وقت التشغيل ، حيث يمكنك تجنب الازدواجية) ، واستخدام npm لأشياء أخرى ، مثل الاختبار ، والبناء ، والتحسين ، والتحقق ، إلخ (على سبيل المثال وقت التطوير ، حيث يكون الازدواجية أقل أهمية).

تحديث لـ npm 3:

npm 3 لا يزال يفعل الأشياء بشكل مختلف بالمقارنة مع Bower. سيتم تثبيت التبعيات على مستوى العالم ، ولكن فقط للنسخة الأولى التي تواجهها. يتم تثبيت الإصدارات الأخرى في الشجرة (الوحدة النمطية الأصل ، ثم node_modules).

  • [node_modules]
    • dep و v1.0
    • dep B v1.0
      • dep و v1.0 (يستخدم إصدار الجذر)
    • dep C v1.0
      • dep A v2.0 (هذا الإصدار يختلف عن الإصدار الجذر ، لذلك سيكون تثبيت متداخل)

لمزيد من المعلومات ، أقترح قراءة مستندات npm 3

354
Justus Romijn

يحتفظ Bower بإصدار واحد من الوحدات ، وهو يحاول فقط مساعدتك في اختيار الإصدار الصحيح/الأفضل لك.

إدارة تبعية جافا سكريبت: npm vs bower vs volo؟

NPM هو الأفضل لوحدات العقدة لأن هناك نظام وحدة وأنت تعمل محليا. Bower مفيد للمتصفح لأنه لا يوجد حاليًا سوى النطاق العام ، وتريد أن تكون انتقائيًا للغاية بشأن الإصدار الذي تعمل به.

45
Sagivf

ابتعد فريقي عن Bower وانتقل إلى npm بسبب:

  • كان الاستخدام البرنامجي مؤلمًا
  • واصلت واجهة باور تغيير
  • بعض الميزات ، مثل اختصار عنوان url ، مقطوعة بالكامل
  • استخدام كل من Bower و npm في نفس المشروع أمر مؤلم
  • الحفاظ على حقل إصدار bower.json متزامنًا مع علامات git أمر مؤلم
  • مصدر التحكم! = إدارة الحزمة
  • دعم CommonJS ليس بسيطًا

لمزيد من التفاصيل ، راجع "لماذا يستخدم فريقي npm بدلاً من كوخ القوة" .

33
Nick Heiner

وجدت هذا التفسير المفيد من http://ng-learn.org/2013/11/Bower-vs-npm/

من ناحية ، تم إنشاء npm لتثبيت الوحدات النمطية المستخدمة في بيئة node.js ، أو أدوات التطوير المصممة باستخدام node.js مثل Karma و lint و minifiers وما إلى ذلك. يمكن لـ npm تثبيت الوحدات النمطية محليًا في مشروع (افتراضيًا في node_modules) أو عالميًا لاستخدامها من قبل مشاريع متعددة. في المشروعات الكبيرة ، تكون طريقة تحديد التبعيات هي عن طريق إنشاء ملف يسمى package.json والذي يحتوي على قائمة التبعيات. يتم التعرف على هذه القائمة بواسطة npm عند تشغيل npm install ، والذي يقوم بعد ذلك بتنزيلها وتثبيتها لك.

من ناحية أخرى ، تم إنشاء كوخ في الريف لإدارة تبعيات الواجهة الأمامية. المكتبات مثل jQuery ، AngularJS ، الشرطة السفلية ، إلخ. على غرار npm ، يوجد به ملف يمكنك من خلاله تحديد قائمة التبعيات تسمى bower.json. في هذه الحالة ، يتم تثبيت تبعيات الواجهة الأمامية الخاصة بك عن طريق تشغيل تثبيت bower الذي يقوم بتثبيتها افتراضيًا في مجلد يسمى bower_components.

كما ترون ، على الرغم من أنهم يؤدون مهمة مماثلة ، إلا أنهم يستهدفون مجموعة مختلفة جدًا من المكتبات.

16
Henry Neo

بالنسبة للعديد من الأشخاص الذين يعملون مع node.js ، تتمثل إحدى المزايا الرئيسية لبرنامج bower في إدارة التبعيات التي ليست javascript على الإطلاق. إذا كانوا يعملون مع لغات تترجم إلى javascript ، فيمكن استخدام npm لإدارة بعض تبعياتهم. ومع ذلك ، ليس كل التبعيات ستكون وحدات node.js. قد يكون لدى بعض الأشخاص الذين يقومون بالتجميع إلى javascript تشويشًا لغويًا خاصًا بلغة المصدر ، مما يجعل تمريرها حولها مترجمًا إلى javascript خيارًا غير مألوف عندما يتوقع المستخدمون شفرة المصدر.

ليس كل شيء في حزمة npm يجب أن يكون javascript يواجه المستخدم ، ولكن بالنسبة لحزم مكتبة npm ، يجب أن يكون بعضها على الأقل.

7
jessopher

Bower و Npm هما مديران لحزم javascript. هناك الكثير من الالتباسات حيث يجب استخدام Bower أو Npm. بعض المشاريع لديها Npm و Bower على حد سواء. هنا ، لقد شرحت حول أغراض هاتين الأداتين وسوف تتعرف على المكان الذي يجب استخدام كوخ الدرع فيه وأين يتم استخدام npm.

Bower

يتم إنشاء Bower فقط لتطوير الواجهة الأمامية ويتم تحسينها مع وضع ذلك في الاعتبار. يستخدم شجرة تبعية مسطحة ، تتطلب إصدار واحد فقط لكل حزمة ، مما يقلل من تحميل الصفحة. ويهدف أساسا إلى الحد الأدنى من عبء الموارد.

يحتوي Bower على ملف تكوين يسمى bower.json. في هذا الملف ، يمكننا الحفاظ على تكوين Bower مثل التبعيات التي نحتاجها وتفاصيل الترخيص والوصف والاسم وما إلى ذلك.

Bower مناسب للحزم الأمامية مثل jquery ، الزاوي ، الرد ، ember ، الضربة القاضية ، العمود الفقري وما إلى ذلك.

Npm (مدير حزمة العقدة)

Npm هو الأكثر شيوعًا يستخدم لإدارة وحدات Node.js ، لكنه يعمل للواجهة الأمامية أيضًا . يستخدم شجرة التبعية المتداخلة ، مما يعني أن التبعيات الخاصة بك يمكن أن يكون لها تبعيات خاصة بها والتي يمكن أن يكون لها تبعات خاصة بها ، وهكذا. تعني شجرة التبعية المتداخلة أن التبعيات الخاصة بك يمكن أن يكون لها تبعيات خاصة بها يمكن أن يكون لها تبعاتها الخاصة ، وهكذا. هذا أمر رائع حقًا على الخادم حيث لا تضطر إلى الاهتمام كثيرًا بالمساحة والكمون.

من الواضح أن هذا لا يعمل بشكل جيد على الواجهة الأمامية ، لأننا نحتاج إلى مسج في مشاريعنا. نحتاج إلى نسخة واحدة فقط من jQuery ، ولكن عندما تتطلب الحزمة الأخرى jQuery ، فستقوم مرة أخرى بتنزيل نسخة أخرى من jQuery. هذا هو واحد من عيوب عيوب Npm .

يحتوي Npm على ملف تكوين يسمى package.json. في هذا الملف ، يمكننا الحفاظ على تكوين Npm مثل التبعيات التي نحتاجها وتفاصيل الترخيص والوصف والاسم وما إلى ذلك. يوفر Npm التبعيات و DevDependencies. التبعيات سيتم تنزيل ملفات الواجهة الأمامية وصيانتها مثل Jquery و Angular وهكذا. DevDependencies سيقوم بتنزيل وصيانة أدوات التطوير مثل Grunt و Gulp و JSHint وما إلى ذلك.

السبب في استخدام العديد من المشاريع على حد سواء هو أنها تستخدم Bower للحزم الأمامية و Npm لأدوات المطور مثل Grunt و Gulp و JSHint وما إلى ذلك

3
Saniya syed qureshi