SORU
18 EYLÜL 2013, ÇARŞAMBA


'bağımlılıkları arasındaki fark ne etmesinin önünü paketinde devDependencies ve peerDependencies.dosya json?

This documentation çok kötü bir cevap. Bu açıklamalar anlamadım. Birisi basit bir deyişle diyebilir mi? Eğer sabit basit kelimeleri seçmek için örnekler olabilir mi?

EDİTayrıca ekledi yakından ilişkilidir ve karışıklığa neden olabilir peerDependencies,.

CEVAP
25 ŞUBAT 2014, Salı


Önemli davranış farklılıkları özeti:

  • dependencies üzerinde yüklü

    • package.json içeren bir dizinden npm install
    • Başka bir dizinde npm install $package
  • *55:*

    • ayrıca --production bayrak geçmeden package.json içeren bir dizinde npm install yüklü (Gayan Charith's answer upvote)
    • yüklü değil --dev seçeneği vermedikçe 15 ** başka bir dizin.
  • peerDependencies:

    • hep eksik eğer yüklü ise ve bağımlılık birden çok uyumsuz sürümleri farklı bağımlılıkları tarafından kullanılacaktır eğer bir hata yükseltmek. 3.0 önce:
    • expected starting on 3.0 () denenmemiş: npm install, eksik ve bağımlılık kendini çözmek için el ile yapmanız gerekir. Eğer bir uyarı ver Çalışırken, eğer bağımlılık yoksa, bir hata alıyorum (@nextgentech ile belirtilen)

Ayrıca şu soru üzerinde tartışılan bundledDependencies var: Advantages of bundledDependencies over normal dependencies in NPM

devDependencies

dependencies, devDependencies sadece geliştirmek için çalıştırmak için gereklidir, örneğin: ünite testleri, transpilation Javascript Coffeescript, minification, ...

Eğer bir paket geliştirmek için gidiyoruz eğer, ** 23 ve çalıştırın içeren (git clone ile örneğin) indir, kökünden gidin:

npm install

Beri var asıl kaynağı, temiz istediğin için geliştirmek, böylece varsayılan olarak, her iki dependencies (bu yana da ders çalıştırmak için geliştirmek) ve devDependency bağımlılıklar da yüklü.

Ancak sadece kullanmak için bir paket yüklemek isteyen bir son kullanıcı iseniz, herhangi bir dizinden yapacaksın:

npm install "$package"

Sadece paketi kullanmak için gerekli olduğunu, bu yüzden bu durumda, normal gelişim bağımlılıklar istemiyorum,: dependencies.

Eğer gerçekten bu durumda geliştirme paketlerini yüklemek istiyorsanız, true komut satırı olarak, muhtemelen dev yapılandırma seçeneği ayarlayabilirsiniz:

npm install "$package" --dev

Seçenek bu kadar az görülen bir durum olduğu için varsayılan olarak false.

peerDependencies

(3.0 daha önce denenmiş)

Kaynak: http://blog.nodejs.org/2013/02/07/peer-dependencies/

Düzenli bağımlılıklar, bağımlılık birden çok sürümü olabilir: bu sadece bağımlılık node_modules içinde yüklü.

E. g. dependency1 dependency2 iki farklı versiyonu dependency3 bağlı eğer proje ağacı gibi görünecektir:

root/node_modules/
                 |
                  - dependency1/node_modules/
                 |                          |
                 |                           - dependency3 v1.0/
                 |
                 |
                  - dependency2/node_modules/
                                            |
                                             - dependency3 v2.0/

Eklentileri ancak normal olarak adlandırılan diğer paketi, gerekmeyen paketleranabu bağlamda. Bunun yerine:

  • eklentileri gereklidirev sahibi tarafından
  • plugins host bulmak için bekliyor standart bir arayüz sunar
  • yalnızca ana bilgisayar, tek bir sürüm olmalı yani doğrudan kullanıcı tarafından çağrılır.

E. g. dependency1 dependency2dependency3 proje ağaca bağlı gibi görünecektir:

root/node_modules/
                 |
                  - dependency1/
                 |
                  - dependency2/
                 |
                  - dependency3 v1.0/

Bu asla package.json dosyasında dependency3 söz olsa olur.

Bu Inversion of Control tasarım deseni bir örnek olduğunu düşünüyorum.

Eş bağımlılıkları prototip bir örnek, Homurtu, ana ve eklentileri.

https://github.com/gruntjs/grunt-contrib-uglify, Homurtu gibi bir eklenti örneğin, göreceksiniz:

  • grunt peerDependency
  • tests/ altında require('grunt') tek: aslında program tarafından kullanılmıyor.

Sonra, ne zaman kullanıcı kullanacak bir eklenti olacak örtülü olarak gerekli eklenti Gruntfile ekleme grunt.loadNpmTasks('grunt-contrib-uglify') çizgi, ama grunt kullanıcı ara direk.

Bu ise her eklenti farklı bir Homurtu bir sürümü gerekiyorsa, o zaman işe yaramaz.

Manuel

Doktor oldukça iyi sorunu cevaplar sanırım, belki de düğüm / diğer paket yöneticileri ile sadece tanıdık yeterli değildir. Ben büyük ihtimalle sadece Yakut toplayıcı hakkında biraz biliyorum, çünkü onu anlıyorum.

Anahtar hattı

Bunları etmesinin önünü yapıyor ya da bir paket kök bağlantı etmesinin önünü yükleyin ve başka etmesinin önünü yapılandırma param gibi yönetilebilir ne zaman yüklenecek. Bakın etmesinin önünü-config(7) bu konu hakkında daha fazla için.

Ve sonra etmesinin önünü-config(7) altında dev bul:

Default: false
Type: Boolean

Install dev-dependencies along with packages.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bryan Smith

    Bryan Smith

    12 Mart 2006
  • Sergio Lafuente Rubio

    Sergio Lafue

    11 Aralık 2008
  • SPBedition

    SPBedition

    24 HAZİRAN 2013