2011-10-23 18 views
9

Temel başlatma komutum için require() işlevini ve bağımlılıklardan biri de yardımcı programlar çerçevesidir, ancak gereksinim duyduğum diğer modüllerden bazıları () ayrıca bu çerçeveyi bir bağımlılık olarak tanımladılar.AMD (özellikle RequireJs), çoklu modüller arasında bağımlılıkları nasıl ele alır

Örneğin

(init.js):

require(['module-a', 'module-b', 'module-c'], function(a, b, c){ 
    // where module-c is the framework 
}); 

Sonra 'modülü-a' Ben de:

define(['module-c'], function(c){ 
    // utilize module-c framework 
}); 

Yani AMD/RequireJs Bu senaryo nasıl oluyor, bu yükü vermez Aynı çerçeve iki kez mi?

Herhangi bir yardım için teşekkür ederiz. Yukarıdaki modüller

Saygılarımızla, Marka

cevap

6

Sadece bir kez yüklenecek, hem 'modül c' için aynı modül değerini alır.

+0

çok teşekkürler teyit için! Tam da öyle olacağını umuyordum, çünkü aklımda her modül içindeki bağımlılığı belirtmek, bu modülü alabileceğim ve başka bir yerde tamamen farklı bir projede yeniden kullanabileceğim anlamına geldiğinden daha mantıklıydı. – Integralist

+1

Dahili olarak, AMD yükleyici tüm modülleri (yani, önbellekleri) izler.Modüller birlikte optimize edildiğinde/birleştirildiğinde, bu ilginç değildir. Bununla birlikte, modüllerden herhangi biri tam zamanında yüklenirse, AMD yükleyicisinin _requests_ dosyasını izlediğini ve iki eşzamanlı isteğin aynı modülü birden fazla kez indirmeyi denemediğini unutmayın. – unscriptable

2

Örtmek onun kullanışlı başkalarına - İşte bir modül iki kez yüklendi nereye geldi bir durum: Aşağıdaki proje yapısı için

:

~/prj/js/app/fileA.js 
~/prj/js/app/util/fileB.js 
~/prj/js/ext/publisher.js 

RequireJs baseurl~/prj/js/app

olduğunu fileA.js, dış (dışa) bağımlılığı publisher.js olarak belirtir:

//fileA: 
define(['../ext/publisher'], function(){}); 

Ancak fileB.js farklı bir yol ile aynı bağımlılık düzeyine gelir: bağımlılığın aynı konumda olmasına rağmen Kısaca

//fileB: 
define(['../../ext/publisher'], function(){}); 

, her bir dosya için, bağımlılık yollar farklıdır. Bu durumda, publisher.js iki kez yüklenir.

Kullanım Firebug'ın Net sekme iki kez yükleme görmek için:

Bu kolayca (require_js docs açıklandığı gibi) dış klasör yolunu yapılandırmak için paths kullanılarak sabitlenir dependency.js being loaded twice (firebug)

:

requirejs.config({ 
    paths: {ext: '../ext'} 
}); 

paths'u ayarladıktan sonra, bağımlılık her ikisi de aynı bağımlılık yolunu kullanarak fileA.js ve fileB.js ile bir kez yüklenir. aşağıdaki gibidir:

//fileA: 
define(['ext/publisher'], function(){}); 

ve

//fileB: 
define(['ext/publisher'], function(){}); 
İlgili konular