2015-06-03 11 views
5

के रूप में विज्ञापित, rjs प्ले मेंप्ले फ्रेमवर्क में RequJS ऑप्टिमाइज़र का उपयोग कैसे करें?

सुनिश्चित किसी भी JavaScript संसाधनों को एक WebJar भीतर से संदर्भित स्वचालित रूप से jsdelivr CDN द्वारा दर्शाया जाता है कि कर सकते हैं। इसके अलावा यदि .min.js फ़ाइल तब मिलती है जो .js के स्थान पर उपयोग की जाएगी। यहां जोड़ा गया बोनस यह है कि आपके एचटीएमएल में कोई बदलाव नहीं है!

हालांकि, मुझे ऐसा करने के लिए कोई भी प्रतीत नहीं होता है।

  1. मैंने अपने प्ले ऐप को उत्पादन मोड में चलाने का प्रयास किया, और मेरे सभी वेबजर जावास्क्रिप्ट को अभी भी स्थानीय के रूप में संदर्भित किया जा रहा है।
  2. मुझे उत्पादन में उपयोग की जाने वाली जावास्क्रिप्ट फ़ाइलों का .min संस्करण नहीं दिखाई देता है।
  3. मुझे उत्पादन मोड में काम करने के लिए निर्भरता इंजेक्शन नहीं मिल सकता है। उदाहरण के लिए, जब मैं इस

    की तरह मेरे कोड में jquery इंजेक्षन करना चाहते हैं परिभाषित ([ 'jQuery'], समारोह ($) { 'का उपयोग सख्त';। console.log ($ ग्रेप); वापसी { योग: फ़ंक्शन (ए, बी) { एक + बी; } }; });

मैं इस देव मोड में ठीक काम करने के लिए मिल सकता है, लेकिन उत्पादन मोड में, rjs

[info] Error: ENOENT, no such file or directory '/Users/khanguyen/Desktop/rjsdemo/target/web/rjs/build/js/jquery.js' 
[info] In module tree: 
[info]  main 
[info]  app 
[info] 
[info] Error: Error: ENOENT, no such file or directory '/Users/khanguyen/Desktop/rjsdemo/target/web/rjs/build/js/jquery.js' 
[info] In module tree: 
[info]  main 
[info]  app 
[info] 
[info]  at Error (native) 

जाहिर है यह jQuery के लिए गलत स्थान में दिख रही है कह विफल रहा, config उत्पन्न सेटअप के बावजूद वेबजर

requirejs.config({"paths":{"jquery":["/webjars/jquery/1.11.1/jquery","jquery"]},"shim":{"jquery":{"exports":"$"}},"packages":[]}) } 

jquery के लिए सही स्थान होने के लिए।

मैं अपने build.sbt में pipelineStages := Seq(rjs, digest) सेटअप के साथ Play 2.4.0 का उपयोग कर रहा हूं।

कृपया मुझे बताएं कि मुझे यह गलत कहां मिला।

धन्यवाद!

+1

मुझे एक ही समस्या है, मुझे आश्चर्य है कि यह एक कॉन्फ़िगरेशन समस्या है और इस प्रकार यहां एक समस्या खोली गई है https://github.com/webjars/sample-play2/issues/7 –

+0

यहां मैंने जो देखा है , चीजों के काम क्यों करते हैं या काम नहीं करते हैं, इसके बारे में स्पष्ट स्पष्टीकरण के बिना। आपको क्लासिक वेबजर्स का उपयोग करना होगा। जब आप main.js में अपना 'पथ' घोषित करते हैं, तो यूआरएल को [वर्ग ब्रैकेट] में लपेटें। मैंने वेबजर मॉड्यूल को कुचलने का फैसला किया क्योंकि मैं एक ही फाइल के 2 संस्करण नहीं चाहता हूं। मुझे बताएं कि यह कैसे जाता है। एक बार जब मैं यह समझूं कि इसे एक साथ कैसे रखा जाए, तो मैं निर्देश के साथ पोस्ट लिखूंगा। – Khanetor

