Grunt এর মূল কাজ হচ্ছে বিভিন্ন টাস্ক অটোমেট করা, যার মাধ্যমে ডেভেলপাররা পুনরাবৃত্তি কাজগুলো দ্রুত এবং দক্ষতার সাথে সম্পাদন করতে পারেন। গ্রান্টে task তৈরি করা এবং সেগুলির পরিচালনা করার মাধ্যমে আপনি আপনার প্রোজেক্টের উন্নয়ন প্রক্রিয়াকে সহজ এবং দ্রুত করতে পারবেন। নিচে Grunt এ task তৈরি এবং পরিচালনার বিস্তারিত ধাপ দেওয়া হলো।
Grunt টাস্ক তৈরি করা
Grunt এ টাস্ক তৈরি করতে হলে, আপনাকে Gruntfile.js ফাইলে কনফিগারেশন এবং টাস্ক লোড করতে হবে। এখানে একটি সাধারণ উদাহরণ দেওয়া হলো যেখানে JavaScript মিনিফিকেশন (minification) টাস্ক তৈরি করা হয়েছে।
Gruntfile.js ফাইলে টাস্ক তৈরি
module.exports = function(grunt) {
// Grunt কনফিগারেশন
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
// Uglify (minification) টাস্ক
uglify: {
build: {
src: 'src/js/app.js', // সোর্স ফাইল
dest: 'dist/js/app.min.js' // মিনিফাইড ফাইল
}
}
});
// Grunt প্লাগইন লোড করা
grunt.loadNpmTasks('grunt-contrib-uglify');
// ডিফল্ট টাস্ক সেট করা
grunt.registerTask('default', ['uglify']);
};
এখানে, uglify একটি টাস্ক হিসেবে কনফিগার করা হয়েছে, যা src/js/app.js ফাইলটিকে মিনিফাই করে dist/js/app.min.js ফাইলে সেভ করবে।
টাস্কের কাজের বর্ণনা:
- uglify: এটি একটি প্লাগইন যা JavaScript ফাইল মিনিফাই (ছোট) করে।
- src: সোর্স ফাইল যেখানে আপনি আপনার সম্পাদনাযোগ্য স্ক্রিপ্ট রাখবেন।
- dest: গন্তব্য ফাইল যেখানে মিনিফাইড স্ক্রিপ্ট সেভ হবে।
Grunt টাস্ক চালানো
Grunt টাস্ক চালানোর জন্য, আপনার টার্মিনালে grunt কমান্ড রান করতে হবে। যদি আপনি ডিফল্ট টাস্ক সেট করে থাকেন, তবে নিচের কমান্ডটি চালানো হলে সেই টাস্ক রান করবে:
grunt
এটি আপনার Gruntfile.js এ সংরক্ষিত ডিফল্ট টাস্কটি (যেমন, uglify) রান করবে এবং নির্ধারিত কাজ সম্পন্ন করবে।
একাধিক টাস্ক তৈরি এবং পরিচালনা
গ্রান্টে আপনি একাধিক টাস্কও তৈরি করতে পারেন এবং সেগুলি বিভিন্ন ভাবে গ্রুপ বা সিকোয়েন্সে পরিচালনা করতে পারেন। উদাহরণস্বরূপ, এখানে JavaScript মিনিফিকেশন এবং CSS মিনিফিকেশন দুটি টাস্ক তৈরি করা হয়েছে।
module.exports = function(grunt) {
// Grunt কনফিগারেশন
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
// Uglify (JavaScript মিনিফিকেশন)
uglify: {
build: {
src: 'src/js/app.js',
dest: 'dist/js/app.min.js'
}
},
// Cssmin (CSS মিনিফিকেশন)
cssmin: {
target: {
files: [{
src: ['src/css/style.css'],
dest: 'dist/css/style.min.css'
}]
}
}
});
// Grunt প্লাগইন লোড করা
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-cssmin');
// ডিফল্ট টাস্ক সেট করা
grunt.registerTask('default', ['uglify', 'cssmin']);
};
এখানে দুটি টাস্ক তৈরি করা হয়েছে:
- uglify: JavaScript ফাইল মিনিফাই করা।
- cssmin: CSS ফাইল মিনিফাই করা।
এই দুটি টাস্ক ডিফল্ট টাস্ক হিসেবে গ্রুপ করা হয়েছে, এবং যখন grunt কমান্ড রান করা হবে, তখন দুটি টাস্ক একসাথে চালানো হবে।
কাস্টম টাস্ক তৈরি করা
গ্রান্টে আপনি কাস্টম টাস্কও তৈরি করতে পারেন। কাস্টম টাস্কে সাধারণত ফাংশনালিটি নির্ধারণ করা হয়। উদাহরণস্বরূপ, একটি কাস্টম টাস্ক তৈরি করা যেতে পারে যা একটি নির্দিষ্ট ফোল্ডারের মধ্যে ফাইল কপি করবে:
module.exports = function(grunt) {
// Grunt কনফিগারেশন
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
// কাস্টম টাস্ক: ফাইল কপি করা
copy: {
main: {
src: 'src/images/*',
dest: 'dist/images/'
}
}
});
// Grunt প্লাগইন লোড করা
grunt.loadNpmTasks('grunt-contrib-copy');
// ডিফল্ট টাস্ক সেট করা
grunt.registerTask('default', ['copy']);
};
এখানে copy টাস্ক তৈরি করা হয়েছে যা src/images/ ফোল্ডারের সব ফাইল dist/images/ ফোল্ডারে কপি করবে।
টাস্কের অপশন ও কনফিগারেশন পরিবর্তন
Grunt টাস্কগুলির মধ্যে আপনি বিভিন্ন কনফিগারেশন অপশন দিতে পারেন, যেমন ফাইলের সোর্স ও ডেস্টিনেশন পাথ, বিভিন্ন প্লাগইনের অপশন ইত্যাদি। উদাহরণস্বরূপ, watch প্লাগইন ব্যবহার করে আপনি নির্দিষ্ট ফাইলগুলির পরিবর্তন মনিটর করতে পারেন এবং টাস্ক স্বয়ংক্রিয়ভাবে রান করতে পারেন:
module.exports = function(grunt) {
// Grunt কনফিগারেশন
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
// Watch টাস্ক কনফিগারেশন
watch: {
scripts: {
files: ['src/js/*.js'],
tasks: ['uglify'],
options: {
spawn: false,
},
},
},
});
// Grunt প্লাগইন লোড করা
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
// ডিফল্ট টাস্ক সেট করা
grunt.registerTask('default', ['watch']);
};
এখানে watch প্লাগইন ব্যবহার করা হয়েছে যা src/js/*.js ফাইলগুলিতে কোন পরিবর্তন হলে uglify টাস্ক রান করবে।
গ্রান্টে টাস্ক তৈরি এবং পরিচালনা করার মাধ্যমে আপনি আপনার ডেভেলপমেন্ট প্রক্রিয়াকে আরও দক্ষ এবং অটোমেটেড করতে পারবেন। একাধিক টাস্কের সমন্বয় এবং কাস্টম টাস্ক তৈরি করে আপনি প্রোজেক্টের কার্যকারিতা এবং গতি আরও বৃদ্ধি করতে পারেন।
Grunt শুধু পূর্বনির্ধারিত প্লাগইনগুলো দিয়ে কাজ করেই থেমে থাকে না, বরং আপনি নিজেই Custom Tasks তৈরি করতে পারেন, যা আপনার প্রোজেক্টের জন্য নির্দিষ্ট টাস্কগুলো সম্পাদন করবে। Custom Task তৈরি করার মাধ্যমে আপনি আপনার প্রোজেক্টের নির্দিষ্ট প্রয়োজনীয়তা অনুযায়ী কার্যক্রম সহজভাবে পরিচালনা করতে পারবেন।
Custom Task কী?
Custom Task হল এমন একটি টাস্ক, যা আপনি নিজের প্রয়োজন অনুসারে তৈরি করেন। এটি সাধারন গ্রান্ট টাস্কের মতোই কাজ করে, তবে আপনি এখানে নিজস্ব কোড ব্যবহার করতে পারেন এবং গ্রান্টের অন্যান্য প্লাগইন বা কনফিগারেশন থেকে ভিন্ন কিছু বাস্তবায়ন করতে পারেন।
Custom Task তৈরি করার ধাপ
- গ্রান্ট ফাংশন তৈরি করা: প্রথমে একটি JavaScript ফাংশন তৈরি করুন, যা আপনার টাস্কের কার্যক্রম সম্পাদন করবে।
- ফাংশনটি গ্রান্টের মধ্যে রেজিস্টার করা: গ্রান্টের
grunt.registerTask()ফাংশনের মাধ্যমে আপনি আপনার Custom Task রেজিস্টার করতে পারেন। - প্যারামিটার এবং কাস্টম কাজ সংযুক্ত করা: টাস্কের মধ্যে আপনি চাইলে কাস্টম প্যারামিটার যোগ করতে পারেন, যা আপনাকে আরও নির্দিষ্ট কাজ করতে সাহায্য করবে।
Custom Task তৈরি করার একটি উদাহরণ
ধরা যাক, আমরা একটি Custom Task তৈরি করতে চাই, যা কোনো নির্দিষ্ট ফোল্ডারের মধ্যে থাকা .txt ফাইলগুলো কনসোলে লগ করবে।
module.exports = function(grunt) {
// Custom Task তৈরি
grunt.registerTask('logFiles', 'Log .txt files', function() {
// নির্দিষ্ট ডিরেক্টরি থেকে ফাইলগুলির তালিকা বের করা
var fs = require('fs');
var path = require('path');
var directoryPath = path.join(__dirname, 'src'); // আপনার নির্দিষ্ট ফোল্ডার
// ডিরেক্টরি থেকে ফাইলগুলির তালিকা নিন
fs.readdirSync(directoryPath).forEach(function(file) {
// শুধুমাত্র .txt ফাইলগুলো লোগ করুন
if (path.extname(file) === '.txt') {
grunt.log.writeln('Found .txt file: ' + file);
}
});
});
};
এই উদাহরণে, একটি কাস্টম logFiles টাস্ক তৈরি করা হয়েছে, যা src ফোল্ডারের মধ্যে .txt এক্সটেনশন বিশিষ্ট ফাইলগুলির নাম কনসোলে লগ করবে। এটি fs (ফাইল সিস্টেম) এবং path মডিউল ব্যবহার করে ফাইল সিস্টেমে এক্সেস লাভ করছে।
Custom Task এ প্যারামিটার ব্যবহার
গ্রান্টে কাস্টম টাস্কে প্যারামিটার ব্যবহার করে আপনি টাস্কের কার্যকারিতা আরও নির্দিষ্ট এবং কাস্টমাইজড করতে পারেন। নিচে একটি উদাহরণ দেওয়া হল যেখানে প্যারামিটার ব্যবহার করা হয়েছে:
module.exports = function(grunt) {
// Custom Task তৈরি
grunt.registerTask('greet', 'Greet someone', function(name) {
// যদি নাম না দেয়া হয়, তবে ডিফল্ট নাম ব্যবহার করুন
name = name || 'World';
grunt.log.writeln('Hello, ' + name + '!');
});
};
এই টাস্কটি greet নামের কাস্টম টাস্ক তৈরি করবে, যা আপনার প্রদত্ত নাম অনুযায়ী একটি শুভেচ্ছা মেসেজ দেখাবে। যদি নাম প্রদান না করা হয়, তবে এটি "Hello, World!" মেসেজটি দেখাবে।
এটি ব্যবহার করতে হলে টার্মিনালে এভাবে লিখতে হবে:
grunt greet:John
এটি আউটপুট করবে: Hello, John!
Custom Task এর সুবিধা
- নির্দিষ্ট কাজের জন্য কাস্টমাইজেশন: যখন আপনি পূর্বনির্ধারিত টাস্কগুলি আপনার প্রয়োজন অনুযায়ী কাস্টমাইজ করতে চান, তখন Custom Task এর মাধ্যমে সেটি করা সম্ভব।
- সহজ কনফিগারেশন: গ্রান্টে Custom Task তৈরি করা খুবই সহজ এবং কোড লেখার পর তা দ্রুত কার্যকর করা যায়।
- পুনঃব্যবহারযোগ্যতা: একবার Custom Task তৈরি করলে, আপনি তা সহজেই অন্যান্য প্রোজেক্টে ব্যবহার করতে পারেন।
Custom Task ব্যবহার করার পরবর্তী ধাপ
- কমপ্লেক্স টাস্ক তৈরি করা: যখন আপনার প্রোজেক্টে আরও জটিল বা মডুলার কাজের প্রয়োজন হবে, তখন আপনি একাধিক Custom Task তৈরি করে সেগুলোর মধ্যে সম্পর্ক স্থাপন করতে পারেন।
- অল্টারনেটিভ টুলস ব্যবহার: যদি আপনার Custom Task অত্যন্ত জটিল হয়, তবে আপনি অন্যান্য টুল যেমন
asyncবাpromiseব্যবহার করতে পারেন যাতে আপনি অ্যালিস্টিক কার্যক্রম পরিচালনা করতে পারেন।
Grunt এর Custom Task তৈরি করা আপনার ওয়েব ডেভেলপমেন্ট প্রোজেক্টের জন্য বিশেষভাবে উপকারী হতে পারে, কারণ এতে আপনি আপনার প্রয়োজন অনুযায়ী কাজগুলো অটোমেট করতে পারবেন এবং কাস্টম টাস্কগুলি আরও কার্যকরভাবে পরিচালনা করতে পারবেন। Grunt এর মাধ্যমে ডেভেলপাররা কোড অটোমেশন এবং কার্যকারিতা বজায় রেখে আরও দ্রুত কাজ সম্পাদন করতে সক্ষম।
Grunt-এ একাধিক টাস্ক তৈরি এবং চালানো খুবই সহজ, এবং এটি ডেভেলপারদের একাধিক কাজ একসাথে অটোমেট করার সুযোগ দেয়। কখনো কখনো একটি প্রোজেক্টে একাধিক টাস্ক একসাথে চালানোর প্রয়োজন পড়ে, এবং Grunt এই কাজটি খুব সহজে পরিচালনা করতে সক্ষম। একাধিক টাস্ক তৈরি এবং চালানোর জন্য Gruntfile-এ নির্দিষ্ট কনফিগারেশন এবং টাস্ক রেজিস্ট্রেশন করতে হয়।
একাধিক টাস্ক তৈরি করা
Grunt-এ একাধিক টাস্ক তৈরি করতে হলে, আপনি initConfig() এর মাধ্যমে বিভিন্ন টাস্ক এবং তাদের কনফিগারেশন সেট করতে পারেন। এখানে কিছু উদাহরণ দেওয়া হলো:
1. Multiple Tasks কনফিগার করা
ধরা যাক, আপনার প্রোজেক্টে দুটি টাস্ক রয়েছে—একটি JavaScript মিনিফিকেশন এবং একটি CSS মিনিফিকেশন। Gruntfile এ এভাবে দুটি টাস্ক কনফিগার করা যাবে:
module.exports = function(grunt) {
grunt.initConfig({
// JavaScript মিনিফিকেশন
uglify: {
my_target: {
files: {
'output.min.js': ['input.js']
}
}
},
// CSS মিনিফিকেশন
cssmin: {
target: {
files: {
'output.min.css': ['input.css']
}
}
}
});
// প্লাগইন লোড
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-cssmin');
};
এখানে দুটি আলাদা টাস্ক—uglify এবং cssmin—প্রতিটি তার নিজস্ব কনফিগারেশন দিয়ে তৈরি করা হয়েছে।
2. একাধিক টাস্ক রান করা
Grunt-এ একাধিক টাস্ক চালানোর জন্য আপনি registerTask() ব্যবহার করতে পারেন। একাধিক টাস্ক একসাথে চালাতে default টাস্কের মধ্যে এই টাস্কগুলো রেজিস্টার করা যেতে পারে।
grunt.registerTask('default', ['uglify', 'cssmin']);
এটি গ্রান্টকে বলে যে, যখন default টাস্ক চালানো হবে, তখন প্রথমে uglify এবং পরে cssmin টাস্কটি চালানো হবে। এর মানে হলো, আপনি একসাথে দুটি টাস্ক এক্সিকিউট করতে পারবেন।
Grunt-এ কাস্টম টাস্ক তৈরি এবং রান করা
এছাড়াও, আপনি কাস্টম টাস্কও তৈরি করতে পারেন। Grunt-এ কাস্টম টাস্ক তৈরির জন্য grunt.registerTask() এর মাধ্যমে আপনি নিজের তৈরি টাস্ক সংজ্ঞায়িত করতে পারেন। উদাহরণস্বরূপ:
কাস্টম টাস্ক তৈরি করা
grunt.registerTask('sayHello', 'Prints a hello message', function() {
grunt.log.writeln('Hello, Grunt!');
});
এটি একটি কাস্টম টাস্ক তৈরি করবে, যা "Hello, Grunt!" মেসেজটি কনসোলে প্রিন্ট করবে।
কাস্টম টাস্ক রান করা
আপনি যদি কাস্টম টাস্কটি রান করতে চান, তবে grunt sayHello কমান্ড ব্যবহার করতে হবে। Grunt এটি সনাক্ত করবে এবং আপনার কাস্টম টাস্কটি চালাবে।
একাধিক টাস্ক সিকোয়েন্সে চালানো
গ্রান্টে একাধিক টাস্ক নির্দিষ্ট কনফিগারেশনে সিকোয়েন্স অনুযায়ী চালানো যায়। আপনি যদি চান যে কিছু টাস্ক আগে এবং কিছু পরে চলুক, তবে আপনি সেগুলিকে একটি নির্দিষ্ট অর্ডারে কনফিগার করতে পারেন। যেমন:
grunt.registerTask('build', ['uglify', 'cssmin', 'sayHello']);
এখানে build টাস্কটি প্রথমে uglify চালাবে, তারপর cssmin এবং শেষে আপনার কাস্টম টাস্ক sayHello চালাবে।
টাস্কগুলোর নির্দিষ্ট অংশ রান করা
কখনো কখনো আপনার প্রোজেক্টের সমস্ত টাস্ক চালানোর প্রয়োজন নাও হতে পারে। একাধিক টাস্ক থেকে শুধুমাত্র নির্দিষ্ট একটি টাস্ক চালানোর জন্য, আপনি সরাসরি সেই টাস্কের নাম দিয়ে Grunt কমান্ড দিতে পারেন। উদাহরণস্বরূপ:
grunt uglify
এটি শুধুমাত্র uglify টাস্কটি চালাবে, এবং অন্য কোনো টাস্ক রান করবে না।
Grunt-এ একাধিক টাস্ক তৈরি এবং রান করা সহজ এবং কার্যকরী। আপনি একটি প্রোজেক্টে একাধিক কাজ অটোমেট করতে পারেন এবং তাদের কার্যকরীভাবে নির্ধারিত সময় অনুযায়ী পরিচালনা করতে পারেন। Grunt এর মাধ্যমে ডেভেলপাররা তাদের কাজকে আরো সহজ, দ্রুত এবং সুশৃঙ্খলভাবে করতে সক্ষম হয়।
Grunt এ Task Aliases একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা আপনাকে একাধিক টাস্ক একসাথে গ্রুপ করতে এবং সেগুলিকে একটি সহজ নাম দিয়ে কল করতে সাহায্য করে। এর মাধ্যমে আপনি একাধিক টাস্ক একই সাথে চালাতে পারেন এবং একই কমান্ড দিয়ে সেই টাস্কগুলো পরিচালনা করতে পারেন।
Task Aliases ব্যবহার করার মাধ্যমে আপনার Grunt কনফিগারেশন আরও পরিষ্কার ও সংগঠিত হয় এবং এটি একাধিক টাস্ককে সহজে একত্রিত করার সুবিধা দেয়।
Task Aliases কী?
Task Aliases এমন একটি কাস্টম টাস্ক যা একাধিক টাস্ককে একত্রিত করে একটি নামের অধীনে রান করায়। উদাহরণস্বরূপ, যদি আপনার প্রোজেক্টে একাধিক টাস্ক থাকে (যেমন, uglify, sass, jshint), তবে আপনি একটি নতুন Task Alias তৈরি করতে পারেন, যা সবগুলো টাস্ক একসাথে চালাবে।
Task Alias ডিফাইন করা
Task Alias ডিফাইন করতে grunt.registerTask() ফাংশন ব্যবহার করতে হয়। নিচে একটি উদাহরণ দেওয়া হলো:
module.exports = function(grunt) {
grunt.initConfig({
uglify: {
my_target: {
files: {
'dist/output.min.js': ['src/input.js']
}
}
},
sass: {
dist: {
files: {
'css/styles.css': 'scss/styles.scss'
}
}
}
});
// প্লাগইন লোড করা
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-sass');
// Task Alias ডিফাইন করা
grunt.registerTask('build', ['uglify', 'sass']); // build নামে একটি alias তৈরি করা
grunt.registerTask('default', ['build']); // default টাস্ক হিসেবে build টাস্ক নির্ধারণ করা
};
এখানে, build নামের একটি alias টাস্ক তৈরি করা হয়েছে, যা uglify এবং sass টাস্ক দুটি একসাথে রান করবে। যখন আপনি grunt build কমান্ড রান করবেন, তখন Grunt স্বয়ংক্রিয়ভাবে উল্লিখিত দুটি টাস্ক একসাথে চালাবে।
Task Aliases এর ব্যবহার
- সাধারণ alias: একাধিক টাস্ক একত্রিত করার জন্য।
- ডিফল্ট alias: যখন আপনি
gruntকমান্ড রান করেন, তখন ডিফল্ট টাস্ক হিসেবে এটি চলবে। - শর্তাধীন alias: আপনি কিছু কন্ডিশনাল কাজ করার জন্য alias তৈরি করতে পারেন, যেমন কেবলমাত্র যখন কোনো ফাইল পরিবর্তন হয় তখন কিছু টাস্ক চালানো।
Task Alias এর উন্নত ব্যবহার
Dependency টাস্কের জন্য alias
আপনি যদি চান যে কিছু টাস্ক নির্দিষ্ট শর্তের উপর ভিত্তি করে চলুক, তবে আপনি সেই শর্ত তৈরি করে Task Alias ব্যবহার করতে পারেন। উদাহরণস্বরূপ:
module.exports = function(grunt) {
grunt.initConfig({
jshint: {
all: ['Gruntfile.js', 'src/**/*.js']
},
uglify: {
my_target: {
files: {
'dist/output.min.js': ['src/input.js']
}
}
}
});
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-uglify');
// Task Alias ডিফাইন করা
grunt.registerTask('lint-and-build', ['jshint', 'uglify']); // lint এবং build টাস্ক একত্রিত
grunt.registerTask('default', ['lint-and-build']); // ডিফল্ট টাস্ক হিসেবে সেট করা
};
এখানে lint-and-build alias তৈরি করা হয়েছে, যা প্রথমে jshint চালাবে এবং তারপর uglify চালাবে।
Watch ব্যবহার করে alias
আপনি watch টাস্কের সাথে alias ব্যবহার করতে পারেন, যাতে ফাইল পরিবর্তন হলে স্বয়ংক্রিয়ভাবে টাস্ক চালানো যায়:
module.exports = function(grunt) {
grunt.initConfig({
watch: {
scripts: {
files: ['src/**/*.js'],
tasks: ['uglify']
}
},
uglify: {
my_target: {
files: {
'dist/output.min.js': ['src/input.js']
}
}
}
});
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
// Watch alias তৈরি করা
grunt.registerTask('default', ['watch']);
};
এখানে, watch টাস্কটি চালানো হলে, আপনি যখন src//*.js** ফাইলটি পরিবর্তন করবেন, তখন uglify টাস্ক স্বয়ংক্রিয়ভাবে চলে যাবে।
সারাংশ
Task Aliases ব্যবহার করে আপনি Grunt এর বিভিন্ন টাস্ককে একত্রিত করে একটি সহজ নামের অধীনে গ্রুপ করতে পারেন, যা প্রোজেক্টের কনফিগারেশনকে পরিষ্কার এবং সহজ করে তোলে। এটি টাস্কগুলো একসাথে চালানোর সুবিধা দেয় এবং আপনার কাজের গতি বাড়ায়। Task Aliases ব্যবহার করলে আপনি একই কমান্ডের মাধ্যমে একাধিক টাস্ক দ্রুত সম্পন্ন করতে পারবেন।
Grunt এর মূল কাজ হল টাস্ক অটোমেট করা, এবং এই কাজটি Task Handler এর মাধ্যমে সম্পন্ন হয়। Grunt-এ টাস্কগুলি Execution Process অনুসরণ করে কাজ করে। এই টিউটোরিয়ালে, আমরা Grunt এর টাস্ক হ্যান্ডলার এবং এক্সিকিউশন প্রক্রিয়া সম্পর্কে বিস্তারিত আলোচনা করব।
Grunt Task হ্যান্ডলার কী?
Grunt-এর Task Handler হলো একটি ফাংশন বা কোড ব্লক, যা Grunt টাস্ক পরিচালনা করে এবং টাস্কটি এক্সিকিউট করার জন্য নির্দেশনা প্রদান করে। যখন Grunt একটি টাস্ক চালানোর জন্য নির্দেশিত হয়, তখন সেই টাস্কটি তার কনফিগারেশন অনুসারে হ্যান্ডলারের মাধ্যমে কার্যকর হয়। টাস্ক হ্যান্ডলার মূলত Grunt এর কোড ব্লক যা নির্দিষ্ট কাজ সম্পাদন করে।
Grunt Execution প্রক্রিয়া
Grunt এর execution প্রক্রিয়া হল বিভিন্ন টাস্কের মাধ্যমে কোড কার্যকর করা। সাধারণত, Grunt শুরু হয় grunt.initConfig থেকে, যেখানে কনফিগারেশন এবং টাস্ক নির্ধারণ করা হয়। এরপর, Grunt টাস্কগুলো নির্দিষ্ট অনুসরণে এবং নির্ধারিত অর্ডারে এক্সিকিউট করে।
Grunt Execution প্রক্রিয়ার ধাপ
প্রথমে কনফিগারেশন লোড করা:
- Grunt ফাইলের মধ্যে প্রথমেই কনফিগারেশন সেট করা হয়। এখানে টাস্কের জন্য প্রয়োজনীয় প্লাগইন এবং তাদের কনফিগারেশন উল্লেখ করা হয়।
grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), uglify: { options: { mangle: false }, dist: { files: { 'dist/output.min.js': ['src/input.js'] } } } });টাস্ক হ্যান্ডলার লোড করা:
- প্রতিটি টাস্কের জন্য নির্দিষ্ট প্লাগইন এবং হ্যান্ডলার লোড করা হয়। উদাহরণস্বরূপ,
grunt-contrib-uglifyপ্লাগইনটিuglifyটাস্ক পরিচালনার জন্য লোড করা হয়।
grunt.loadNpmTasks('grunt-contrib-uglify');- প্রতিটি টাস্কের জন্য নির্দিষ্ট প্লাগইন এবং হ্যান্ডলার লোড করা হয়। উদাহরণস্বরূপ,
টাস্ক রেজিস্টার করা:
grunt.registerTask()ফাংশনের মাধ্যমে, টাস্কের নাম এবং সেই টাস্কে যে কাজগুলি এক্সিকিউট হবে তা রেজিস্টার করা হয়।
grunt.registerTask('default', ['uglify']);টাস্ক এক্সিকিউট করা:
- যখন আপনি
gruntকমান্ড রান করেন, Grunt স্বয়ংক্রিয়ভাবে Default Task বা যেই টাস্ক নির্দেশনা দেওয়া হয়েছে, সেটি এক্সিকিউট করে। টাস্কের মধ্যে নির্দিষ্ট ফাইল বা কোড এক্সিকিউট করা হয়, যেমন মিনিফিকেশন, CSS কম্পাইলিং, লিন্টিং ইত্যাদি।
grunt- যখন আপনি
টাস্ক এক্সিকিউশনের প্রক্রিয়া
Grunt এর টাস্ক এক্সিকিউশনের প্রক্রিয়া সাধারণত কয়েকটি ধাপে সম্পন্ন হয়:
- টাস্কের কনফিগারেশন লোড: প্রথমে
grunt.initConfig()ফাংশনে নির্দিষ্ট কনফিগারেশন লোড হয়, যেখানে টাস্কের জন্য প্রয়োজনীয় ফাইল এবং ফোল্ডার নির্দেশনা দেওয়া হয়। - টাস্ক প্লাগইন লোড:
grunt.loadNpmTasks()ফাংশন ব্যবহার করে প্লাগইন লোড করা হয়, যা টাস্ক পরিচালনা করবে। - টাস্ক রেজিস্টার এবং এক্সিকিউশন:
grunt.registerTask()এর মাধ্যমে টাস্ক রেজিস্টার করা হয়। এই টাস্ক তখন গ্রান্ট এক্সিকিউট করার সময় সম্পন্ন হয়। - টাস্কের ফলাফল: এক্সিকিউটেড টাস্কের পর ফলাফল যেমন, কম্পাইল করা ফাইল, মিনিফিকেশন, কোড লিন্টিং ফলাফল ইত্যাদি প্রিন্ট করা হয় অথবা সেভ করা হয় নির্দিষ্ট ফোল্ডারে।
উদাহরণ
এখানে একটি Grunt টাস্ক এক্সিকিউশন প্রক্রিয়া দেখানো হচ্ছে, যেখানে একটি JavaScript ফাইল মিনিফিকেশন করা হচ্ছে:
module.exports = function(grunt) {
// প্লাগইন লোড
grunt.loadNpmTasks('grunt-contrib-uglify');
// কনফিগারেশন সেট করা
grunt.initConfig({
uglify: {
options: {
mangle: false
},
dist: {
files: {
'dist/output.min.js': ['src/input.js']
}
}
}
});
// Default Task
grunt.registerTask('default', ['uglify']);
};
এখানে:
uglifyটাস্ক গ্রান্টের মাধ্যমে JavaScript ফাইল মিনিফাই করার কাজ করছে।grunt-contrib-uglifyপ্লাগইনটি ব্যবহার করেsrc/input.jsফাইলটি মিনিফাই করেdist/output.min.jsএ সেভ করা হচ্ছে।
Grunt টাস্ক সিকোয়েন্স
Grunt টাস্কগুলো নির্দিষ্ট সিকোয়েন্সে এক্সিকিউট হয়, যেমন:
- প্রথমে কনফিগারেশন লোড হয়।
- এরপর প্লাগইন লোড হয়।
- তারপর রেজিস্টার করা টাস্ক এক্সিকিউট হয়।
- অবশেষে টাস্কের ফলাফল (যেমন মিনিফায়েড ফাইল) তৈরি হয়।
এইভাবে Grunt এর টাস্ক হ্যান্ডলার এবং এক্সিকিউশন প্রক্রিয়া কাজ করে, যা আপনার ওয়েব ডেভেলপমেন্ট প্রোজেক্টে বিভিন্ন টাস্ককে অটোমেট এবং দ্রুত করতে সাহায্য করে।
Read more