JavaScript bağımlılık yönetimi: npm vs. bower vs volo [kapalı]


160

Nasıl benzerlikler nelerdir npm, bowerve volo?

Her üçü de bir UI projesi için JavaScript bağımlılıklarını yüklemek için kullanılabilir. Daha npmfazla düğüme özgü olduğunu anlıyorum .

Peki, ne zaman kullanılır?

npmHala uzak duruyor, ama bowerve voloben arasında bir çizgi çizmek mümkün değilim rağmen, tam olarak aynı problem çözme gibi görünüyor npmve bower-volo.



1
Bu soruyu burada okuyorsanız ve 2015'ten bir yanıt almak istiyorsanız, güncellenmiş yanıtımı inceleyin.
gustavohenke

Yanıtlar:


104

Npm ve bower arasındaki farkı en iyi açıklayan bir açıklama şöyledir: npm, paket adı verilen JavaScript modüllerini yönetir ve Bower, bileşen adı verilen ön uç bileşenleri (yani css, html ve JavaScript) yönetir. npm ayrıca bower'ı kurmak için de kullanılır. İşte npm ve bower ( volo'yu kapsamaz) hakkında geniş bir makale, bol miktarda ayrıntıya giriyor.


88
Bu çok iyi bir açıklama değil. Npm kesinlikle ön uç bileşenleri takmak için kullanılabilir.
BT

Her ne kadar npm üzerinde bazı "ön uç" kütüphaneleri kendi bower meslektaşları lehine terk edildi fark ettim. Örneğin bir yıl içinde yayınlanmamış Ember'i ele alalım .
briangonzalez

4
@Nate İsim basitçe başladığı yerdir. NPM artık çok genel amaçlı bir paket yönetim sistemidir. Ön uç modülleri takmak için düzenli olarak npm kullanıyorum. Amd vs vs ortak modül modülleri için NPM kullanımında hiçbir fark yoktur. Javascript olmayan modüller için de npm kullanabilirsiniz. Bu nedenle, bu npm ve bower arasındaki fark değildir. Onlara paketler veya bileşenler diyelim, ikisi de rastgele dosya koleksiyonları olmaları bakımından aynıdır.
BT

2
Bu, bower'ın html, css ve javascript ile uğraşmak için hiçbir politikası olmadığını düşünerek çok yanıltıcı bir cevaptır. npm'nin, npm'deki hemen hemen her şeyin en azından ortakları ve bazen de diğer formatları desteklemek için yazılması dışında hiçbir politikası yoktur. Tıpkı bower ile olduğu gibi npm paketlerine html ve css koyabilirsiniz. Npm'de, css ve html içeren paketler de dahil olmak üzere, yalnızca ön uçta birçok paket vardır.
substack

3
Browserify kullanıyorsanız , npm mükemmel bir paket yöneticisidir. Hangi paket yöneticisini kullandığınızın önemli olduğunu düşünmüyorum, ancak kişisel olarak her proje için bir tanesine bağlı kalıyorum.
Eruant

72

kameriye

Çok az özelliğe sahip olmasına rağmen, ön uç geliştiriciler arasında hala çok popüler. Her ön uç paketi kullanıyor. Bower'ı npm ile birleştirmek için bir girişim de var .

Bower istemci tarafı için optimize edilmiştir ve yalnızca düz bağımlılık ağaçlarını destekler, yani her kitaplık yalnızca bir kez kullanılmalıdır (aynı kitaplığın farklı sürümlerini istemciye gönderilmesi pahalı olduğundan) ve bağımlılık kısıtlamaları kullanıcı tarafından çözülmelidir .

Bower kayıt defterinde ( bower search <some keyword>) ön uçla ilgili herhangi bir şey bulmayı bekleyebilirsiniz - bence, bower'ın diğer paket yöneticilerine göre en büyük avantajı budur.

volo

Yıllar boyunca hala 5 dakikadan fazla kullanmadım. Bilmiyorum, ama görebildiğim kadarıyla Grunt kullanıcıları için çok tanıdık olan bazı oluşturma aracı içeriyor.

npm

Evet, npm, Düğüm Paketi Yöneticisi anlamına gelir. Ancak günümüzde her şey için kullanabilirsiniz; insanlar artık sadece npm installbir şeyler yapmıyor ve sadece Düğüm ortamında çalışmalarını bekliyorlar . Örneğin, Twitter Bootstrap için birçok npm paketi var .

Npm, iç içe bağımlı bir ağaç ile sunucu tarafında kullanım için optimize edilmiştir. Her bağımlılığın kendine has bağımlılıkları olabilir vb. Bu bağımlılık sürümü çakışması ortadan kalktı çünkü her bağımlılık kendi Underscore sürümünü kullanabilir. Ancak, yaklaşan npm sürüm 3 bağımlılık ağacını düzleştirecektir :

