कॉन्फ़िगर RequireJS, requirejs.config({
baseUrl: ".",
paths: {
// libraries path
"json": "vendor/json2",
"jquery": "vendor/jquery",
"somejqueryplugion": "vendor/jquery.somejqueryplufin",
"hogan": "vendor/hogan",
// require plugins
"templ": "vendor/require.hogan",
"text": "vendor/require.text"
},
// The shim section allows you to specify
// dependencies between non AMD compliant files.
// For example, "somejqueryplugin" must be loaded after "jquery".
// The 'exports' attribute tells RequireJS what global variable
// it must assign as the module value for each shim.
// For example: By using the configutation below for jquery,
// when you request the "jquery" module, RequireJS will
// give the value of global "$" (this value will be cached, so it is
// ok to modify/delete the global '$' after all plugins are loaded.
shim: {
"jquery": { exports: "$" },
"util": { exports: "_" },
"json": { exports: "JSON" },
"somejqueryplugin": { exports: "$", deps: ["jquery"] }
}
});
और फिर, कॉन्फ़िगरेशन के बाद हम पहली आवश्यकता() अनुरोधकर सकते हैं उन सभी पुस्तकालयों के लिएऔर उसके बाद हमारे "पृष्ठ मुख्य" मॉड्यूल के लिए अनुरोध करें।
//libs
require([
"templ", //require plugins
"text",
"json", //3rd libraries
"jquery",
"hogan",
"lib/util" // app lib modules
],
function() {
var $ = require("jquery"),
// the start module is defined on the same script tag of data-main.
// example: <script data-main="main.js" data-start="pagemodule/main" src="vendor/require.js"/>
startModuleName = $("script[data-main][data-start]").attr("data-start");
if (startModuleName) {
require([startModuleName], function (startModule) {
$(function(){
var fn = $.isFunction(startModule) ? startModule : startModule.init;
if (fn) { fn(); }
});
});
}
});
आप के शरीर में देख सकते हैं की आवश्यकता होती है() ऊपर, हम require.js स्क्रिप्ट टैग पर एक और विशेषता उम्मीद कर रहे हैं। डेटा शुरू विशेषता वर्तमान पृष्ठ के लिए मॉड्यूल के नाम का आयोजन करेगा।
इस प्रकार, HTML पृष्ठ पर हम इस अतिरिक्त विशेषता जोड़ना होगा:
<script data-main="main" data-start="pagemodule/main" src="vendor/require.js"></script>
ऐसा करने से, हम एक अनुकूलित main.js साथ खत्म हो जाएगा "/ विक्रेता" और "में सभी फ़ाइलें हैं कि/lib "निर्देशिका (साझा संसाधन), लेकिन पृष्ठ-विशिष्ट स्क्रिप्ट/मॉड्यूल नहीं, क्योंकि वे मुख्य.जेएस में निर्भरता के रूप में हार्ड-कोड नहीं हैं। पेज-विशिष्ट मॉड्यूल को एप्लिकेशन के प्रत्येक पृष्ठ पर अलग से लोड किया जाएगा।
"पृष्ठ मुख्य" मॉड्यूल को function()
वापस करना चाहिए जो उपरोक्त "ऐप मुख्य" द्वारा निष्पादित किया जाएगा।
define(function(require, exports, module) {
var util = require("lib/util");
return function() {
console.log("initializing page xyz module");
};
});
संपादित
तरीका यहां बताया गया निर्माण प्रोफ़ाइल का उपयोग पृष्ठ-विशिष्ट मॉड्यूल एक से अधिक फ़ाइल है कि अनुकूलन करने के लिए कर सकते हैं का उदाहरण है।
उदाहरण के लिए, मान लीजिए कि हम निम्नलिखित पृष्ठ मॉड्यूल डालते हैं:
/page1/main.js
/page1/dep1.js
/page1/dep2.js
यदि हम इस मॉड्यूल को अनुकूलित नहीं करते हैं, तो ब्राउज़र प्रत्येक स्क्रिप्ट के लिए 3 अनुरोध करेगा, एक। हम पैकेज बनाने के लिए r.js को निर्देशित करके और इन 3 फ़ाइलों को शामिल करके इसे से बच सकते हैं।
निर्माण प्रोफ़ाइल के "मॉड्यूल" विशेषता पर:
...
"modules": [
{
name: "main" // this is our main file
},
{
// create a module for page1/main and include in it
// all its dependencies (dep1, dep2...)
name: "page1/main",
// excluding any dependency that is already included on main module
// i.e. all our shared stuff, like jquery and plugins should not
// be included in this module again.
exclude: ["main"]
}
]
ऐसा करने से, हम अपने सभी निर्भरता के साथ एक और प्रति-पृष्ठ मुख्य फ़ाइल बनाएँ। लेकिन, चूंकि हमारे पास पहले से ही एक मुख्य फ़ाइल है जो हमारी सभी साझा सामग्री लोड करेगी, हमें उन्हें पृष्ठ 1/मुख्य मॉड्यूल में फिर से शामिल करने की आवश्यकता नहीं है। कॉन्फ़िगरेशन एक छोटा वर्बोज़ है क्योंकि आपको प्रत्येक पृष्ठ मॉड्यूल के लिए ऐसा करना है जहां आपके पास एक से अधिक स्क्रिप्ट फ़ाइल हैं।
मैंने गिटहब में बॉयलरप्लेट का कोड अपलोड किया: https://github.com/mdezem/MultiPageAppBoilerplate। यह एक काम करने वाला बॉयलरप्लेट है, नोड के लिए नोड और आर.जेएस मॉड्यूल स्थापित करें और build.cmd निष्पादित करें (/ निर्देशिका बनाने के अंदर, अन्यथा यह असफल हो जाएगा क्योंकि यह सापेक्ष पथ का उपयोग करता है)
मुझे उम्मीद है कि मैं स्पष्ट हूं। अगर कुछ अजीब लगता है तो मुझे बताएं;)
सम्मान!
मेरे पास छोटा और लंबा जवाब है, लेकिन मुझे कुछ विवरण चाहिए: कितने पेज? प्रत्येक पृष्ठ के लिए विशिष्ट कोड बहुत कम या बहुत कोड है (मान लें कि प्रत्येक पृष्ठ के लिए 10 केबी कोड)? – devundef
क्या आप requjs प्लगइन्स का उपयोग कर रहे हैं, क्या प्लगइन्स? – devundef
आम तौर पर <10kb प्रति mainjs फ़ाइल। मैं सिर्फ jquery plugins init'ing जैसी चीजों के लिए इसका उपयोग करता हूं। कई पेज होने जा रहे हैं ... मैं 20 कहूंगा और बढ़ रहा हूं। तो शायद लगभग 15 mainjs फाइलें और बढ़ती है। और जिन प्लगइन का मैं उपयोग कर रहा हूं वे हैं एएमडी-अनुरूप – AndyPerlitch