2012-12-04 6 views
6

शुरू नहीं करता है मेरे पास एक साधारण आवश्यकता है प्रोजेक्ट है कि मैं नोड का उपयोग करके एक फ़ाइल को अनुकूलित करने का प्रयास कर रहा हूं। परियोजना संरचना इस तरह है।RequJs Optimizer एक फ़ाइल को कम करता है लेकिन मुख्य निर्मित

 

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

यहाँ अपने निर्माण फ़ाइल

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

r.js और build.js प्रोजेक्ट फाइल के बाहर के साथ है। मैं नोड कंसोल का उपयोग कर अनुकूलक भाग गया।

node r.js -o build.js 

सबकुछ अच्छी तरह से काम करता है। आउटपुट मुख्य-निर्मित.जेएस बनाया जाता है। लेकिन जब मैं जब मैं सूचकांक फ़ाइल को चलाने के

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

साथ

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

बदलें। कोई त्रुटि नहीं है लेकिन कोई आउटपुट नहीं है। मैं कंसोल संदेशों की अपेक्षा कर रहा हूं। जो मुख्य

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

कृपया के रूप में मूल डेटा-मुख्य के साथ काम करता है मुझे पता लगाना क्यों परियोजना नहीं चलता है और कोई त्रुटि है और साथ ही मदद करते हैं। मॉड्यूल का नाम निर्मित मुख्य :(

//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> 

उत्तर

4

मैं मेरी समस्या पाया। 'मुख्य-built.js' to be 'main.js' या में है से बदलने की आवश्यकता 'मुख्य' को ' 'मुख्य रूप से निर्मित।

+0

सही है, मैं तो बस एक ही समस्या है करने के लिए कहा गया है। लेकिन यह एक समस्या है, क्योंकि अगर आप फाइलनाम में फिंगरप्रिंटिंग (कैश बस्टिंग) जोड़ते हैं तो यह लोड नहीं होगा! –

4

यहाँ दो अन्य विचार कर रहे हैं यदि आप मॉड्यूल का नाम नहीं कर सकते हैं फ़ाइल नाम (जो पोर्टल/main.js है) के रूप में ही (हमारे मामले में यह पोर्टल/मुख्य है)।

  • स्टार्टअप परिभाषित() कॉल से मॉड्यूल नाम को पूरी तरह हटाएं। इससे यह डिफ़ॉल्ट प्रविष्टि बिंदु f या दस्तावेज। यहां समस्या यह है कि कमांड लाइन तर्कों के उपयोग के आधार पर ऑप्टिमाइज़र "और" के उपयोग के अनुरूप नहीं है।

  • कुछ की आवश्यकता जोड़ें (["स्टार्टअप मॉड्यूल नाम"]) की अंतिम पंक्ति के रूप में निर्मित फ़ाइल। यह तुरंत निष्पादित करेंगे जब स्क्रिप्ट लोड किया जाता है और अपनी पसंद का पहला मॉड्यूल में कहते हैं। यह निर्माण स्क्रिप्ट में स्वचालित करने के लिए वास्तव में आसान साबित हुआ और हमारे लिए समस्या तय।

+0

हम आपके दूसरे विकल्प के साथ जा रहे हैं। चूंकि मॉड्यूल ने जल्द ही काम करना बंद कर दिया क्योंकि हमने जेनरेट की गई फ़ाइल के नाम पर एक एसएचए जोड़ा (कैश बस्टिंग के रूप में)। एएमडी मॉड्यूल अद्भुत हैं, लेकिन आवश्यकता है। जेएस एक जीवित नरक है! –

0

से Thupten का समाधान, मुख्य-निर्मित.जेएस में इस प्रतिस्थापन को स्वचालित करने का एक तरीका है कमांड लाइन से इसे चलाने के लिए:

बाद
node r.js -o build.js 

रन

sed -i -- 's/define("main/define("main-built/g' main/js/Main.min.js 
संबंधित मुद्दे