Npm @ 3 ile node_modules dizininiz çok daha düz olacaktır. Tüm bağımlılıklarınız ve alt bağımlılıklarınızın çoğu (ve (alt) + bağımlılıklar) en üst düzeyde yan yana olacak. Sadece çakışmalar olduğunda modüller daha derin seviyelere kurulacaktır. Bu, Windows kullanıcıları için işleri daha kolay hale getirmelidir.

Npm kullanımında gördüğüm bazı avantajlar:

  • Diğer tüm paket yöneticileri tarafından kullanılır (bileşen, bower, volo, JSPM, vb.);
  • Derleme komut dosyalarının kullanılmasına izin verir;
  • Npm tabanlı paketlerin introspeksiyonu için birçok araç mevcuttur

npm, JavaScript paket yöneticisidir.

npmjs.com ekran görüntüsü


2013 şubat ayı itibariyle benim görüşüm şuydu. Lütfen artık dikkate almayın.

npm

Bir Node projesi ile uğraşmak daha iyidir, tarayıcılar için de çok az proje vardır ...

kameriye

Bower şu anda pop adamı. Kaputlarının altında birçok proje var ve proje yöneticileri onları bower sicilinde güncel tutmak istiyorlar ...

Bazen biraz arabası olması utanç verici.

volo

O zamandan beri volo'yu 5 dakikadan fazla denemedim, ama görebildiğim kadarıyla bower'dan daha esnek görünüyor.

Volo için olumsuz bir nokta, projelerinin çok eski olmasıdır.


19
Npm'de sadece tarayıcılarda çalışan ya da hem düğümde hem de tarayıcılarda çalışan binlerce modül vardır. Birçoğunda, tam olarak hangi tarayıcılarda çalıştıklarını söyleyen ci rozetleri bile var. Bower et'teki çoğu şey muhtemelen npm'de.
13'te

Zaten kurulum için npm bağlıdır iken ngBoilerplate gibi bower kullanmak için proje ihtiyacını anlamıyorum
lolski

5
"Pop adam" nedir? "Pop" kısaltmasıdır. "popüler" için?
Bryan Oakley

4
Senin ekran görüntüsünde npm nükleer planlama kılavuzu duruyor;)
Jim Jones

24

Aynı sorunu farklı ortamlar / dünyalar için çözüyor gibi görünüyorlar. Düğümler ve volo için NPM, tarayıcı için destek.

Gerçek şu ki, tarayıcı için javascript ve css'i yönetmek için NPM'yi de kullanabilirsiniz. Bunu yapmanı engelleyen hiçbir şey yok. Bu anlamda NPM kullanmak, aynı amaç için iki farklı aracı yönetmekten daha doğal geliyor.

Bower'ın en azından daha popüler olanlar için daha fazla paketi var gibi görünüyor. Ama yakında jQuery doğrudan NPM'de de mevcut olacak ve muhtemelen tüm diğer kütüphaneler aynı eğilimi takip edecek.

Bence, tarayıcıda düğüm modülleri kullanmaya yardımcı olan browserify ve webmake gibi araçlar olduğundan, sizin için başka bir şey sunmadıkça (sadece belirli bir modül mevcut değilse) artık bower veya volo'ya gerçek bir ihtiyaç yoktur . kayıtları).

Hem Volo hem de Bower da iyidir, ancak benim bakış açımdan, zaten NPM kullanıyorsanız, buna bağlı kalmak daha iyi olabilir.

Lütfen, browserify veya webmake kullanmadan bile istemci bağımlılıklarınızı yönetmek için NPM'yi kullanabileceğinizi unutmayın . Üzerinde çalıştığım projelerin çoğunda, npm modülleri kurulduktan sonra, bunları istemci uygulamamın kullandığı yere dağıtmak için bir komut dosyası çalıştırıyorum. Bazen bu dosyayı diğer js dosyalarıyla birleştirmek için grunt kullanıyorum ve bazen doğrudan web uygulamalarımın şablon dosyalarından referans alıyorum. Her durumda, bu kişisel bir tercihtir. Diğerleri, iş akışlarında daha doğal olduklarından Bower veya Volo'yu kullanmayı daha kolay bulabilirler.


1
Aynı sorun için rakip çözümlere sahip olmak iyidir. yeomanProjenin neden yeni bir paket yöneticisi bulmayı seçtiğine dair bir fikrin var npmmı? (Olgun, ünlü ve zengin özelliklere sahipti) Bu düşünce beni hala asıl noktayı kaçırdığımı hissettiriyor.
Yugal Jindle

1
Aslında değil, ama dediğin gibi, sadece yapabileceğiniz için bazı zamanlar tekerleği yeniden icat etmek komiktir ve bazen bunu yaparak aynı sorunu çözmeye çalışırken bazı iyileştirmeler yapılır. Gerçekten neden yeni bir tane yapmayı seçtikleri değil, geliştiricilerin paketleri bulmasını kolaylaştırmak. Tüm ön uç geliştiricilerin düğüm deneyimi yoktur, sanırım Bower gibi projelerin arkasındaki ana sebep budur. Düğüm olmayan kullanıcıları kolaylaştırmayı deneyin, sadece burada tahmin ediyorum.
roy riojas

