RequireJS-এ Shim Configurations হল একটি কনফিগারেশন সেটিং যা আপনাকে নির্দিষ্ট non-AMD (Asynchronous Module Definition) লাইব্রেরি বা স্ক্রিপ্টগুলির জন্য ডিপেনডেন্সি এবং এক্সপোর্ট কার্যকলাপ কাস্টমাইজ করতে সহায়তা করে। যখন আপনি এমন লাইব্রেরি ব্যবহার করেন যেগুলি AMD কম্প্যাটিবল নয়, তখন shim কনফিগারেশন ব্যবহার করে আপনি তাদের RequireJS মডিউলের মতো আচরণ করাতে পারেন।
Shim Configurations এর ভূমিকা:
Non-AMD লাইব্রেরির ইন্টিগ্রেশন: অনেক জনপ্রিয় লাইব্রেরি যেমন jQuery, Backbone.js, Underscore.js, এবং অন্যান্য অনেক লাইব্রেরি AMD স্টাইলের মডিউল নয়। তাদের সাধারণত global variables হিসেবে এক্সপোজ করা হয়, এবং তারা
define()ফাংশন ব্যবহার করে মডিউল হিসেবে ডিফাইন করা হয় না।Shim configurations ব্যবহার করে, আপনি এমন লাইব্রেরিগুলিকে AMD মডিউলের মতো ব্যবহার করতে পারেন, যার ফলে তাদের ডিপেনডেন্সি এবং এক্সপোর্ট ম্যানেজ করা সহজ হয়ে যায়।
- ডিপেনডেন্সি ম্যানেজমেন্ট: Shim configurations আপনি ব্যবহার করতে পারেন এমন স্ক্রিপ্টগুলির জন্য যা অন্যান্য স্ক্রিপ্টের ওপর নির্ভরশীল। আপনি
depsকনফিগারেশন সেট করে ডিপেনডেন্সি সংজ্ঞায়িত করতে পারেন এবংexportsকনফিগারেশন ব্যবহার করে আপনি লাইব্রেরির এক্সপোর্ট ফাংশন বা অবজেক্টটি নির্ধারণ করতে পারেন। - অ্যাক্সপোর্ট এবং এক্সপোজিং গ্লোবাল ভ্যারিয়েবল: যদি একটি স্ক্রিপ্ট গ্লোবাল ভ্যারিয়েবল হিসেবে একটি অবজেক্ট বা ফাংশন এক্সপোজ করে, তবে আপনি
exportsকনফিগারেশন ব্যবহার করে ঐ গ্লোবাল ভ্যারিয়েবলকে অ্যাক্সেস করতে পারবেন, যাতে মডিউলটিrequire()বাdefine()দিয়ে লোড করার পর সঠিকভাবে এক্সপোজ হয়।
Shim Configurations এর Syntax:
require.config({
shim: {
'moduleName': {
deps: ['dependency1', 'dependency2'], // Dependencies to be loaded before this module
exports: 'globalVariable' // The global variable to be exported
}
}
});
moduleName: এটি সেই মডিউলের নাম, যার জন্য আপনি shim কনফিগারেশন সেট করবেন।deps: মডিউলটির ডিপেনডেন্সি নির্ধারণ করে। এই ডিপেনডেন্সিগুলি লোড হওয়া উচিত আগে, যাতে মডিউলটি সঠিকভাবে কাজ করতে পারে।exports: এটি সেই গ্লোবাল ভ্যারিয়েবল বা ফাংশনকে নির্দেশ করে, যা মডিউল থেকে এক্সপোজ হবে। উদাহরণস্বরূপ, যদি একটি স্ক্রিপ্ট গ্লোবালBackboneঅবজেক্ট এক্সপোজ করে, তবে আপনি এই অপশনটি ব্যবহার করে তাexportsকরতে পারেন।
Shim Configurations এর উদাহরণ:
১. Backbone.js এর জন্য Shim Config
require.config({
paths: {
'jquery': 'https://code.jquery.com/jquery-3.6.0.min',
'underscore': 'https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min',
'backbone': 'https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.4.0/backbone-min'
},
shim: {
'backbone': {
deps: ['jquery', 'underscore'],
exports: 'Backbone'
}
}
});
ব্যাখ্যা:
- এখানে
backboneমডিউলটিjqueryএবংunderscoreএর উপর নির্ভরশীল। exports: 'Backbone'ব্যবহার করা হয়েছে কারণ Backbone একটি গ্লোবাল ভ্যারিয়েবল হিসেবে এক্সপোজ হয় এবং এটি মডিউল হিসেবে এক্সপোর্ট হবে।
২. jQuery এর জন্য Shim Config
যদি আপনি কোনো স্ক্রিপ্ট ব্যবহার করছেন যা jQuery কে গ্লোবাল ভ্যারিয়েবল হিসেবে এক্সপোজ করে, তাহলে আপনি shim ব্যবহার করে এটিকে AMD মডিউল হিসেবে ব্যবহার করতে পারেন।
require.config({
paths: {
'jquery': 'https://code.jquery.com/jquery-3.6.0.min'
},
shim: {
'jquery': {
exports: '$' // jQuery exports the global `$` variable
}
}
});
ব্যাখ্যা:
- এখানে,
exports: '$'দ্বারাjqueryমডিউলটি$গ্লোবাল ভ্যারিয়েবলকে এক্সপোজ করবে, যাতে আপনিrequire('jquery')ব্যবহার করে এটি অ্যাক্সেস করতে পারেন।
৩. RequireJS-এ Bootstrap এর জন্য Shim Config
Bootstrap সাধারণত jQuery এর ওপর নির্ভরশীল, কিন্তু এটি নিজেই AMD মডিউল নয়। আপনি shim ব্যবহার করে এটিকে AMD মডিউলের মতো ব্যবহার করতে পারেন।
require.config({
paths: {
'jquery': 'https://code.jquery.com/jquery-3.6.0.min',
'bootstrap': 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min'
},
shim: {
'bootstrap': {
deps: ['jquery'], // Bootstrap depends on jQuery
exports: 'bootstrap' // Expose bootstrap globally
}
}
});
ব্যাখ্যা:
- এখানে,
bootstrapমডিউলটিjqueryএর ওপর নির্ভরশীল এবং Bootstrap একটি গ্লোবাল ভ্যারিয়েবল হিসেবে এক্সপোজ হয়।
Shim Configurations এর সুবিধা:
- Non-AMD লাইব্রেরি এক্সপোজ করা:
- আপনি non-AMD লাইব্রেরিগুলোকে AMD মডিউল হিসেবে ব্যবহার করতে পারবেন, যেমন jQuery, Backbone.js, Bootstrap ইত্যাদি।
- ডিপেনডেন্সি পরিচালনা:
shimকনফিগারেশন ব্যবহার করে আপনি স্ক্রিপ্টগুলোর নির্ভরতা সঠিকভাবে পরিচালনা করতে পারবেন এবং ডিপেনডেন্সি মিসিং সমস্যা থেকে মুক্তি পাবেন।
- গ্লোবাল ভ্যারিয়েবল এক্সপোজ করা:
- যেসব স্ক্রিপ্ট গ্লোবাল ভ্যারিয়েবল এক্সপোজ করে, সেগুলির জন্য
exportsঅপশন ব্যবহার করে গ্লোবাল এক্সপোজিশন নিশ্চিত করতে পারবেন।
- যেসব স্ক্রিপ্ট গ্লোবাল ভ্যারিয়েবল এক্সপোজ করে, সেগুলির জন্য
সারসংক্ষেপ:
Shim Configurations ব্যবহার করে আপনি non-AMD লাইব্রেরিগুলিকে AMD মডিউলের মতো আচরণ করাতে পারবেন, এবং তাদের নির্ভরশীলতা, এক্সপোর্ট এবং ডিপেনডেন্সি সঠিকভাবে পরিচালনা করতে পারবেন। shim অপশনটি এমন স্ক্রিপ্টগুলির জন্য ব্যবহৃত হয় যা সাধারণত AMD প্যাটার্ন অনুসরণ করে না এবং তাদেরকে define() ফাংশনের সাথে সামঞ্জস্যপূর্ণ করে তোলে।
Read more