RequireJS একটি মডিউল লোডার যা AMD (Asynchronous Module Definition) স্ট্যান্ডার্ড অনুসরণ করে, তবে অনেক পুরনো লাইব্রেরি বা স্ক্রিপ্ট Non-AMD ফরম্যাটে লেখা হয়ে থাকে (যেমন CommonJS বা সাধারণ স্ক্রিপ্ট ফাইল)। এ ধরনের লাইব্রেরি এবং স্ক্রিপ্টগুলির সাথে কাজ করতে গেলে AMD এবং Non-AMD এর মধ্যে compatibility নিশ্চিত করতে কিছু পদক্ষেপ নিতে হয়।
AMD এবং Non-AMD এর মধ্যে Compatibility
RequireJS এ, AMD এবং Non-AMD কোডের মধ্যে compatibility বজায় রাখার জন্য shim configuration এবং exports অপশন ব্যবহার করা যেতে পারে। এর মাধ্যমে আপনি Non-AMD স্ক্রিপ্টগুলিকে AMD মডিউল হিসেবে রূপান্তর করতে পারেন এবং তার সাথেই ব্যবহার করতে পারেন।
১. Shim Configuration
Shim configuration ব্যবহার করে আপনি Non-AMD স্ক্রিপ্টগুলি AMD স্টাইলে রূপান্তর করতে পারেন। এর মাধ্যমে আপনি সরাসরি Non-AMD স্ক্রিপ্টের dependencies এবং exports ফাংশনালিটি কনফিগার করতে পারেন।
Shim Configuration Syntax:
require.config({
shim: {
'non-amd-library': {
deps: ['dependency1', 'dependency2'], // dependencies
exports: 'NonAMDLibrary' // Global object exported by the non-AMD library
}
}
});
এটি কীভাবে কাজ করে?
deps: Non-AMD লাইব্রেরির জন্য নির্ভরশীল অন্যান্য মডিউলগুলি আগে লোড হবে।exports: Non-AMD লাইব্রেরি একটি গ্লোবাল অবজেক্ট তৈরি করে (যেমনwindow.NonAMDLibrary) এবং আপনাকে তা AMD মডিউল হিসেবে ব্যবহারের জন্য exports করতে হবে।
এটি কিভাবে ব্যবহার করবেন:
ধরা যাক, আপনি একটি Non-AMD লাইব্রেরি যেমন jQuery ব্যবহার করছেন, যা গ্লোবাল window.$ অথবা window.jQuery এ এক্সপোর্ট করে। এই ক্ষেত্রে আপনি shim configuration ব্যবহার করে jQuery-কে AMD ফরম্যাটে ইনক্লুড এবং ব্যবহারের জন্য কনফিগার করতে পারেন।
require.config({
paths: {
'jquery': 'libs/jquery-3.6.0.min' // Path to the jQuery script
},
shim: {
'jquery': {
exports: '$' // Exports the global $ object as the jQuery module
}
}
});
// Now you can use jQuery as an AMD module
require(['jquery'], function($) {
console.log($); // jQuery will work as expected
});
এখানে, shim কনফিগারেশনের মাধ্যমে আপনি jQuery-কে AMD module হিসেবে ব্যবহার করছেন, যদিও এটি Non-AMD (গ্লোবাল স্ক্রিপ্ট) হিসেবে তৈরি হয়েছিল।
২. AMD to Non-AMD Compatibility with requirejs
আপনি যদি একটি AMD স্টাইল মডিউলকে Non-AMD স্ক্রিপ্ট হিসেবে ব্যবহার করতে চান (যেমন একটি পুরনো লাইব্রেরি), তবে আপনাকে requirejs অথবা define এর মাধ্যমে সেই মডিউলকে ইমপোর্ট করতে হবে।
Non-AMD library usage in AMD application:
এখানে আপনি দেখতে পারেন কিভাবে একটি AMD মডিউলকে Non-AMD অ্যাপ্লিকেশন থেকে লোড করা যায়।
// Non-AMD example using RequireJS
define(['require', 'jquery'], function(require, $) {
console.log('Using AMD module in a Non-AMD context');
});
এটি কিভাবে কাজ করে?
এখানে, আমরা Non-AMD ফরম্যাটে jQuery ইনপোর্ট করছি কিন্তু তা AMD ফরম্যাটে ব্যবহার করছি। require এবং define ফাংশনালিটি ব্যবহার করে আপনি AMD এবং Non-AMD এর মধ্যে ব্রিজ তৈরি করতে পারেন।
৩. Converting Non-AMD Scripts to AMD
অনেক পুরনো স্ক্রিপ্ট যেমন libraries বা plugins যেগুলো Non-AMD ফরম্যাটে লেখা, সেগুলিকে AMD মডিউলে রূপান্তর করতে shim কনফিগারেশন ব্যবহার করতে হয়। এতে আপনি সহজেই Non-AMD লাইব্রেরিকে আপনার অ্যাপ্লিকেশনে যোগ করতে পারবেন এবং ডিপেনডেন্সি ও এক্সপোর্ট সেটআপ করতে পারবেন।
Non-AMD Script Example (External library)
<script src="path/to/non-amd-library.js"></script>
এটি সাধারণভাবে Non-AMD স্ক্রিপ্ট হিসেবে কাজ করবে। তবে RequireJS এর মাধ্যমে আপনি এটি AMD ফরম্যাটে রূপান্তর করতে পারেন।
Converting the Non-AMD script to AMD module:
require.config({
shim: {
'non-amd-lib': {
deps: ['jquery'], // Dependent on jQuery
exports: 'NonAMDLib' // Exports the NonAMDLib global object
}
}
});
require(['non-amd-lib'], function(NonAMDLib) {
console.log(NonAMDLib); // You can now use it as an AMD module
});
এখানে, shim কনফিগারেশনের মাধ্যমে Non-AMD লাইব্রেরি NonAMDLib কে AMD মডিউলে রূপান্তর করা হয়েছে।
৪. Handling Global Variables in Non-AMD Scripts
অনেক পুরনো স্ক্রিপ্ট গ্লোবাল ভ্যারিয়েবল তৈরি করে থাকে, যেগুলো Non-AMD স্ক্রিপ্ট হিসেবে ব্যবহার হয়। এসব স্ক্রিপ্টগুলোর ক্ষেত্রে আপনি global variables কে AMD মডিউল হিসেবে ইনপোর্ট করতে পারবেন shim কনফিগারেশন ব্যবহারের মাধ্যমে।
Example with Global Variables:
require.config({
shim: {
'oldLibrary': {
exports: 'GlobalLibraryObject' // Exports a global object
}
}
});
require(['oldLibrary'], function(GlobalLibraryObject) {
console.log(GlobalLibraryObject); // You can now use it as an AMD module
});
- AMD এবং Non-AMD স্ক্রিপ্টগুলির মধ্যে compatibility নিশ্চিত করতে RequireJS এর shim configuration ব্যবহৃত হয়। এর মাধ্যমে আপনি Non-AMD স্ক্রিপ্টগুলিকে AMD modules হিসেবে ব্যবহৃত করতে পারেন।
- Shim configuration সাহায্যে আপনি Non-AMD স্ক্রিপ্টগুলির dependencies এবং exports সঠিকভাবে কনফিগার করে তাদের AMD মডিউল হিসেবে ব্যবহার করতে পারেন।
- RequireJS আপনাকে AMD এবং Non-AMD স্ক্রিপ্টের মধ্যে compatibility বজায় রেখে কার্যকরী কোড তৈরি করতে সহায়তা করে।
Read more