Sanırım onlar npmön uç sadeliği lehine güçlük ayırmak istediler . Bu yüzden ön uç gelişimi için.
Yugal Jindle

15

Bower'ın NPM'ye göre en büyük avantajı, bağımlılık yönetiminin bir bileşenin tek bir versiyonunu kullanmasıdır (oysa NPM, farklı modüllerin alt bağımlılıkları olarak farklı kopyalara / versiyonlara sahip olarak çalışır). Bu, ÇOK İYİ BİR ŞEYDİR çünkü farklı sürümlerde bir bileşenin birden çok kopyasını içermek suretiyle istemci tarafı javascriptinizin şişirilmesini önler. Bir modülün birden fazla kopyasını dahil etmek, NPM'nin bağımlılık yönetiminin nasıl çalıştığının merkezinde yer alır ve bu nedenle NPM, istemci tarafı paket yönetimine tamamen uygun değildir.

Yukarıdakilerin bir sonucu, güçlendirici paket koruyucular ve tüketicilerin, çatışmaları önlemek için bağımlılık sürüm numaralarını koruma konusunda daha dikkatli olmaları gerektiğidir, ancak bu ödemeye değer bir fiyattır. NPM modüllerinin büyük, küçük ve yama sürümlerini yayınlamalarında genellikle özensiz olduğunu görüyorum, bu nedenle NPM bağımlılık yönetimi de tam olarak bir gül yatağı değil.


3
Bu, yalnızca ön uç kodunuzu doğrudan paket yöneticisinin bu dosyaları koyduğu klasörden sunuyorsanız geçerlidir. Benim durumumda ya daha az / js dosyalarını işlemek için komut dosyası var ya da bu dosyalardan bir paket oluşturmak için browserify. Yani bu benim durumumda büyük bir sorun değil. Dağıtılan kod her zaman doğru sürümlere sahiptir, diğer alt bileşenler geliştirme sırasında çoğaltılmış olsa bile asla üretime geçemezler.
roy riojas

yanlışlıkla (bağımlılıklar olarak) aynı bağımlılığın iki farklı sürümünü isteseniz bile? Sanırım bu durumda yanılıyorsunuz
wheresrhys

Genellikle kontrol etmediğim modüllere ihtiyaç duymuyorum, bu yüzden her zaman doğru olanları olacaklar ... yanlışlıkla bir modül yalpalanmış modüllerden belirli bir modülü gerektirmeye çalışırsa yapı başarısız olur. Benim durumumda bower kullanmanın bir anlamı yok faydası yok
roy riojas

Bu nedenle npm'nin, ancak tüm bağımlılık ağacınızın kontrolüne sahipseniz, istemci tarafı kodunuzdaki modüllerin çoğaltılmasını önlemek için güvenli bir şekilde söylenebilir. Bu kesinlikle üzerinde çalıştığım şeylerin büyük çoğunluğunda geçerli değil ve muhtemelen istemci tarafı modüllerini dahil etmek için bir bağımlılık yöneticisi kullanan çoğu proje için geçerli değil.
wheresrhys

1
Mashup'lar üzerinde çalışmadığınız sürece, bağımlılık ağacınız en azından üçüncü taraf kodu için bu kadar karmaşık olmayacaktır. Çoğu js kütüphanesi tek bir global dışa aktarır, bu yüzden browserify-shim kullanarak bunları global kapsamdan kullanabileceğinizden emin olabilirsiniz, böylece her zaman kontrol ettiğiniz bir sürümdür. Demek istediğim, sahip olduğunuzdan başka bir paket yöneticisine ihtiyaç duymadan aynı şeyi başarabilirsiniz. Sonunda bir tercih meselesi olabilir. Her zaman taviz verilmelidir.
roy riojas

5

Bunun sorunun kapsamı dışında olduğunu biliyorum ama başka bir alternatif daha var. Jam JS - http://jamjs.org/ İlginç bir şey, reçelde homurdanma yeteneklerine sahip olmasıdır:

jam compile output.js

Birisi başka bir paket yöneticisi yapmalı ve adını vermeli: yapm :)



1
Peki ben tarayıcı tarafı bağımlılığı yöneticisi için düşünüyordum ama her ikisi için de bu işi sanırım: p Bu yüzden başlangıç ​​yapamıyorum, tüm fikirlerim zaten düşünülmüştü.
Bruce Lim

@BruceLim evet, her zaman iyi bir fikrimiz olduğunu düşündüğümüzde, bunu zaten yapan başka insanlar da vardır.
Evan Hu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.