Grunt, NPM ve Bower arasındaki fark (package.json vs bower.json)


612

Emberjs'de ilk uygulamamı oluşturmak için npm ve bower'ı kullanmakta yeniyim :).
Raylar ile biraz deneyimim var, bu yüzden bağımlılıkları (paket Gemfile gibi) listelemek için dosyalar fikrine aşinayım

Soru: Bir paket eklemek istediğimde (ve git'e bağımlılığı kontrol etmek istediğimde), nereye package.jsonveya içine ait bower.json?

Topladığım şeyden,
çalışma bower installpaketi alır ve /vendordizine koyar ,
çalıştırmak npm installonu alır ve /node_modulesdizine koyar .

Bu SO yanıtı , bower'ın ön uç ve npm'nin arka uç şeyler için olduğunu söylüyor.
Ember-app-kit , ilk bakıştan bu ayrışmaya bağlı gibi görünüyor ... Ancak gruntfile'daki bazı işlevlerin etkinleştirilmesi için talimatlar iki açık komut veriyor, bu yüzden burada tamamen kafam karıştı.

Sezgisel olarak tahmin ediyorum

  1. npm install --save-dev package-name , package-name'i package.json'a eklemekle eşdeğerdir

  2. bower install - kaydetme paket adı paketi bower.json'a eklemek ve bower install'i çalıştırmakla aynı olabilir mi?

Bu durumda, bağımlılıkları yöneten dosyaya (komut satırı araçlarını global olarak yüklemek dışında) eklemeden bu tür paketleri ne zaman açıkça yüklemeliyim?



14
@SindreSorhus Bu tam bir kopya değil. Bu yayında da ek soru var. BTW Downvote'u açıklamak ister misiniz?
sachinjain024

1
Kabul edilen cevabı değiştirdiniz mi? Görünüşe göre 2014'ten son derece yüksek olanı, 2016'dan kabul edilenden oldukça farklı bir şey söylüyor. Ayrıca başka bir yaklaşım önerdiğini açıklıyor, bu yüzden hoşuma gidiyor. Kabul edilmesi (veya yeniden kabul edilmesi) biraz şaşırdı.

1
Evet, kabul edilen cevabı değiştirdim çünkü bir sonraki cevabın çok daha alakalı olduğunu hissediyorum. Sanırım bu ön uç ormanda birçok insan benim kadar kafam karıştı, bu yüzden bu soru beklentilerimin ötesinde popülerlik kazandı ... Ve yine de 2 yıl sonra görüşlerini alıyor. Pawel sayesinde insanların başvurması gereken daha güncel bir cevap var (şu anki işimde web paketini kullanıyorum).
apprenticeDev

Yanıtlar:


154

2016 ortası için güncelleme :

İşler o kadar hızlı değişiyor ki, 2017'nin sonlarında bu cevap artık güncel olmayabilir!

Yeni başlayanlar oluşturma araçları ve iş akışları seçiminde hızla kaybolabilirler, ancak 2016'da en güncel olan şey Bower, Grunt veya Gulp'i hiç kullanmamaktır! Webpack'in yardımıyla her şeyi doğrudan NPM'de yapabilirsiniz!

Beni yanlış anlamayın, insanlar diğer iş akışlarını kullanıyorlar ve hala eski projemde GULP kullanıyorum (ancak yavaşça dışarı çıkıyor), ancak bu iş akışında çalışan en iyi şirketlerde ve geliştiricilerde çok para kazanıyor!

Bu şablona bakın, en iyi ve en son teknolojilerin bir karışımından oluşan çok güncel bir kurulum: https://github.com/coryhouse/react-slingshot

  • webpack
  • Yapı aracı olarak NPM (Gulp, Grunt veya Bower yok)
  • Redux ile tepki ver
  • ESLint
  • liste uzundur. Git ve keşfet!

Sorularınız:

Bir paket eklemek istediğimde (ve git'e bağımlılığı kontrol edeceğim), nereye ait - package.json veya bower.json'a

  • Her şey pakete aittir. Json şimdi

  • Derleme için gereken bağımlılıklar "devDependencies" yani npm install require-dir --save-dev(--save-dev, devDependencies'e bir girdi ekleyerek package.json dosyasını günceller)

  • Çalışma zamanı sırasında uygulamanız için gereken bağımlılıklar "bağımlılıklar" npm install lodash --savedır, yani (--save bağımlılıklara bir girdi ekleyerek package.json dosyasını günceller)

Bu durumda, bağımlılıkları yöneten dosyaya (komut satırı araçlarını global olarak yüklemek dışında) eklemeden bu tür paketleri ne zaman açıkça yüklemeliyim?

Daima . Sadece konfor yüzünden. Bir bayrak ( --save-devveya --save) eklediğinizde deps'i yöneten dosya (package.json) otomatik olarak güncellenir. İçindeki bağımlılıkları elle düzenleyerek zaman kaybetmeyin. İçin kısayol npm install --save-dev package-nameolduğunu npm i -D package-nameve kısayol npm install --save package-nameDİRnpm i -S package-name


6
Cevabınız çok tartışılıyor:> With help of Webpack you can do everything directly in NPM! Bu doğru değil, iş akışında web paketine bile gerek yok
Augustin

26
Bu cevap çok fazla varsayım yapıyor gibi görünüyor. Soru npm ve bower arasındaki farkı sormaktır ve bu cevap bir nedenden dolayı webpack'ten bahsediyor. Evet, webpack bunu yapmanın bir yoludur, ancak bu cevap bunu yapmanın tek ve doğru yolu gibi görünmesini sağlamaktır. Örneğin, birisi Polymer 1.x ile çalışıyorsa, standart iş akışı bower kullanacaktır ve webpack için fazla destek yoktur.
John Powers

1
Cevap aslında konuyla ilgilidir, ancak argüman gerçekten verilmez: "ama bu böyle yapılır" - şey, sadece görünüşte yapılması gerektiği (yani başkaları tarafından yapıldığı) için hiçbir şey yapılmamalıdır. Paranın iş akışının gerekçesi ile ilgisi yoktur.
forsberg

3
2017 yılında bu yanıta bakıyoruz. Belgelere gitmek: "webpack v1 kullanımdan kaldırıldı. Tüm geliştiricilerin webpack 2'ye geçmelerini öneriyoruz. Daha fazla bilgi için geçiş kılavuzumuzu izleyin veya webpack 2 belgelerine bakın." Haha klasik web geliştirme.
user643011

1
@ user643011 Geçiş kılavuzuna baktığınızda, yapılandırmaların çoğunun aynı kaldığını ve geri kalanının yapılandırma yapısındaki kozmetik değişiklikler olduğunu fark edeceksiniz.
Pawel

576

Npm ve Bower'ın her ikisi de bağımlılık yönetimi araçlarıdır. Ancak her ikisi arasındaki temel fark, npm düğüm modüllerini kurmak için kullanılır, ancak bower js, html, css, js vb . Gibi ön uç bileşenlerini yönetmek için kullanılır .

Bunu daha kafa karıştırıcı yapan bir gerçek, npm'nin ön uç geliştirmede gruntve benzeri gibi kullanılabilecek bazı paketler sağlamasıdır jshint.

Bu çizgiler daha fazla anlam katıyor

Bower, npm'den farklı olarak, ana dosyalar olarak kabul edilen birden fazla dosyaya (ör. .Js, .css, .html, .png, .ttf) sahip olabilir. Bower semantik olarak bu ana dosyaları, birlikte paketlendiğinde bir bileşen olarak görür.

Düzenleme : Grunt Npm ve Bower'dan oldukça farklı. Grunt bir javascript görev koşucu aracıdır. Manuel olarak yapmak zorunda olduğunuz homurdanmayı kullanarak birçok şey yapabilirsiniz. Grunt'un bazı kullanımlarını vurgulamak:

  1. Bazı dosyaları sıkıştırma (örn. Zipup eklentisi)
  2. JS dosyalarında linting (jshint)
  3. Daha az dosya derleme (daha az katkıda bulunma)

Sass derlemesi, javascriptinizi çirkinleştirmek, dosyaları / klasörleri kopyalamak, javascript'i küçültmek için grunt eklentileri vardır.

Grunt eklentisinin de bir npm paketi olduğunu lütfen unutmayın.

Soru 1

Bir paket eklemek istediğimde (ve git'e bağımlılığı kontrol edeceğim), nereye ait - package.json veya bower.json'a

Bu paketin nereye ait olduğuna gerçekten bağlı. Eğer bir düğüm modülü ise (homurdanma, istek gibi), o zaman paketin içine girecektir.

Soru 2

Bağımlılıkları yöneten dosyaya eklemeden paketleri böyle bir şekilde ne zaman yüklemeliyim

Paketleri açıkça yükleyip yüklemediğiniz veya .json dosyasındaki bağımlılıktan bahsetmeniz önemli değildir. Bir düğüm projesi üzerinde çalışmanın ortasında olduğunuzu ve başka bir projeye ihtiyacınız olduğunu varsayalım, diyelim requestki iki seçeneğiniz var:

  • Package.json dosyasını düzenleyin ve 'request' öğesine bağımlılık ekleyin
  • npm kurulumu

VEYA

  • Komut satırını kullan: npm install --save request

--saveoptions, package.json dosyasına da bağımlılığı ekler. --saveSeçeneği belirtmezseniz , yalnızca paketi indirir, ancak json dosyası bundan etkilenmez.

Bunu her iki şekilde de yapabilirsiniz, önemli bir fark olmayacaktır.


3
Açıklık için ve makale için teşekkürler! Anlayışlı ve farkı açıklığa kavuşturur (bu, bağımlılıkları nereye koyacağınıza karar vermenize yardımcı olacaktır). Belki birileri son soruya cevap verirse bekleyeceğim (yeniden: paketleri ne zaman tek tek kurmak isterim) ve cevabınızı daha sonra kabul ediyorum :)
apprenticeDev

1
Npm ile ilgili olarak, NodeJS modülleri için bir paket yöneticisi olabilir, ancak sadece NodeJS için özel olmadığını görüyoruz. npm, istemci tarafı bağımlılıklarını yönetmek kadar etkilidir. Örn: dontkry.com/posts/code/using-npm-on-the-client-side.html
Matt Smith

15
Bu npm ne yapamaz?
Adam Soffer

1
JQuery eklenti deposunun ( plugins.jquery.com ) npm ile değiştirildiğini unutmayın.
thdoan

2
en son hızlı başlangıç ​​açılı 2 (RC) öğreticisi ve git seed, npmnpm ve bower kullanan v1 öğreticisinin aksine yalnızca kullanır . Gerçekten, (a) package.jsonsürdürülmesi gereken tek şey, (b) tek bir astarda bağımlılıkları özyinelemeli olarak hesapladığı npm installve (c) bir sorun olduğunda node_modulesklasörü silmeniz ve npm yüklemesini çalıştırmanız gerektiği gerçeğini seviyorum. tekrar.
Sebas
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.