RequireJS-এর জন্য Configuration File তৈরি করার মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের মডিউলগুলির জন্য কাস্টম কনফিগারেশন সেটআপ করতে পারবেন। এটি আপনার অ্যাপ্লিকেশনের স্ক্রিপ্ট এবং ডিপেনডেন্সি ম্যানেজমেন্টকে আরও সুসংগঠিত এবং কার্যকরী করে তোলে।
RequireJS-এ কনফিগারেশন সাধারণত require.config() ফাংশনের মাধ্যমে করা হয়, যেখানে আপনি paths, shim, bundles, এবং অন্যান্য সেটিংস কনফিগার করতে পারেন।
RequireJS কনফিগারেশন ফাইলের সাধারণ উপাদান:
- Paths: মডিউলের অবস্থান নির্ধারণ করার জন্য
pathsব্যবহার করা হয়। - Shim: পূর্বের স্ক্রিপ্টের জন্য নির্দিষ্ট কনফিগারেশন, যা ডিপেনডেন্ট স্ক্রিপ্টগুলি লোড করতে সহায়তা করে।
- Bundles: একাধিক মডিউলকে একটি বন্ডল (bundle) হিসেবে একত্রিত করে লোড করা।
- Config: মডিউলের কনফিগারেশন সেট করতে
configব্যবহার করা হয়। - Callback Function: RequireJS একটি মডিউল লোড হলে, একটি callback ফাংশন কল করে।
RequireJS কনফিগারেশন ফাইল তৈরি করার উদাহরণ:
1. RequireJS কনফিগারেশন ফাইল (config.js):
এটি আপনার অ্যাপ্লিকেশনের রুট ডিরেক্টরিতে একটি কনফিগারেশন ফাইল হিসেবে থাকবে, যেমন config.js। এই ফাইলটি সব মডিউলের কনফিগারেশন তথ্য ধারণ করবে।
// config.js
require.config({
baseUrl: 'js', // Base URL for all scripts
paths: {
'jquery': 'libs/jquery', // Define path for jquery module
'underscore': 'libs/underscore', // Define path for underscore module
'app': 'app/main', // Define custom app entry point module
'moduleA': 'modules/moduleA', // Define custom moduleA
'moduleB': 'modules/moduleB' // Define custom moduleB
},
shim: {
'underscore': {
exports: '_' // Specify the global variable exported by the underscore module
},
'moduleB': {
deps: ['moduleA'], // Define dependency of moduleB on moduleA
exports: 'ModuleB'
}
},
deps: ['app'] // Load the 'app' module first
});
ব্যাখ্যা:
baseUrl: এটি আপনার অ্যাপ্লিকেশনের জন্য বেস URL নির্ধারণ করে। এর মানে হল যে আপনার স্ক্রিপ্টের সব পাথjsফোল্ডারে থাকবে।paths: এটি মডিউলগুলির জন্য নির্দিষ্ট পাথ কনফিগার করে। উদাহরণস্বরূপ,jqueryমডিউলটিlibs/jquery.jsফাইলে থাকবে, এবংapp/main.jsঅ্যাপ্লিকেশনের প্রধান স্ক্রিপ্ট।shim: এটি ডিপেনডেন্সি ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। উদাহরণস্বরূপ,underscoreমডিউলটি একটি গ্লোবাল ফাংশন হিসাবে_এক্সপোর্ট করবে, এবংmoduleBমডিউলটিmoduleAমডিউলের উপর নির্ভরশীল।deps: এটি ডিফল্ট ডিপেনডেন্সি হিসেবে ব্যবহার করা হয়, যেখানে আপনি আগে যে মডিউলটি লোড করতে চান সেটি উল্লেখ করেন। এখানে,appমডিউলটি প্রথমে লোড হবে।
2. RequireJS ব্যবহার (main.js):
এটি আপনার অ্যাপ্লিকেশনের প্রধান স্ক্রিপ্ট যেখানে RequireJS দ্বারা কনফিগার করা মডিউলগুলো ব্যবহার করা হবে।
// main.js
require(['jquery', 'underscore', 'moduleA', 'moduleB'], function($, _, moduleA, moduleB) {
console.log('jQuery version: ' + $.fn.jquery);
console.log('Underscore version: ' + _.VERSION);
// Use moduleA and moduleB
moduleA.someFunction();
moduleB.someFunction();
});
3. HTML ফাইল (index.html):
এটি সেই HTML ফাইল যেখানে RequireJS স্ক্রিপ্ট এবং কনফিগারেশন ফাইলটি লোড হবে।
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>RequireJS Example</title>
<script data-main="js/config" src="js/libs/require.js"></script>
</head>
<body>
<h1>Welcome to RequireJS Example</h1>
<script>
require(['main']); // Load the main module
</script>
</body>
</html>
ব্যাখ্যা:
data-main="js/config": এই অ্যাট্রিবিউট দিয়ে,require.jsসঠিক কনফিগারেশন ফাইলটি লোড করবে। এখানে,js/config.jsকনফিগারেশন ফাইলটি রেফারেন্স করা হয়েছে।require(['main']);: এটি প্রধান মডিউল (যেমনmain.js) লোড করার জন্য ব্যবহৃত হয়।
RequireJS কনফিগারেশন ফাইলের অন্যান্য অপশন:
urlArgs: এটি URL-এ ভার্সন প্যারামিটার যোগ করতে ব্যবহৃত হয়, যা ক্যাশিং নিয়ন্ত্রণে সহায়তা করে।urlArgs: "v=" + (new Date()).getTime()waitSeconds: এটি নির্ধারণ করে যে RequireJS কত সময়ের জন্য স্ক্রিপ্ট লোড করার চেষ্টা করবে। নির্দিষ্ট সময়ের মধ্যে স্ক্রিপ্ট লোড না হলে, একটি ত্রুটি ঘটবে।waitSeconds: 15 // Wait for 15 seconds for modules to loadmap: এটি মডিউলগুলোর জন্য ম্যাপিং সেট করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, একটি মডিউলের পাথ বা নাম পরিবর্তন করতে।map: { '*': { 'css': 'libs/css.min' // Automatically map 'css' to 'libs/css.min' } }
সারসংক্ষেপ:
RequireJS এর কনফিগারেশন ফাইলটি অ্যাপ্লিকেশনের স্ক্রিপ্ট এবং মডিউলগুলির পাথ, ডিপেনডেন্সি, এবং অন্যান্য সেটিংস কনফিগার করার জন্য ব্যবহৃত হয়। এর মাধ্যমে মডিউল লোডিং, ডিপেনডেন্সি ম্যানেজমেন্ট, কোড বিভাজন, এবং অ্যাসিঙ্ক্রোনাস লোডিং সহজে পরিচালিত হয়, যা অ্যাপ্লিকেশনের পারফরম্যান্স ও রক্ষণাবেক্ষণকে উন্নত করে।
RequireJS-এ require.config() ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের জন্য কনফিগারেশন সেট করতে পারেন। এই কনফিগারেশন ফাংশনটি আপনাকে RequireJS এর কার্যকারিতা কাস্টমাইজ করতে সাহায্য করে, যেমন মডিউলগুলির পথ (paths), ডিপেনডেন্সি, শিরোনাম, এবং অন্যান্য সেটিংস।
require.config() ব্যবহার করে কনফিগারেশন সেট করা
require.config() একটি ফাংশন যা RequireJS-এর কনফিগারেশন সেট করতে ব্যবহৃত হয়। এটি সাধারণত অ্যাপ্লিকেশন শুরুতে কল করা হয়, এবং আপনি এতে বিভিন্ন বিকল্প সেট করতে পারেন, যেমন মডিউলগুলির পাথ, ডিপেনডেন্সি, শিরোনাম, এবং সিঙ্ক্রোনাস বা অ্যাসিঙ্ক্রোনাস লোডিংয়ের জন্য অপশনস।
require.config() এর মূল ব্যবহার:
- মডিউল পাথ কনফিগারেশন (Module Path Configuration): আপনি
pathsবিকল্প ব্যবহার করে মডিউলগুলির অবস্থান বা পাথ নির্দিষ্ট করতে পারেন। এটি আপনাকে আপনার মডিউলগুলির জন্য কাস্টম পাথ ঠিক করতে সাহায্য করে। - ডিপেনডেন্সি ম্যানেজমেন্ট (Dependency Management):
shimব্যবহার করে আপনি এমন স্ক্রিপ্টগুলির জন্য ডিপেনডেন্সি নির্ধারণ করতে পারেন, যা AMD স্টাইলের মডিউল নয়। - প্যাকেজ কনফিগারেশন (Package Configuration):
packagesঅপশনটি ব্যবহার করে আপনি কোডকে গ্রুপ করতে পারেন এবং একটি প্যাকেজে মডিউলগুলিকে একত্রে রেখে ব্যবহারের জন্য সহজ করে তুলতে পারেন। - অপ্টিমাইজেশন (Optimization): অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় স্ক্রিপ্টগুলোকে একত্রিত করে
optimizeঅপশন ব্যবহার করতে পারেন, যার মাধ্যমে কোড মিনিফাই করা এবং কম্বাইন করা সম্ভব হয়।
উদাহরণ: require.config() ব্যবহার করে কনফিগারেশন
1. Paths কনফিগারেশন:
আমরা paths ব্যবহার করে মডিউলগুলির অবস্থান নির্ধারণ করব। এটি আমাদের মডিউলগুলির জন্য সংক্ষিপ্ত নাম বা নির্দিষ্ট পাথ প্রদান করতে সাহায্য করে।
// config.js
require.config({
paths: {
'jquery': 'https://code.jquery.com/jquery-3.6.0.min', // CDN থেকে jQuery ব্যবহার
'underscore': 'libs/underscore', // লোকাল ফোল্ডারে Underscore.js
'app': 'scripts/app' // স্থানীয় অ্যাপ্লিকেশন স্ক্রিপ্ট
}
});
// app.js
require(['jquery', 'underscore', 'app'], function($, _, app) {
console.log('jQuery:', $);
console.log('Underscore:', _);
app.initialize();
});
এখানে, paths ব্যবহার করে আমরা jquery, underscore, এবং app মডিউলের পাথ নির্ধারণ করেছি। এখন আমরা শুধু তাদের শর্টনেম দিয়ে স্ক্রিপ্ট লোড করতে পারব, এবং RequireJS সেগুলিকে যথাযথ অবস্থান থেকে লোড করবে।
2. Shim কনফিগারেশন:
যদি আপনি কোনও লাইব্রেরি ব্যবহার করেন যা AMD স্টাইল অনুসরণ করে না (যেমন, jQuery প্লাগইন), তবে আপনি shim ব্যবহার করে সেই স্ক্রিপ্টগুলির জন্য ডিপেনডেন্সি ও এক্সপোজড গ্লোবাল ভ্যারিয়েবল সেট করতে পারেন।
// config.js
require.config({
paths: {
'jquery': 'https://code.jquery.com/jquery-3.6.0.min',
'bootstrap': 'libs/bootstrap.min'
},
shim: {
'bootstrap': {
deps: ['jquery'], // Bootstrap jQuery এর উপর নির্ভরশীল
exports: '$.fn.tooltip' // যে গ্লোবাল ভ্যারিয়েবল এক্সপোজ করা হবে
}
}
});
// app.js
require(['jquery', 'bootstrap'], function($) {
$(document).ready(function() {
$('[data-toggle="tooltip"]').tooltip();
});
});
এখানে, shim ব্যবহার করা হয়েছে যাতে bootstrap মডিউলটি jquery ডিপেন্ডেন্সি লোড করার পরে লোড হয়। এটি নিশ্চিত করবে যে প্রথমে jquery লোড হবে, তারপর bootstrap লোড হবে।
3. Packages কনফিগারেশন:
packages ব্যবহার করে আপনি মডিউলগুলিকে একটি নির্দিষ্ট প্যাকেজে গ্রুপ করতে পারেন, যা অ্যাপ্লিকেশনের জন্য আরও পরিষ্কার এবং সুসংগঠিত কোড তৈরি করতে সাহায্য করবে।
// config.js
require.config({
packages: [
{
name: 'myapp',
location: 'scripts',
main: 'main' // 'main.js' ফাইলটি প্যাকেজের প্রধান মডিউল
}
]
});
// app.js
require(['myapp'], function(myapp) {
myapp.start();
});
এখানে, myapp প্যাকেজটি scripts ফোল্ডারে রাখা হয়েছে, এবং main.js ফাইলটি প্যাকেজের প্রধান মডিউল হিসেবে ব্যবহার করা হয়েছে।
4. Optimize কোডের জন্য কনফিগারেশন:
RequireJS আপনাকে অ্যাপ্লিকেশনের কোড কম্বাইন এবং মিনিফাই করার জন্য optimize অপশন প্রদান করে। এটি প্রয়োজনীয় স্ক্রিপ্টগুলোকে একত্রিত করে এবং সেগুলোর আকার ছোট করতে সাহায্য করে।
// r.js (RequireJS Optimization config)
({
baseUrl: 'scripts',
name: 'main', // মূল ফাইল
out: 'build/main.min.js', // আউটপুট ফাইল
optimize: 'uglify2', // কোড মিনিফাই করার জন্য
paths: {
'jquery': 'libs/jquery.min'
}
})
এটি main.js স্ক্রিপ্টটি মিনিফাই করবে এবং build/main.min.js আউটপুটে রূপান্তর করবে। optimize অপশনটি কোডকে সঙ্কুচিত করে অ্যাপ্লিকেশন দ্রুত লোড হতে সাহায্য করবে।
সারসংক্ষেপ:
require.config() ফাংশনটি ব্যবহার করে আপনি আপনার RequireJS অ্যাপ্লিকেশনের কনফিগারেশন সেট করতে পারেন, যেমন মডিউলগুলির পাথ, ডিপেনডেন্সি ম্যানেজমেন্ট, প্যাকেজ কনফিগারেশন, এবং কোড অপটিমাইজেশন। এটি আপনাকে মডিউলগুলিকে সঠিকভাবে লোড এবং ব্যবহার করতে সহায়তা করে, এবং অ্যাপ্লিকেশনকে আরও কার্যকরী ও দ্রুত তৈরি করতে সাহায্য করে।
RequireJS-এ Base URL এবং Path সেট করা হচ্ছে যাতে মডিউলগুলি সঠিকভাবে লোড হয় এবং নির্ভরশীলতা সঠিকভাবে ব্যবস্থাপনা করা যায়। Base URL এবং Paths ব্যবহার করে আপনি মডিউলের অবস্থান নির্ধারণ করতে পারেন, যাতে RequireJS সঠিক জায়গা থেকে মডিউল লোড করতে পারে।
Base URL সেট করা
Base URL হল আপনার প্রোজেক্টের মুল ডিরেক্টরি যেখানে মডিউলগুলো সংরক্ষিত থাকে। আপনি require.config() এর মধ্যে baseUrl কনফিগার করে এটি সেট করতে পারেন। এতে কোন ফাইল বা মডিউল লোড করার সময়, সেগুলি আপনার নির্দিষ্ট Base URL থেকে অনুসন্ধান করা হয়।
Base URL সেট করার Syntax:
require.config({
baseUrl: 'path/to/your/modules'
});
এখানে, baseUrl সেট করতে আপনি আপনার প্রোজেক্টের মডিউল ফোল্ডারের পথ প্রদান করবেন।
Path সেট করা
Paths কনফিগারেশন সেট করতে require.config() ব্যবহার করা হয়, যা মডিউলের একটি নির্দিষ্ট নামের জন্য আপেক্ষিক পথ বা নির্দিষ্ট অবস্থান প্রদান করে। এটি সাধারণত ব্যবহার করা হয় যখন আপনি কোনো মডিউলকে আলাদা নাম দিয়ে লোড করতে চান অথবা একটি নির্দিষ্ট মডিউল ফোল্ডারে মডিউলগুলিকে স্থানান্তরিত করতে চান।
Paths কনফিগার করার Syntax:
require.config({
paths: {
'moduleName': 'path/to/module'
}
});
এখানে, moduleName হল মডিউলের নাম যা আপনি আপনার অ্যাপ্লিকেশনে ব্যবহার করবেন এবং 'path/to/module' হল সেই মডিউলের অবস্থান।
Base URL এবং Path একসাথে সেট করা:
প্রায়শই, আপনি baseUrl এবং paths কনফিগারেশন একত্রে ব্যবহার করবেন। Base URL সাধারণত আপনার মডিউল ডিরেক্টরি সংজ্ঞায়িত করে এবং Paths ব্যবহার করে আপনি নির্দিষ্ট মডিউলের জন্য পথ উল্লেখ করবেন।
require.config({
baseUrl: 'js/lib', // Base directory for modules
paths: {
'jquery': 'https://code.jquery.com/jquery-3.6.0.min', // External path for jQuery
'app': '../app' // Relative path for app module
}
});
ব্যাখ্যা:
baseUrl: 'js/lib': এটি বলে দেয় যে, আপনার সমস্ত মডিউলjs/libফোল্ডারে অবস্থিত থাকবে।paths:jquery: এখানে jQuery এর জন্য একটি CDN পাথ নির্ধারণ করা হয়েছে।app:appমডিউলের জন্য একটি আপেক্ষিক পথ, যা../appথেকে লোড হবে।
মডিউল লোড করার উদাহরণ:
require.config({
baseUrl: 'js',
paths: {
'jquery': 'https://code.jquery.com/jquery-3.6.0.min',
'app': 'app/main'
}
});
require(['jquery', 'app'], function($, app) {
app.initialize();
});
এখানে, require() ফাংশনটি jquery এবং app মডিউল লোড করছে এবং যখন দুটি মডিউল লোড হয়ে যাবে, তখন initialize() ফাংশন কল হবে।
baseUrl এবং paths কনফিগারেশনের সুবিধা:
- কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি: আপনি একাধিক মডিউল ফোল্ডার থেকে মডিউলগুলি লোড করতে পারেন।
- ডিপেনডেন্সি ম্যানেজমেন্ট: মডিউলগুলির ডিপেনডেন্সি সঠিকভাবে ম্যানেজ করা যায়, কারণ
pathsব্যবহার করে আপনি মডিউলগুলির নির্দিষ্ট অবস্থান এবং পথ উল্লেখ করতে পারেন। - কনফিগারেশন কেন্দ্রীকরণ: সমস্ত মডিউল কনফিগারেশন এক জায়গায় রাখার মাধ্যমে কোডের রক্ষণাবেক্ষণ সহজ হয়।
সারসংক্ষেপ:
RequireJS-এ Base URL এবং Path কনফিগার করে আপনি মডিউল লোডিং এবং ডিপেনডেন্সি ম্যানেজমেন্ট সহজভাবে করতে পারেন। baseUrl আপনার সমস্ত মডিউলের মূল ডিরেক্টরি নির্ধারণ করে, এবং paths ব্যবহার করে আপনি নির্দিষ্ট মডিউলগুলির জন্য উপযুক্ত পথ সেট করতে পারেন। এগুলো ব্যবহার করে আপনার কোড সঠিকভাবে লোড হয় এবং মডিউলগুলির মধ্যে নির্ভরতাগুলি সঠিকভাবে পরিচালিত হয়।
RequireJS একটি module loader যা AMD (Asynchronous Module Definition) স্ট্যান্ডার্ডে মডিউল লোড এবং ডিপেনডেন্সি ম্যানেজ করতে সাহায্য করে। তবে, অনেক সেকেন্ড বা পুরোনো লাইব্রেরি এবং স্ক্রিপ্ট AMD-compliant নয়। এই ধরনের Non-AMD scripts লোড করার জন্য, RequireJS এর Shim Configuration ব্যবহার করা হয়।
Shim Configurations কি?
Shim Configuration হল একটি কনফিগারেশন সেটিংস যা RequireJS-এ Non-AMD scripts লোড করতে সাহায্য করে। এই কনফিগারেশন ব্যবহার করে আপনি এমন স্ক্রিপ্টগুলোকে RequireJS-এর মাধ্যমে লোড করতে পারবেন যেগুলি AMD স্ট্যান্ডার্ডের সাথে সামঞ্জস্যপূর্ণ নয়।
Shim Configuration আপনি dependencies, exports, এবং init কনফিগারেশন প্যারামিটার ব্যবহার করে অ্যাড করে থাকেন।
Shim Configuration এর প্যারামিটারস:
exports: স্ক্রিপ্টটি যখন লোড হবে, তখন তার যে গ্লোবাল ভ্যারিয়েবল বা অবজেক্টটি তৈরি হবে তা RequireJS এ এক্সপোর্ট হবে। এই প্যারামিটারটি দিয়ে আপনি গ্লোবাল ভ্যারিয়েবল বা অবজেক্টটি সংজ্ঞায়িত করতে পারেন।dependencies: আপনার স্ক্রিপ্টটির যেসব ডিপেনডেন্সি আছে (যেগুলো আগে লোড করতে হবে), সেগুলি এই প্যারামিটারে তালিকাভুক্ত করা হয়। এইভাবে আপনি নিশ্চিত করতে পারেন যে আপনার স্ক্রিপ্টটি প্রয়োজনীয় ডিপেনডেন্সি লোড হওয়ার পরেই চালু হবে।init: এটি একটি ফাংশন যা স্ক্রিপ্টটি লোড হওয়ার পর কাজ করবে। আপনি এখানে আপনার স্ক্রিপ্টের শুরুতেই কোনো ইন্টিগ্রেশন বা কনফিগারেশন সেটআপ করতে পারেন।
Shim Configuration ব্যবহার করে Non-AMD Scripts লোড করার উদাহরণ:
ধরা যাক, আপনি jQuery এবং Bootstrap এর মতো স্ক্রিপ্টগুলো ব্যবহার করতে চান, যা AMD মডিউল হিসেবে সংজ্ঞায়িত হয়নি। এই পরিস্থিতিতে, আপনি Shim Configuration ব্যবহার করে এই স্ক্রিপ্টগুলো লোড করতে পারেন।
1. require.config() এর মাধ্যমে Shim Configuration সেট করা:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RequireJS with Shim Example</title>
<!-- Load RequireJS -->
<script data-main="js/main" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js"></script>
</head>
<body>
<h1>RequireJS Example with Shim</h1>
<!-- Define scripts to be loaded -->
<script>
require.config({
paths: {
'jquery': 'https://code.jquery.com/jquery-3.6.0.min',
'bootstrap': 'https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min'
},
shim: {
'bootstrap': {
deps: ['jquery'], // bootstrap depends on jQuery
exports: '$.fn.popover' // bootstrap attaches methods to jQuery
}
}
});
require(['jquery', 'bootstrap'], function($, bootstrap) {
console.log("jQuery and Bootstrap loaded!");
// Now you can use jQuery and Bootstrap methods
});
</script>
</body>
</html>
ব্যাখ্যা:
paths: এখানে, আমরা jQuery এবং Bootstrap এর জন্য CDN URLs দিয়েছি, যাতে RequireJS জানে এই স্ক্রিপ্টগুলোর অবস্থান কোথায়।shim: এই কনফিগারেশনটি দিয়ে আমরা জানাচ্ছি যে Bootstrap মডিউলটি jQuery-এর উপর নির্ভরশীল। অর্থাৎ, Bootstrap লোড হওয়ার আগে প্রথমে jQuery লোড হতে হবে। এছাড়াও,exportsদিয়ে আমরা$.fn.popoverএটিকে এক্সপোর্ট হিসেবে সংজ্ঞায়িত করেছি, যেহেতু Bootstrap মূলত jQuery-তে কিছু ফাংশন যুক্ত করে।deps: ডিপেনডেন্সি গুলি উল্লেখ করে (এক্ষেত্রে['jquery']) যা নিশ্চিত করে যে Bootstrap প্রথমে jQuery ডিপেনডেন্সি লোড হবে।exports: গ্লোবালভাবে যে ভ্যারিয়েবল বা ফাংশন এক্সপোর্ট হবে তা সুনির্দিষ্ট করে।
অন্য একটি উদাহরণ (Non-AMD Script লোড করা):
ধরা যাক, আপনি একটি legacy JavaScript স্ক্রিপ্ট ব্যবহার করছেন, যা AMD মডিউল নয়। এখানে একটি কনফিগারেশন উদাহরণ দেওয়া হলো।
<script>
require.config({
paths: {
'legacyLibrary': 'path/to/legacyLibrary.js'
},
shim: {
'legacyLibrary': {
exports: 'LegacyLib' // Define global object as export
}
}
});
require(['legacyLibrary'], function(LegacyLib) {
console.log(LegacyLib);
// Call functions from the legacy library
});
</script>
ব্যাখ্যা:
exports: 'LegacyLib': যেহেতুlegacyLibrary.jsএকটি non-AMD স্ক্রিপ্ট, এটি একটি গ্লোবাল অবজেক্টLegacyLibতৈরি করবে।exportsপ্যারামিটার দিয়ে আমরা এটিকে RequireJS এর মাধ্যমে এক্সপোর্ট করে নিচ্ছি।require()ফাংশনটি যখন এই স্ক্রিপ্ট লোড করবে, তখনLegacyLibগ্লোবাল ভ্যারিয়েবলটিLegacyLibনামক অবজেক্ট হিসেবে এক্সপোর্ট হবে এবং আপনি সেখান থেকে এর ফাংশনগুলো ব্যবহার করতে পারবেন।
Shim Configuration এর সুবিধা:
- Non-AMD Scripts লোডিং: Shim Configuration আপনাকে Non-AMD স্ক্রিপ্টগুলির সাথে কাজ করার সুযোগ দেয়, যেগুলি AMD মডিউল হিসেবে ডিজাইন করা হয়নি।
- ডিপেনডেন্সি ম্যানেজমেন্ট: এটি ডিপেনডেন্সি ম্যানেজমেন্ট সহজ করে দেয়, বিশেষ করে যখন আপনার কাছে পুরনো স্ক্রিপ্ট থাকে যা নির্দিষ্ট অর্ডারে লোড হওয়া উচিত।
- গ্লোবাল ভ্যারিয়েবল এক্সপোর্ট:
exportsপ্যারামিটারটি ব্যবহার করে আপনি গ্লোবাল স্কোপে যে ভ্যারিয়েবল তৈরি হবে সেটিকে RequireJS এর মাধ্যমে ব্যবহারযোগ্য করে তুলতে পারেন। - এবং আরও: Shim ব্যবহার করলে, আপনি সহজে প্রাচীন লাইব্রেরি বা স্ক্রিপ্টগুলোকে আধুনিক অ্যাসিঙ্ক্রোনাস লোডিং পদ্ধতিতে ব্যবহার করতে পারবেন।
সারসংক্ষেপ:
Shim Configuration হল একটি গুরুত্বপূর্ণ কৌশল যা RequireJS ব্যবহার করে Non-AMD স্ক্রিপ্টগুলির সাথে কাজ করার জন্য ব্যবহৃত হয়। এটি dependencies, exports, এবং init প্যারামিটার ব্যবহার করে মডিউল লোড এবং তাদের নির্ভরতা ম্যানেজ করতে সাহায্য করে। Shim ব্যবহারের মাধ্যমে আপনি পুরনো স্ক্রিপ্ট এবং আধুনিক মডিউল লোডিং সিস্টেমের মধ্যে সামঞ্জস্য সৃষ্টি করতে পারেন।
RequireJS ব্যবহার করার সময় বিভিন্ন কনফিগারেশন অপশন ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনকে আরও কার্যকরী এবং পারফরম্যান্স-বান্ধব করতে পারেন। RequireJS এর কনফিগারেশন অপশনগুলি আপনাকে বিভিন্ন মডিউল লোডিংয়ের পদ্ধতি, ডিপেনডেন্সি ম্যানেজমেন্ট এবং পাথ রেজলভিং কাস্টমাইজ করার সুবিধা দেয়।
RequireJS এর কনফিগারেশন অপশন:
RequireJS এর কনফিগারেশন অপশনগুলি সাধারণত require.config() ফাংশনের মাধ্যমে সেট করা হয়। এই কনফিগারেশনগুলো সাধারণত main.js বা config.js ফাইলে সংরক্ষিত থাকে।
প্রধান কনফিগারেশন অপশনসমূহ:
baseUrl:- Purpose: এটি সেই ডিরেক্টরি নির্ধারণ করে যেখানে RequireJS আপনার মডিউলগুলো অনুসন্ধান করবে।
- Default:
baseUrlএর ডিফল্ট মান/(রুট ডিরেক্টরি)। - Usage: যখন আপনি মডিউলগুলিকে নির্দিষ্ট পাথ থেকে লোড করতে চান, তখন
baseUrlসেট করা হয়।
require.config({ baseUrl: 'js/lib' });paths:- Purpose: এটি কাস্টম মডিউল পাথ সেট করতে ব্যবহৃত হয়, যা আপনাকে মডিউলগুলির ফাইলের অবস্থান সম্পর্কিত শর্টকাট প্রদান করে।
- Usage: এটি সাধারণত মডিউল নামের জন্য শর্টকাট বা আলাদা পাথ নির্ধারণ করতে ব্যবহৃত হয়।
require.config({ paths: { jquery: 'https://code.jquery.com/jquery-3.6.0.min', lodash: 'libs/lodash' } });shim:- Purpose: যদি আপনার মডিউলটি ডিপেনডেন্সি ভিত্তিক হয়, তবে
shimকনফিগারেশন ব্যবহার করা হয়। এটি নির্দিষ্ট করে দেয় যে কোন মডিউলকে আগে লোড করতে হবে এবং কোন ডিপেনডেন্সি থাকা প্রয়োজন। - Usage: যখন আপনি সিঙ্ক্রোনাস স্ক্রিপ্ট ব্যবহার করছেন এবং সেগুলোর ডিপেনডেন্সি সম্পর্কিত সমস্যা রয়েছে তখন
shimব্যবহার করা হয়।
require.config({ shim: { 'backbone': { deps: ['underscore', 'jquery'], exports: 'Backbone' } } });- Purpose: যদি আপনার মডিউলটি ডিপেনডেন্সি ভিত্তিক হয়, তবে
deps:- Purpose: এটি লোড হওয়া মডিউলগুলির তালিকা নির্ধারণ করে, যা প্রথমে লোড হবে। এটি সাধারণত আপনার অ্যাপ্লিকেশনটি শুরু হওয়ার আগে প্রয়োজনীয় মডিউলগুলি লোড করার জন্য ব্যবহৃত হয়।
- Usage: এটি অ্যাপ্লিকেশনটি লোড হওয়ার আগে প্রাথমিক ডিপেনডেন্সি লোড করতে ব্যবহার করা হয়।
require.config({ deps: ['app'] });waitSeconds:- Purpose: এটি নির্ধারণ করে, মডিউল লোড হওয়ার জন্য কত সেকেন্ড অপেক্ষা করতে হবে। যদি কোনো মডিউল নির্দিষ্ট সময়ের মধ্যে লোড না হয়, তবে একটি ত্রুটি তৈরি হবে।
- Usage: আপনার অ্যাপ্লিকেশনের পারফরম্যান্স এবং রিলায়েবিলিটি উন্নত করতে এটি ব্যবহার করা হয়।
require.config({ waitSeconds: 15 // Wait for 15 seconds before timeout });urlArgs:- Purpose: এটি মডিউলগুলির URL এ কাস্টম প্যারামিটার যোগ করার জন্য ব্যবহৃত হয়। এটি সাধারণত ক্যাশিং এর জন্য ব্যবহৃত হয়, যাতে ব্রাউজার নতুন মডিউল লোড করতে পারে।
- Usage: যখন আপনি ডেভেলপমেন্টে কাজ করছেন বা নতুন মডিউল লোড করতে চান, তখন
urlArgsব্যবহার করা হয়।
require.config({ urlArgs: 'v=1.0' // Adding a version query parameter });packages:- Purpose: এটি একটি প্যাকেজের জন্য পাথ কনফিগারেশন সরবরাহ করে। একটি প্যাকেজের মধ্যে একাধিক মডিউল থাকতে পারে, এবং
packagesআপনাকে সেই প্যাকেজের পাথ কনফিগারেশন করতে সহায়তা করে। - Usage: যখন আপনার মডিউলগুলি একটি প্যাকেজের মধ্যে থাকে এবং আপনি পুরো প্যাকেজটিকে লোড করতে চান।
require.config({ packages: [{ name: 'myPackage', location: 'libs/myPackage', main: 'main' }] });- Purpose: এটি একটি প্যাকেজের জন্য পাথ কনফিগারেশন সরবরাহ করে। একটি প্যাকেজের মধ্যে একাধিক মডিউল থাকতে পারে, এবং
map:- Purpose: এটি কনফিগারেশন এন্ট্রি থেকে অন্য মডিউল বা পাথগুলিতে মানচিত্র বা রিডিরেকশন নির্ধারণ করতে ব্যবহৃত হয়।
- Usage: এটি সাধারণত পাথ বা মডিউলের মানচিত্রিংয়ের জন্য ব্যবহৃত হয়, যেমন একটি মডিউল ফাইলের অবস্থান পরিবর্তন করার জন্য।
require.config({ map: { '*': { 'css': 'libs/css.min' } } });
উদাহরণ: RequireJS কনফিগারেশন
require.config({
baseUrl: 'js/lib', // Set the base URL
paths: {
jquery: 'https://code.jquery.com/jquery-3.6.0.min', // Set path for jquery
lodash: 'libs/lodash', // Set path for lodash
app: '../app' // Relative path for app module
},
shim: {
'backbone': {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
}
},
deps: ['app/main'], // Define dependency for app startup
waitSeconds: 15, // Timeout after 15 seconds
urlArgs: 'v=1.0' // Add versioning for cache-busting
});
ব্যাখ্যা:
baseUrl: মডিউল লোড করার জন্য বেস পাথ সেট করা হয়েছে।paths: এখানেjquery,lodash, এবংappএর জন্য কাস্টম পাথ নির্ধারণ করা হয়েছে।shim:backboneমডিউলটিunderscoreএবংjqueryএর উপর নির্ভরশীল, এবংBackboneএক্সপোর্ট করা হবে।deps:app/mainমডিউলটি প্রথমে লোড হবে।waitSeconds: ১৫ সেকেন্ডে লোড না হলে মডিউল লোড করা হবে না।urlArgs: ক্যাশিং সমস্যা এড়াতেv=1.0প্যারামিটার যোগ করা হয়েছে।
সারসংক্ষেপ:
RequireJS এর কনফিগারেশন অপশনগুলি অ্যাপ্লিকেশনকে আরো কার্যকরী, পরিষ্কার এবং পারফরম্যান্স বান্ধব করে তোলে। baseUrl, paths, shim, deps, waitSeconds, এবং অন্যান্য কনফিগারেশন অপশনগুলি আপনাকে আপনার মডিউল লোডিং প্রক্রিয়া নিয়ন্ত্রণ করতে সাহায্য করে, ডিপেনডেন্সি ম্যানেজমেন্ট সহজ করে এবং কোড অপ্টিমাইজেশন নিশ্চিত করে।
Read more