2013-03-31 23 views
7

'e bağımlı olmayan tek bir js dosyasına birkaç dosyayı birleştirmek Çok fazla kod içeren jQuery eklentisi yazıyorum. Bu yüzden kodu ayırıp benim için (geliştirici) daha modüler hale getirmeye karar verdim. Bunun için require.js'yi kullanıyorum.requirejs - requirejs

  1. utils.js
  2. baz row.jas
  3. bir-row.js
  4. b- row.js
  5. my-table.js:
    Şimdi 6 js dosyaları var
  6. main.js
5'e

Dosyalar 1 JavaScript "sınıfları" tanımlanmakta ve bunların arasındaki dependecies var kendilerini. Tüm konseri çalıştıran "birincil" sınıf, my-table.js. main.js sadece benim-table.js bağımlılığı vardır ve ondan bir eklenti oluşturur: jQuery hariç (O dosyalardan herhangi bağımlılık olmadan tüm 6 dosyalarını içeren bir büyük js dosyası oluşturmak istiyorum Şimdi

require([ 
    'my-table' 
], function(MyTable) { 
    jQuery.fn.myTable = function(options) { 
     var table = new MyTable(this, options); 
     this.data('myTable', table); 
     return this; 
    }; 
}); 

Kullanıcının buna başvurması gerekir). Bunun için r.js'yi (http://requirejs.org/docs/optimization.html) kullandım ve sonuç olarak require.js'ye bağlı büyük bir js dosyası aldım (tanımlamak ve tanımlamak için çağrıları içerir). Bunu takip ettim: http://requirejs.org/docs/faq-optimization.html#wrap ve tüm dosyalarımı require.js'ye bağımlı olmayan kullanım için birleştirmek için almond.js'yi kullandım. Bu iyi çalışıyor.
Sorun şu ki, tüm tanım ve gereksinim yöntem çağrılarına ve almond.js'ye ihtiyacım var mı? Böyle: iyileştirici (Why do concatenated RequireJS AMD modules need a loader? bu soruya tarif edildiği üzere): Sadece fonksiyon sonuçları bitiştirmek olamazdı Neden Bu sürecin bir sonucu olarak

(function() { 
    var utils = «function() { 
     .... 
     return Utils; 
    }»(); 
    var baseRow = «function(A) { 
     .... 
     return BaseRow; 
    }»(utils); 
    .... 
    .... 
    var myTable = ..... 

    //<--This is require call and therefore doesn't return a thing 
    (function(MyTable) { 
     jQuery.fn.myTable = function(options) { 
      var table = new MyTable(this, options); 
      this.data('myTable', table); 
      return this; 
     }; 
    })(myTable); 
})(); 

, eşyaları kontrol kararı ve elle tüm dosyaları birleştirilerek bir minified dosya. Ben 3k daha küçük bir dosya daha sonra badem sürümü ile sona!
r.js iyileştiricisinin arkasındaki mantığı need.js bağımlı sonucunu oluşturamıyorum. Benim durumumda, hiç kimse dosyaları kullanmamalı, birincil js dosyam tek tüketici. Ne düşünüyorsun?

cevap

0

komut optimize edilmiştir sonra bile hala bir modül yükleyici gerektirecektir iç içe geçmiş bir require veya define çağrı olabileceğini anlamı optimizer içinde seçeneği "sahte" dir findNestedDependencies, varsayılan değeri. Harici bağımlılıklar için bir yükleyici de gereklidir.

Ancak, FindNestedDependencies öğesinin "true" olarak ayarlanması ve harici bağımlılıkların projenin bir parçası olması durumunda, optimize edicinin bir yükleyiciye olan gereksinimini kaldırabileceğini kabul ediyorum.

-1

Sadece dosyada gerekli olan dosyaları ekleyebilirsiniz. Bunu bir getScript çağrısı ile yapabilirsiniz.

$.getScript("my_lovely_script.js", function(){ 

    //whatever you want here. 

}); 
İlgili konular