+0

आपने वेबजर मॉड्यूल को हटा दिया? तो आप अब उनका उपयोग नहीं कर रहे हैं? यह दुर्भाग्यपूर्ण होगा। मुझे अभी भी आश्चर्य है कि क्या हम बस कुछ कॉन्फ़िगरेशन खो रहे हैं या शायद एक असंगतता है (sbt-rjs को थोड़ी देर में अपडेट नहीं किया गया है)। –

उत्तर

4

यह पता चला है कि RequjS अनुकूलन समर्थन सभी वेबजर पर लागू नहीं होता है, बल्कि क्लासिक वेबजर्स तक सीमित है। enter image description here

फिर भी, आरजेएस को काम करने के लिए एक वेबजर बिल्ड फ़ाइल को नियमित मॉड्यूल के साथ शामिल किया जाना चाहिए। enter image description here

यदि आप jQuery क्लासिक वेबजर को देखते हैं, उदाहरण के लिए, आप देखेंगे कि एक विशेष वेबजर निर्माण निर्देश शामिल है। अपनी जानकारी के लिए उस फ़ाइल पर एक नज़र डालें। enter image description here

एक बार जब आप एक वेबजर की पहचान कर लें जो RequJS तैयार है, तो आप sbt-rjs को यह काम करने दे सकते हैं।

/** javascripts/main.js **/ 
'use strict'; 

requirejs.config({ 
    paths:{ 
     'jquery': ['../lib/jquery/jquery'], 
     'react': ['../lib/react/react'], 
     'bootstrap': ['../lib/bootstrap/js/bootstrap'], 
     'react-bootstrap': ['../lib/react-bootstrap/react-bootstrap'] 
    }, 
    shim: { 
     'bootstrap': { 
      deps: ['jquery'] 
     }, 
     'react-bootstrap': { 
      deps: ['react'] 
     } 
    } 
}); 

वर्ग कोष्ठक के लिए याद रखें, अन्यथा CDN प्रतिस्थापन नहीं होगा: यहाँ संदर्भ के लिए मेरी सेटअप है।

गैर-आवश्यकताएं तैयार स्क्रिप्ट के लिए, paths घोषित करते समय आपके पास स्क्वायर ब्रैकेट नहीं होना चाहिए। अन्यथा, आरजेएस त्रुटि path fallback not supported के साथ निर्माण करने से इंकार कर देगा। बेशक, आपको सीडीएन लाभ नहीं मिलेगा। बस एक साइड नोट, RequJS सीएसएस अनुकूलन भी काम करता है। लेकिन सीएसएस को रेखांकित करने के लिए केवल सीमित है, जैसे नियमित आवश्यकताएं करता है।

+0

धन्यवाद! मुझे उम्मीद थी कि 'requjs.config' उत्पन्न होगा, लेकिन ऐसा लगता है कि यह मामला नहीं है। –

+0

सुधार, आपको सीडीएन प्रतिस्थापन के लिए स्क्वायर ब्रैकेट की आवश्यकता नहीं है। – Khanetor

+0

कुछ चीजों को इंगित करने के लिए ... 'sbt-rjs' WebJar RequJS कॉन्फ़िगरेशन का उपयोग नहीं करता है। इसलिए आपको 'sbt-rjs' का उपयोग करते समय मैन्युअल रूप से अपनी कॉन्फ़िगरेशन बनाना होगा। अंतर्निहित WebJar RequJS कॉन्फ़िगरेशन 'webjars-requjs.js' से आने के लिए प्रयुक्त होता था लेकिन अब' pom.xml' से आता है और क्लाइंट-साइड RequJS मॉड्यूल लोडिंग के लिए 'वेबजर्स-लोकेटर' के माध्यम से खुलासा किया जाता है। एनपीएम और बॉवर वेबजर्स को 'एसबीटी-आरजेएस' के लिए क्लासिक वेबजर्स की तरह काम करना चाहिए क्योंकि वे उसी तरह निकाले जाते हैं। –

संबंधित मुद्दे