2012-12-04 16 views
6

başlatılamıyor Basit bir gereksinim projem var, düğüm kullanarak bir dosyaya optimize etmeye çalışıyorum. Proje yapısı öyle.RequireJs Optimize Edici, bir dosyaya küçültürebilir, ancak ana başlatılmamış

 

|___index.html 
| 
├───css 
│  style.css 
│ 
└───scripts 
    │ main.js 
    │ 
    ├───lib 
    │  require.js 
    │  underscore.js 
    │ 
    └───modules 
      module1.js 
      module2.js 
      module3.js 

burada proje dosyası dışında r.js ve build.js ile benim yapı dosyası

//build.js 
({ 
    baseUrl: "./SimpleRequireJsProject/scripts", 
    name:"main", 
    out:"main-built.js" 
}) 

olduğunu. Düğüm konsolunu kullanarak eniyileyiciyi çalıştırdım.

node r.js -o build.js 

Her şey iyi çalışıyor. ana-built.js çıkışı oluşturulur. Ben dizin dosyasını çalıştırdığınızda Ama ben

<script data-main="scripts/main-built" src="scripts/lib/require.js"></script> 

ile

<script data-main="scripts/main" src="scripts/lib/require.js"></script> 

değiştirdiğinizde. Hata yok ama çıktı yok. Konsol mesajlarını böyle bekliyorum. Ana

 
//output 
main started 
m1 started 
m2 started..starting m3 from m2 
m3 started 

Lütfen olarak orijinal veri-main ile çalışır proje çalışmaz ve hiçbir hata yanı yoktur bana neden edinmesine yardımcı olur. :(

//main.js 
    define([ 
     'lib/underscore', 
     'modules/module1', 
     'modules/module2' 
    ], 
     function (_, Module1, Module2) { 
      console.log('main started'); 
      var module1 = new Module1(); 
      var module2 = new Module2(); 
      module1.start(); 
      module2.start(); 
     }); 


    //module1.js 
    define(['lib/underscore'], 
     function (_) { 
      function Module1() { 
       this.start = function() { 
        console.log('m1 started'); 

       }; 
      } 

      return Module1; 
     }); 

    //module2.js 
    define(['lib/underscore', 'modules/module3'], 
     function (_, Module3) { 
      function Module2() { 
       this.start = function() { 
        console.log('m2 started..starting m3 from m2'); 

        var module3 = new Module3(); 
        module3.start(); 

       }; 
      } 

      return Module2; 
     }); 

    //module3 
    define([ 
     'underscore'], 
     function (_) { 
      function Module3() { 
       this.start = function() { 
        console.log('m3 started'); 
       }; 
      } 

      return Module3; 
     }); 


    //index.html 

    <!DOCTYPE html> 
    <html> 
    <head> 
     <link href="css/style.css" rel="stylesheet" type="text/css"> 
     <title></title> 
    </head> 

    <body> 
    <div id="main"></div> 
    <script data-main="scripts/main-built" src="scripts/lib/require.js"></script> 
    </body> 
    </html> 

cevap

4

benim sorunu buldum. 'ana-built.js' 'main.js' veya olmak zorunda modül adı değiştirilebilir için gereken ana yerleşik 'olarak 'ana' main-built '.

+0

Doğru

node r.js -o build.js 

sonra, sadece aynı sorun var belirtilmektedir. Ama bu bir sorundur, çünkü dosya adında parmak izi (önbellek bozma) eklerseniz, yüklenmez! –

4

Modül adını (bizim durumumuzda portal/main) dosya adıyla aynı (portal/main.js) yapamazsanız, iki fikir daha vardır:

  • Modül adını, startup define() çağrısından tamamen kaldırın. Bu, varsayılan giriş noktası f'yi yapar. veya belge. Burada sorun, optimizatörün komut satırı argümanlarının kullanılmasına bağlı olarak "ve" nin kullanımı konusunda tutarlı olmamasıdır.

  • Gereksinim gibi bir şey ekleyin (["başlangıç ​​modülü adı"]) yapılı dosyası. Bu komut dosyası yüklendiğinde hemen yürütmek ve beğeninize birinci modülüne arayacak. Bu yapı komut dosyası içine otomatik hale getirmek gerçekten kolay olduğu ortaya çıktı ve bizim için sorun giderildi.

+0

İkinci seçeneğinizle gideceğiz. Modül çok yakında çalışmayı bıraktığından, oluşturulan dosyanın adına bir SHA ekledik (önbellek bozma gibi). AMD modülleri şaşırtıcı, ancak Require.JS yaşayan bir cehennem! –

0

itibaren Thupten'in çözümü, main-built.js'deki bu değişimi otomatik hale getirmenin bir yolu, bunu komut satırından çalıştırmaktır:

koşmak

sed -i -- 's/define("main/define("main-built/g' main/js/Main.min.js 
İlgili konular