Category Archives: নোড . জে এস । Node.js

Node.js – কলব্যাক এর ধারণা। কলব্যাক কি? (Callbacks Concept)

মোহাম্মদ আব্দুল্লাহ

 

Callback কি ?

Callback একটি ফাংশনের জন্য একটি asynchronous সমতূল্য । একটি কলব্যাক ফাংশন একটি নির্দিষ্ট কাজের শেষে সাধারনত কল করা হয়ে থাকে । Node.js এ callback ফাংশন প্রচুর পরিমানে ব্যবহার হয়ে থাকে । Node.js এর সকল API গুলি এমনাভাবে তৈরী করা হয়েছে যাতে করে তারা callbacks সমর্থন করে ।

উদাহরণস্বরূপ, একটি ফাইল পড়ার ফাংশন ফাইল পড়ার পর আবার আগের জায়গায় ফিরে আসে যাতে করে পরবর্তী নির্দেশ execute করতে পারে । ফাইলটি পড়ার পর ফাইলের কন্টেন্ট প্যারামিটার হিসেবে callback ফাংশন এ আসবে । এই কারনেই Node.js এত জনপ্রিয় কারন এটি কোন ধরনের ফাংশন call ছাড়াই অনেক request প্রক্রিয়া করতে পারে ।

 

উদাহরণ (Blocking Code)

input.txt নামে একটি ফাইল তৈরী করুন এবং তাতে নিম্নের text টি copy/paste করে দিন ।


Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!


একটি javascript (main.js) এ নিম্নের কোড copy/paste করে দিন


 var fs = require("fs");

 var data = fs.readFileSync('input.txt');

 console.log(data.toString());
 console.log("Program Ended");

এখন main.js ফাইলটি রান করান


$ node main.js


নিম্নের আউটপুট দেখুন


Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
Program Ended


 

 

উদাহরণ (Non-Blocking Code)

.txt নামে একটি ফাইল তৈরী করুন এবং তাতে নিম্নের text টি copy/paste করে দিন ।


Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!


 

 

main.js এ নিম্নের কোড copy/paste করে দিন


var fs = require("fs");

 fs.readFile('input.txt', function (err, data) {
        if (err) return console.error(err);
        console.log(data.toString());
 });
console.log("Program Ended");

 

 

এখন main.js ফাইলটি রান করান


$ node main.js


নিম্নের আউটপুট দেখুন


Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!


 

 

এই দুটি উদাহরণ Blocking এবং Non-Blocking Code ধারণার ব্যাখ্যা করে । প্রথম উদাহারনে, প্রথমে ফাইল পড়ে এবং ফাইল পড়া শেষ হলে বাকি কোড execute করে । অন্যদিকে দ্বিতীয় উদাহারনে ফাইল পড়া শেষ হওয়ার আগেই অন্যান্য কোড execute করে ফেলে । এইভাবেই Blocking কোড sequencely program রান করে থাকে অন্যদিকে Non-Blocking Code sequencely program রান করে না ।

http://www.tutorialspoint.com/nodejs/nodejs_callbacks_concept.htm

Node.js – সার্বজনীন অবজেক্ট (Global Objects)

মোহাম্মদ আব্দুল্লাহ

Node.js এর গ্লোবাল অবজেক্টগুলো সাধারনত সকল মোডিউল থেকে সরাসরি একসেস করা যায় । তাই এই গ্লোবাল অবজেক্টগুলোকে কোন অ্যাপ থেকে অন্তর্ভূক্ত করতে হয় না । এই গ্লোবাল অবজেক্টগুলো সাধারনত মোডিউল, ফাংশন, স্ট্রীং অথবা অবজেক্টও হয়ে থাকে যা নিম্নে ব্যাখ্যা করা হয়েছে ।

__filename

__filename, যেই ফাইল থেকে কোড রান করা হচ্ছে সেই ফাইলের নাম প্রকাশ করে থাকে । এটি কোড ফাইলের সম্পূর্ণ পথ প্রিন্ট করে থাকে ।

উদাহরণ
একটি javascript (main.js) এ নিম্নের কোড copy/paste করে দিন


console.log( __filename );

 

এখন main.js ফাইলটি রান করান


$ node main.js

 

আপনার প্রোগ্রামের সঠিক অবস্থান অনুযায়ী নিম্নের ফাইল নাম প্রকাশ করবেঃ


/web/com/1427091028_21099/main.js

 

__dirname

__dirname সাধারনত যেই ডিরেক্টরী থেকে স্ক্রীপ্ট রান করা হচ্ছে ওই ডিরেক্টরীর নাম প্রকাশ করে থাকে ।

উদাহরণ
একটি javascript (main.js) এ নিম্নের কোড copy/paste করে দিন


console.log( __dirname );

 

এখন main.js ফাইলটি রান করান


$ node main.js

 

আপনার প্রোগ্রামের সঠিক অবস্থান অনুযায়ী নিম্নের ডিরেক্টরীর নাম প্রকাশ করবেঃ


/web/com/1427091028_21099

 

 

setTimeout(cb, ms)

setTimeout(cb, ms) গ্লোবাল ফাংশন দিয়ে অন্তত ' ms ' মিলিসেকেন্ড বিলম্বে কলব্যাক ফাংশন ' cb ' কে কল করা হয়ে থাকে । এই বিলম্ব কিছু বাহ্যিক ফাক্টর এর উপর নির্ভরশীল উদাহারন স্বরুপ OS timer granularity এবং system load । একটি টাইমারের ব্যাপ্তি ২৪.৮ দিনের বেশী হতে পারবে না ।

উদাহরণ
একটি javascript (main.js) এ নিম্নের কোড copy/paste করে দিন


function printHello(){
     console.log( "Hello, World!");
 }
 // Now call above function after 2 seconds
 setTimeout(printHello, 2000);

 

এখন main.js ফাইলটি রান করান


$ node main.js

 

যাচাই করে দেখুন আউটপুট কিছুটা বিলম্বে আসছে কিনা


Hello, World!

 

clearTimeout(t)

clearTimeout( t ) গ্লোবাল ফাংশন দিয়ে পূর্বে setTimeout(cb, ms) দিয়ে যেই টাইমার সেট করা হয়েছে তা বন্ধ করতে ব্যবহার করা হয় ।

উদাহরণ
একটি javascript (main.js) এ নিম্নের কোড copy/paste করে দিন


function printHello(){
       console.log( "Hello, World!");
 }
 // Now call above function after 2 seconds
 var t = setTimeout(printHello, 2000);
 // Now clear the timer

 

clearTimeout(t)

এখন main.js ফাইলটি রান করান


$ node main.js

যাচাই করে দেখুন আউটপুটে কিছু প্রিন্ট করছে কিনা

 

setInterval(cb, ms)

setInterval(cb, ms) দিয়ে অন্তত ' ms ' মিলিসেকেন্ড বিলম্বে বারবার কলব্যাক ফাংশন ' cb ' কে কল করতে থাকে । এই বিলম্ব কিছু বাহ্যিক ফাক্টর এর উপর নির্ভরশীল উদাহারন স্বরুপ OS timer granularity এবং system load । একটি টাইমারের ব্যাপ্তি ২৪.৮ দিনের বেশী হতে পারবে না ।

একটি javascript (main.js) এ নিম্নের কোড copy/paste করে দিন


function printHello(){
     console.log( "Hello, World!");
 }
 // Now call above function after 2 seconds
 setInterval(printHello, 2000);

 

এখন main.js ফাইলটি রান করান


$ node main.js


উপরের প্রোগ্রামটি প্রতি ২ সেকেন্ড পরপর printHello() ফাংশন কে কল করতে থাকবে ।

 

নোড.জেএস (Node. Js) টিউটোরিয়াল

মীর তাওহীদুল ইসলাম

ওয়েব ডেভেলপার

 

আজকে আপনাদের সামনে হাজির হলাম নোড জে এস এর টিউটোরিয়াল নিয়ে। আশা করি আপনাদের ভাল লাগবে।

নোড জে এস জাভাস্ক্রিপ্ট এর উপর ভিত্তি করে গড়ে ওঠা খুবই শক্তিশালী একটি ফ্রেমওয়ার্ক বা প্লাটফর্ম যা গুগল ক্রোমের জাভাস্ক্রিপ্ট ভি এইট ইঞ্জিনে (V8 Engine) এ তৈরি করা হয়েছে।

এই নোড জে এস ব্যাবহার হয় বিভিন্ন ধরনের ওয়েব অ্যাপলিকেশন তৈরিতে যেমনঃ অনলাইনে ভিডিও দেখার সাইট তৈরিতে, এক পেইজের অ্যাপলিকেশন তৈরিতে বা অন্যান্য ওয়েব অ্যাপলিকেশন তৈরিতে।

এই নোড জে এস একটি মুক্ত উৎস, সম্পূর্ণ ফ্রী এবং এটা সারা বিশ্বের হাজার হাজার ডেভেলপার এর ব্যাবহারের একটি উৎস।

এই টিউটোরিয়ালটি তৈরি করা হয়েছে সফটওয়্যার প্রোগ্রামারদের জন্য যারা নোড জে এস এর ব্যাসিক ও স্থাপত্য ধারনা গুলো সহজ সরল ভাবে শিখতে চায়।

এই টিউটোরিয়ালটি আপনাকে নোড জে এস এর উপাদান গুলো সম্পর্কে উপযুক্ত উদাহারনসহ খুব ভাল ধারনা দিবে।

এই টিউটোরিয়ালটি শুরুর পূর্বে অবশ্যই আপনার জাভাস্ক্রিপ্ট সম্পর্কে বেসিক ধারনা থাকতে হবে কারন আমরা এখন নোড জে এস ব্যাবহার করে একটি ওয়েব অ্যাপ্লিকেশন তৈরি করতে যাচ্ছি। এটা আপনার জন্য আরও ভালো হবে যদি আপনার আরও অন্যান্য ওয়েব প্রযুক্তি যেমন- এইচ টি এম এল (HTML), সি এস এস (CSS) , অ্যাজাক্স (AJAX) ইত্যাদি সম্পর্কেও বেসিক ধারনা থাকে।

আর এই টিউটোরিয়ালে যে উদাহারন গুলো থাকবে তা অবশ্যই নিজে নিজে চেষ্টা করতে হবে।

তাই প্রাথমিক ভাবে নিচে একটা উদাহারন কোড দেওয়া হলঃ


/*Hello World ! My First Programme In Node. Js*/

Console.log (“Hello World !”) ;


 

নোড.জেএস । Node.js – আরইএসটি সম্পন্ন এপিআই

নোড . জে এস । Node.js - আরইএসটি সম্পন্ন এপিআই
রিদওয়ান বিন শামীম

আরইএসটি আর্কিটেকচার কীঃ আরইএসটির মানে হল, রিপ্রেজেন্টেশনাল স্টেট ট্রান্সফার। এটি ওয়েব স্ট্যান্ডার্ডভিত্তিক আর্কিটেকচার এবং এইচটিটিপি প্রটোকল ব্যবহার করে। Roy Fielding এটিকে ২০০০ সালে প্রবর্তন করেন।

আরইএসটি সার্ভার রিসোর্সে এক্সেস নিশ্চিত করে, ক্লায়েন্ট এইচটিটিপি প্রটোকল ব্যবহার করে এর পরিবর্তন ও পরিবর্ধন করে থাকেন। আরইএসটি টেক্সট, জেএসওএন ও এক্সএমএলভিত্তিক রিপ্রেজেন্টেশন ব্যবহার করে রিসোর্স রিপ্রেজেন্ট করতে। এদের মধ্যে জেএসওএন সবচেয়ে জনপ্রিয়।

আরইএসটি ভিত্তিক আর্কিটেকচারে চারটি এইচটিটিপি মেথড ব্যবহার করা হয়,
• গেট
• পুট
• ডিলিট
• পোস্ট

আরইএসটি সম্পন্ন ওয়েব সার্ভারঃ এপ্লিকেশন ও সিস্টেমের প্রটোকল ও স্ট্যান্ডার্ডের সমন্বয়ে ওয়েব সার্ভার গঠিত হয়।

লাইব্রেরীর জন্য আরইএসটি তৈরি করাঃ জেএসওএন ডাটাবেসে users.json নামক ফাইলের ক্ষেত্রে

{
"user1" : {
"name" : "mahesh",
"password" : "password1",
"profession" : "teacher",
"id": 1
},
"user2" : {
"name" : "suresh",
"password" : "password2",
"profession" : "librarian",
"id": 2
},
"user3" : {
"name" : "ramesh",
"password" : "password3",
"profession" : "clerk",
"id": 3
}
}

এসবের ভিত্তিতে যে আরইএসটি এপিআই পাই তাদের তালিকা,

S. N. URI HTTP Method POST body Result
1 listUsers GET empty সব ইউজারের তালিকা দেখায়
2 addUser POST JSON String নতুন ইউজারে বিবরণ সংযুক্তি
3 deleteUser DELETE JSON String বিদ্যমান ইউজার ডিলিট করা
4 :id GET empty ইউজারের বিবরণ প্রদর্শন

লিস্ট ইউজারঃ আমাদের প্রথম আরইএসটি এপিআই listUsers এপিআই server.js ফাইলে নিচের কোড ব্যবহার করে পাই,

var express = require('express');
var app = express();
var fs = require("fs");

app.get('/listUsers', function (req, res) {
fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
console.log( data );
res.end( data );
});
})

var server = app.listen(8081, function () {

var host = server.address().address
var port = server.address().port

console.log("Example app listening at http://%s:%s", host, port)

})

লোকাল মেশিনে নির্দিষ্ট http://127.0.0.1:8081/listUsers এপিআইতে ব্যবহার করে আমরা পাই,

{
"user1" : {
"name" : "mahesh",
"password" : "password1",
"profession" : "teacher",
"id": 1
},
"user2" : {
"name" : "suresh",
"password" : "password2",
"profession" : "librarian",
"id": 2
},
"user3" : {
"name" : "ramesh",
"password" : "password3",
"profession" : "clerk",
"id": 3
}
}

ইউজার সংযুক্ত করাঃ নিচের এপিআই দ্বারা নতুন ইউজার সংযুক্ত করা হয়,

user = {
"user4" : {
"name" : "mohit",
"password" : "password4",
"profession" : "teacher",
"id": 4
}
}

addUser এপিআই দ্বারা ডাটাবেসে নতুন ইউজার সংযুক্ত করা হয়,

var express = require('express');
var app = express();
var fs = require("fs");

var user = {
"user4" : {
"name" : "mohit",
"password" : "password4",
"profession" : "teacher",
"id": 4
}
}

app.get('/addUser', function (req, res) {
// First read existing users.
fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
data = JSON.parse( data );
data["user4"] = user["user4"];
console.log( data );
res.end( JSON.stringify(data));
});
})

var server = app.listen(8081, function () {

var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)

})

লোকাল মেশিনে এপিআইতে http://127.0.0.1:8081/addUsers ব্যবহার করে যে ফলাফল আমরা পাব তা হল,

{ user1:
{ name: 'mahesh',
password: 'password1',
profession: 'teacher',
id: 1 },
user2:
{ name: 'suresh',
password: 'password2',
profession: 'librarian',
id: 2 },
user3:
{ name: 'ramesh',
password: 'password3',
profession: 'clerk',
id: 3 },
user4:
{ name: 'mohit',
password: 'password4',
profession: 'teacher',
id: 4 }
}

শো ডিটেইলঃএর জন্য যে এপিআই ব্যবহার করতে হবে তা হল,

var express = require('express');
var app = express();
var fs = require("fs");

app.get('/:id', function (req, res) {
// First read existing users.
fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
data = JSON.parse( data );
var user = users["user" + req.params.id]
console.log( user );
res.end( JSON.stringify(user));
});
})

var server = app.listen(8081, function () {

var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)

})

উপরের সার্ভিসকে http://127.0.0.1:8081/2 ব্যবহার করে লোকাল মেশিনে কল দেয়াতে হয়।

{
"name":"suresh",
"password":"password2",
"profession":"librarian",
"id":2
}

ইউজার ডিলিট করার জন্যঃ এক্ষেত্রে যে এপিআই ব্যবহৃত হয় তা হল,

var express = require('express');
var app = express();
var fs = require("fs");

var id = 2;

app.get('/deleteUser', function (req, res) {

// First read existing users.
fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
data = JSON.parse( data );
delete data["user" + 2];

console.log( data );
res.end( JSON.stringify(data));
});
})

var server = app.listen(8081, function () {

var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)

})

উপরের সার্ভিসকে http://127.0.0.1:8081/deleteUser ব্যবহার করে লোকাল মেশিনে কল দিলে যে ফলাফল আসবে,

{ user1:
{ name: 'mahesh',
password: 'password1',
profession: 'teacher',
id: 1 },
user3:
{ name: 'ramesh',
password: 'password3',
profession: 'clerk',
id: 3 }
}

তথ্যসূত্রঃ http://www.tutorialspoint.com/nodejs/nodejs_restful_api.htm

নোড . জে এস । Node.js – ওয়েব মডিউল (Web Module)

নড জেএসঃ ওয়েব মডিউল
রিদওয়ান বিন শামীম

ওয়েব সার্ভার কীঃ ওয়েব সার্ভার হল সফটওয়ার এপ্লিকেশন যা এইচটিটিপি ক্লায়েন্টের পাঠানো এইচটিটিপি রিকোয়েস্ট নিয়ন্ত্রণ করে। ওয়েব সার্ভার ইমেজ, স্টাইল শিট ও স্ক্রিপ্টসহ এইচটিএমএল ডকুমেন্ট আদানপ্রদান করে।

বেশিরভাগ ওয়েব সার্ভার স্ক্রিপ্টিং ল্যাঙ্গুয়েজ সমৃদ্ধ সার্ভার সাইড স্ক্রিপ্ট সমর্থন করে যা ডাটাবেস থেকে তথ্য সংগ্রহ, জটিল লজিক সম্পাদন ও পরিশেষে এইচটিটিপি ক্লায়েন্টকে ওয়েব সার্ভারের মাধ্যমে তার ফলাফল প্রেরণ করে থাকে।

এপাচি হল বহুল ব্যবহৃত একটি ওয়েব সার্ভার যা কিনা একটি ওপেন সোর্স প্রকল্প।

ওয়েব এপ্লিকেশন স্থাপত্যঃ এই প্রক্রিয়া চারটি স্তরে বিভক্ত,
• ক্লায়েন্টঃ সার্ভারে এইচটিটিপি রিকোয়েস্ট পাঠাতে পারে এমন ওয়েব ব্রাউজার, মোবাইল ব্রাউজার ও এপ্লিকেশন এই স্তরের আলোচ্য বিষয়।
• সার্ভারঃ এইচটিটিপি রিকোয়েস্ট ইন্টারপ্রিট ও সাড়াদান করার ক্ষেত্রে সার্ভার এই ধাপ সম্পন্ন করে।
• বিজনেসঃ এই লেয়ারে থাকে এপ্লিকেশন সার্ভার যা বিভিন্ন প্রক্রিয়া সম্পন্ন করার জন্য ওয়েব সার্ভারের দ্বারা সম্পাদিত হয়ে আছে। ডাটাবেস বা এক্সটারনাল প্রোগ্রামের মাধ্যমে ডাটা লেয়ারের সাথে সমন্বয় সাধন এই ধাপের কাজ।
• ডাটাঃ ডাটাবেস বা তথ্যের অন্য কোনও উৎস এই ধাপের অন্তর্গত বিষয়।

নড ব্যবহার করে ওয়েব তৈরি করাঃ Node.js http মডিউল তৈরি করে যা সার্ভারের এইচটিটিপি ক্লায়েন্ট বা সার্ভার তৈরিতে ব্যবহৃত হয়। 8081 port মেনে চলে এমন সার্ভারের কাঠামো তৈরি করতে server.js নামের ফাইল তৈরি করতে হবে,

File: server.js
var http = require('http');
var fs = require('fs');
var url = require('url');

// Create a server
http.createServer( function (request, response) {
// Parse the request containing file name
var pathname = url.parse(request.url).pathname;

// Print the name of the file for which request is made.
console.log("Request for " + pathname + " received.");

// Read the requested file content from file system
fs.readFile(pathname.substr(1), function (err, data) {
if (err) {
console.log(err);
// HTTP Status: 404 : NOT FOUND
// Content Type: text/plain
response.writeHead(404, {'Content-Type': 'text/html'});
}else{
//Page found
// HTTP Status: 200 : OK
// Content Type: text/plain
response.writeHead(200, {'Content-Type': 'text/html'});

// Write the content of the file to response body
response.write(data.toString());
}
// Send the response body
response.end();
});
}).listen(8081);

// Console will print the message
console.log('Server running at http://127.0.0.1:8081/');

এখন একই ডিরেক্টরিতে index.htm নামের এইচটিএমএল ফাইল তৈরি করে সংরক্ষণ করি,

File: index.htm
<html>
<head>
<title>Sample Page</title>
</head>
<body>
Hello World!
</body>
</html>

এখন server.js রান করিয়ে ফলাফল দেখি,

$ node server.js

আউটপুট ভেরিফাই করে পাই,

Server running at http://127.0.0.1:8081/

নড জেএস সার্ভারের জন্য রিকোয়েস্ট তৈরি করাঃ এজন্য যেকোনো ব্রাউজারে http://127.0.0.1:8081/index.htm খুলে ফলাফল দেখতে পারি। সার্ভার এন্ডে আউটপুট ভেরিফাই করলে,

Server running at http://127.0.0.1:8081/
Request for /index.htm received.

নড ব্যবহার করে ওয়েব ক্লায়েন্ট তৈরি করাঃ http মডিউল তৈরি করে ওয়েব ক্লায়েন্ট তৈরি করা যায়। নিচের উদাহরণটি দেখি,

client.js নামের ফাইল তৈরি করতে হবে,

File: client.js
var http = require('http');

// Options to be used by request
var options = {
host: 'localhost',
port: '8081',
path: '/index.htm'
};

// Callback function is used to deal with response
var callback = function(response){
// Continuously update stream with data
var body = '';
response.on('data', function(data) {
body += data;
});

response.on('end', function() {
// Data received completely.
console.log(body);
});
}
// Make a request to the server
var req = http.request(options, callback);
req.end();

এখন, server.js ছাড়া অন্য কম্যান্ড টার্মিনাল ব্যবহার করে client.js রান করালে ফলাফল,

$ node client.js

আউটপুট ভেরিফাই করে আমরা পেতে পারি,

<html>
<head>
<title>Sample Page</title>
</head>
<body>
Hello World!
</body>
</html>

সার্ভার এন্ডে আউটপুট ভেরিফাই করে পাই,

Server running at http://127.0.0.1:8081/
Request for /index.htm received.

তথ্যসূত্রঃ http://www.tutorialspoint.com/nodejs/nodejs_web_module.htm

নোড . জে এস । Node.js – ইউটিলিটি মডিউল (Utility Modules)

নোড . জে এস । Node.js - ইউটিলিটি মডিউল
রিদওয়ান বিন শামীম

নড জেএস মডিউল লাইব্রেরিতে বেশ কিছু সংখ্যক ইউটিলিটি মডিউল আছে। এই মডিউলগুলো খুব কমন আর নড ভিত্তিক এপ্লিকেশনে প্রচুর ব্যবহৃত হয়ে থাকে।

S.N. মডিউলের নাম ও বিবরণ
1 ওএস মডিউল
অপারেটিং সিস্টেম সংক্রান্ত ইউটিলিটি ফাংশনের ব্যবস্থা করে।
2 পাথ মডিউল
ফাইল পাথ নিয়ন্ত্রণ ও ব্যবস্থাপনার সুযোগ দেয়।
3 নেট মডিউল
সার্ভার ও ক্লায়েন্টকে স্ট্রিম রূপে প্রকাশ করে। নেটওয়ার্ক রাপার হিসেবে কাজ করে।
4 ডিএনএস মডিউল
প্রকৃত ডিএনএস লুকআপের জন্য ফাংশনের ব্যবস্থা করে, অন্তর্নিহিত অপারেটিং সিস্টেমের নাম রেজুলেসনের ফাংশনালিটি ব্যবহারের জন্য
5 ডোমেইন মডিউল
মাল্টিপল আই/ও অপারেশনকে সিঙ্গেল গ্রুপ হিসেবে নিয়ন্ত্রণের সুযোগ সৃষ্টি করে।

তথ্যসূত্রঃ http://www.tutorialspoint.com/nodejs/nodejs_utitlity_module.htm

নোড.জেএস : Node.js – বাফার

রিদওয়ান বিন শামীম

 

পিউর জাভাস্ক্রিপ্ট ইউনিকোড বান্ধব কিন্তু বাইনারি ডাটায় তেমন নিখুঁত নয়। টিসিপি সিস্টেম বা ফাইল স্ট্রিম নিয়ে কাজ করার সময় অক্টেট স্ট্রিম নিয়ন্ত্রণের প্রয়োজন হয়। নড বাফার ক্লাস প্রভাইড করে যা কিনা পূর্ণসংখ্যার অ্যারির সদৃশ ‘র’ ডাটা সংরক্ষণের সুযোগ দেয় কিন্তু ভি৮ হিপের(V8 heap)বাইরে ‘র’ মেমোরি এলোকেশনের সাথে সুসংহত থাকে।

বাফার ক্লাস গ্লোবাল ক্লাস, এটি বাফার মডিউল ইমপোর্ট করা ছাড়াই এপ্লিকেশনে ব্যবহার করা সম্ভব।

বাফার তৈরি করা

কয়েকটি উপায়ে বাফার তৈরি করা যেতে পারে,

প্রথম পদ্ধতিঃ ১০ অক্টেটের আনইনিসিয়েটেড বাফার তৈরির সিনট্যাক্স,


var buf = new Buffer(10);


 

দ্বিতীয় পদ্ধতিঃ প্রদত্ত অ্যারি থেকে বাফার তৈরির সিনট্যাক্স,


var buf = new Buffer([10, 20, 30, 40, 50]);


 

তৃতীয় পদ্ধতিঃ প্রদত্ত স্ট্রিং থেকে বাফার তৈরির সিনট্যাক্স ও অপশনাল এনকোডিং টাইপ,


var buf = new Buffer("Simply Easy Learning", "utf-8");


 

যদিও ডিফল্ট এনকোডিং হল "utf8" , আমরা "ascii", "utf8", "utf16le", "ucs2", "base64" বা "hex" ইত্যাদিও ব্যবহার করতে পারি।

বাফারে লেখা

নড বাফারে লেখার জন্য সিনট্যাক্স,


buf.write(string[, offset][, length][, encoding])


 

প্যারামিটারঃ সংশ্লিষ্ট প্যারামিটারগুলো হল,

  • স্ট্রিং
  • অফসেট
  • লেন্থ
  • এনকোডিং

রিটার্ন ভ্যালু

এই প্রক্রিয়া লিখিত অক্টেটের নাম্বার রিটার্ন করায়। বাফারে পুরো স্ট্রিংএর জায়গা না থাকলে আংশিক লেখা হয়। যেমন,


buf = new Buffer(256);
len = buf.write("Simply Easy Learning");

console.log("Octets written : "+ len);


 

এটি সঠিকভাবে সম্পাদিত হলে তা যে ফলাফল দেখাবে তা হল,


Octets written : 20


 

বাফার থেকে পড়াঃ এজন্য প্রয়োজনীয় সিনট্যাক্স হল,
buf.toString([encoding][, start][, end])

এর প্যারামিটারগুলো হল,

  • এনকোডিং
  • স্টার্ট
  • এন্ড

উদাহরণ,


 buf = new Buffer(26);
 for (var i = 0 ; i < 26 ; i++) {
 buf[i] = i + 97;
 }
console.log( buf.toString('ascii')); // outputs: abcdefghijklmnopqrstuvwxyz
 console.log( buf.toString('ascii',0,5)); // outputs: abcde
 console.log( buf.toString('utf8',0,5)); // outputs: abcde
 console.log( buf.toString(undefined,0,5)); // encoding defaults to 'utf8', outputs abcde
 এটি সঠিকভাবে সম্পাদিত হলে তা যে ফলাফল দেখাবে তা হল,
 abcdefghijklmnopqrstuvwxyz
 abcde
 abcde
 abcde

 

বাফার থেকে জেএসওএনে রূপান্তরের সিনট্যাক্স,


buf.toJSON()


 

এটির উদাহরণ,


var buf = new Buffer('Simply Easy Learning');
 var json = buf.toJSON(buf);
console.log(json);

 

এটি সঠিকভাবে সম্পাদিত হলে তা যে ফলাফল দেখাবে তা হল,


[ 83, 105, 109, 112, 108, 121, 32, 69, 97, 115, 121, 32, 76, 101, 97, 114, 110, 105, 110, 103 ]


 

কনকাটেনাট বাফারঃ কনকাটেনাট নড বাফার থেকে সিঙ্গেল নড বাফারে রূপান্তর করার সিনট্যাক্স,


Buffer.concat(list[, totalLength])


 

এর প্যারামিটারগুলো হল,

  • লিস্ট
  • টোটাললেন্থ

রিটার্ন ভ্যালুঃ বাফার ইন্সটেন্স রিটার্ন করায়।
উদাহরণ,


var buffer1 = new Buffer('TutorialsPoint ');
 var buffer2 = new Buffer('Simply Easy Learning');
 var buffer3 = Buffer.concat([buffer1,buffer2]);
 console.log("buffer3 content: " + buffer3.toString());

 

এটি সঠিকভাবে সম্পাদিত হলে তা যে ফলাফল দেখাবে তা হল,


buffer3 content: TutorialsPoint Simply Easy Learning

 

বাফার তুলনাঃ এর জন্য ব্যবহৃত সিনট্যাক্স,


buf.compare(otherBuffer);

 

উদাহরণ,


var buffer1 = new Buffer('ABC');
 var buffer2 = new Buffer('ABCD');
 var result = buffer1.compare(buffer2);
if(result < 0) {
 console.log(buffer1 +" comes before " + buffer2);
 }else if(result == 0){
 console.log(buffer1 +" is same as " + buffer2);
 }else {
 console.log(buffer1 +" comes after " + buffer2);
 }

 

এটি সঠিকভাবে সম্পাদিত হলে তা যে ফলাফল দেখাবে তা হল,


ABC comes before ABCD


 

বাফার কপি করাঃ এর সিনট্যাক্স হল,


buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])


 

এর প্যারামিটারগুলো হল,

  • টার্গেট বাফার
  • টার্গেট স্টার্ট
  • সোর্স স্টার্ট
  • সোর্স এন্ড

উদাহরণ,


var buffer1 = new Buffer('ABC');
 //copy a buffer
 var buffer2 = new Buffer(3);
 buffer1.copy(buffer2);
 console.log("buffer2 content: " + buffer2.toString());

 

সঠিকভাবে সম্পাদিত হলে এটি ফলাফল দেখাবে,


buffer2 content: ABC

 

স্লাইস বাফারঃ এর সিনট্যাক্স হল,


buf.slice([start][, end])

 

প্যারামিটারঃ এর প্যারামিটার কোল,

  • স্টার্ট
  • এন্ড

উদাহরণ,


var buffer1 = new Buffer('TutorialsPoint');
 //slicing a buffer
 var buffer2 = buffer1.slice(0,9);
 console.log("buffer2 content: " + buffer2.toString());

 

সঠিকভাবে সম্পাদিত হলে এটি ফলাফল দেখাবে,


buffer2 content: Tutorials


 

বাফার লেন্থঃ এর জন্য আমাদের যে সিনট্যাক্স ব্যবহার করতে হবে তা হল,


buf.length;


 

উদাহরণ,


var buffer = new Buffer('TutorialsPoint');
//length of the buffer
console.log("buffer length: " + buffer.length);


 

সঠিকভাবে সম্পাদিত হলে এটি ফলাফল দেখাবে,


buffer length: 14


 

রেফারেন্স

নড জেএসে প্রাপ্ত বাফার মডিউলের রেফারেন্স নিচে দেয়া হল,

SN মেথড

  1. new Buffer(size)
  2. new Buffer(buffer)
  3. new Buffer(str[, encoding])
  4. buf.length
  5. buf.write(string[, offset][, length][, encoding])
  6. buf.writeUIntLE(value, offset, byteLength[, noAssert])
  7. buf.writeUIntBE(value, offset, byteLength[, noAssert])
  8. buf.writeIntLE(value, offset, byteLength[, noAssert])
  9. buf.writeIntBE(value, offset, byteLength[, noAssert])
  10. buf.readUIntLE(offset, byteLength[, noAssert])
  11. buf.readUIntBE(offset, byteLength[, noAssert])
  12. buf.readIntLE(offset, byteLength[, noAssert])
  13. buf.readIntBE(offset, byteLength[, noAssert])
  14. buf.toString([encoding][, start][, end])
  15. buf.toJSON()
  16. buf[index]
  17. buf.equals(otherBuffer)
  18. buf.compare(otherBuffer)
  19. buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])
  20. buf.slice([start][, end])
  21. buf.readUInt8(offset[, noAssert])
  22. buf.readUInt16LE(offset[, noAssert])
  23. buf.readUInt16BE(offset[, noAssert])
  24. buf.readUInt32LE(offset[, noAssert])
  25. buf.readUInt32BE(offset[, noAssert])
  26. buf.readInt8(offset[, noAssert])
  27. buf.readInt16LE(offset[, noAssert])
  28. buf.readInt16BE(offset[, noAssert])
  29. buf.readInt32LE(offset[, noAssert])
  30. buf.readInt32BE(offset[, noAssert])
  31. buf.readFloatLE(offset[, noAssert])
  32. buf.readFloatBE(offset[, noAssert])
  33. buf.readDoubleLE(offset[, noAssert])
  34. buf.readDoubleBE(offset[, noAssert])
  35. buf.writeUInt8(value, offset[, noAssert])
  36. buf.writeUInt16LE(value, offset[, noAssert])
  37. buf.writeUInt16BE(value, offset[, noAssert])
  38. buf.writeUInt32LE(value, offset[, noAssert])
  39. buf.writeUInt32BE(value, offset[, noAssert])
  40. buf.writeInt8(value, offset[, noAssert])
  41. buf.writeInt16LE(value, offset[, noAssert])
  42. buf.writeInt16BE(value, offset[, noAssert])
  43. buf.writeInt32LE(value, offset[, noAssert])
  44. buf.writeInt32BE(value, offset[, noAssert])
  45. buf.writeFloatLE(value, offset[, noAssert])
  46. buf.writeFloatBE(value, offset[, noAssert])
  47. buf.writeDoubleLE(value, offset[, noAssert])
  48. buf.writeDoubleBE(value, offset[, noAssert])
  49. buf.fill(value[, offset][, end])

ক্লাস মেথড

SN মেথড

  1.   Buffer.isEncoding(encoding)
  2. Buffer.isBuffer(obj)
  3. Buffer.byteLength(string[, encoding])
  4. Buffer.concat(list[, totalLength])
  5. Buffer.compare(buf1, buf2)

 

নোড . জে এস । Node.js – ইভেন্ট ইমিটার (Event Emitter)

নড জেএসঃ ইভেন্ট ইমিটার
রিদওয়ান বিন শামীম

নড ইমিট ইভেন্টের অনেক অবজেক্ট যেমন net.Server এর সাথে কোনও সদৃশ পিয়ার যুক্ত হলে কোনও ইভেন্টকে ইমিট করে। fs.readStream কোনও ইভেন্টকে ইমিট করে যখন এর ফাইল খোলা থাকে। events.EventEmitter সব ইভেন্ট ইমিট হওয়ার উদাহরণ।

ইভেন্ট ইমিটারের শ্রেণীঃ ইভেন্ট ইমিটারের শ্রেণী events module তে ব্যপিত থাকে।

নিচে উদাহরণ দেয়া হল,

// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

ইভেন্ট ইমিটারের কোনও পর্যায়ে ভুল দেখা দিলে 'error' ইভেন্ট দেখানো হয়। নতুন লিসনার যোগ হলে 'newListener' ইভেন্ট আর কোনও লিসনার মুছে ফেললে 'removeListener' ইভেন্ট প্রদর্শিত হয়। ইভেন্ট ইমিটার on ও emit. এর মত অনেক বৈশিষ্ট্য ধারণ করে।

প্রক্রিয়াঃ

S.N. প্রক্রিয়া
1 addListener(event, listener)

2 on(event, listener)

3 once(event, listener)

4 removeListener(event, listener)

5 removeAllListeners([event])

6 setMaxListeners(n)

7 listeners(event)

8 emit(event, [arg1], [arg2], [...])

ক্লাস মেথডঃ
S.N. প্রক্রিয়া
1 listenerCount(emitter, event)

ইভেন্টসঃ
S.No. ইভেন্ট
1 newListener
• event – ইভেন্ট নেমের স্ট্রিং
• listener – ইভেন্ট হ্যান্ডেলার ফাংশন
2 removeListener
• event - ইভেন্ট নেমের স্ট্রিং
• listener - ইভেন্ট হ্যান্ডেলার ফাংশন

উদাহরণঃ নিচের Node.js কোড দ্বারা main.js নামের ফাইল তৈরি করি,

var events = require('events');
var eventEmitter = new events.EventEmitter();

// listener #1
var listner1 = function listner1() {
console.log('listner1 executed.');
}

// listener #2
var listner2 = function listner2() {
console.log('listner2 executed.');
}

// Bind the connection event with the listner1 function
eventEmitter.addListener('connection', listner1);

// Bind the connection event with the listner2 function
eventEmitter.on('connection', listner2);

var eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");

// Fire the connection event
eventEmitter.emit('connection');

// Remove the binding of listner1 function
eventEmitter.removeListener('connection', listner1);
console.log("Listner1 will not listen now.");

// Fire the connection event
eventEmitter.emit('connection');

eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");

console.log("Program Ended.");

এখন main.js রান করালে,

$ node main.js

আউটপুট ভেরিফাই করে দেখতে পারি,

2 Listner(s) listening to connection event
listner1 executed.
listner2 executed.
Listner1 will not listen now.
listner2 executed.
1 Listner(s) listening to connection event
Program Ended.

তথ্যসূত্রঃ http://www.tutorialspoint.com/nodejs/nodejs_event_emitter.htm

নোড.জেএস । Node.js – ইভেন্ট লুপ (Node.js – Event Loop)

রিদওয়ান বিন শামীম

 

নড জেএস একক থ্রেড এপ্লিকেশন কিন্তু এটি ইভেন্ট ও কলব্যাকের সমন্বয়ের ধারনায় সমর্থন করে। যেহেতু নড জেএসের প্রতিটি এপিআই অসমন্বিত ও একক থ্রেডের, তাই এরা ফাংশন কল ব্যবহার করে সমন্বয় সাধনের জন্য। নড অবজারভার প্যাটার্ন ব্যবহার করে। নড থ্রেড ইভেন্ট লুপ রাখে, যখন কোনও টাস্ক সম্পন্ন হয় এটি সংশ্লিষ্ট ইভেন্টকে বাতিল করে দেয় যা কিনা ইভেন্ট লিসনার ফাংশনকে টাস্ক সম্পাদনের সিগন্যাল পাঠায়।

ইভেন্টভিত্তিক প্রোগ্রামিং

নড জেএস প্রচুর ইভেন্ট ব্যবহার করে আর এজন্যই এজাতীয় অন্যান্য প্রযুক্তির চেয়ে এটি অনেক বেশি দ্রুত। নড এর সার্ভার শুরু করার সাথে সাথে এর চলকও শুরু হয়ে যায়, ফাংশন ঘোষণা করে এবং ইভেন্ট সম্পন্ন হওয়ার জন্য অপেক্ষা করে।

ইভেন্টভিত্তিক এপ্লিকেশনে একটি মেইন লুপ থাকে যা ইভেন্টের সন্ধান করে, পাওয়া গেলে তাকে কলব্যাক ফাংশনের সাথে সমন্বয় করিয়ে দেয়।

Event Driven Programming

ইভেন্টকে কলব্যাকের সমতুল্য মনে হতে পারে, মূলত পার্থক্য হল, অসমন্বিত ফাংশনের ফলাফল ফেরত আসলে কলব্যাক ফাংশন কাজ করে, আর ইভেন্ট অবজারভার প্যাটার্নে কাজ করে। যেসব ফাংশন ইভেন্টকে শোনে তারা অবজারভাররূপে কাজ করে। কোনও ইভেন্ট বাদ পরলে তার লিসনার ফাংশন সম্পাদন শুরু করে।

নড জেএসের অনেকগুলি বিল্ট ইন ইভেন্ট আছে যা events মডিউলের মাধ্যমে পাওয়া যায় এবং EventEmitter ক্লাস ইভেন্ট ও ইভেন্ট লিসনারের মধ্যে সমন্বয় সাধন করে।


// Import events module
 var events = require('events');
 // Create an eventEmitter object
 var eventEmitter = new events.EventEmitter();

 

নিচের সিনট্যাক্স ইভেন্ট ও ইভেন্ট হ্যান্ডলারের মধ্যে সমন্বয় সাধন করে,


// Bind event and even handler as follows
 eventEmitter.on('eventName', eventHandler);

 

প্রোগ্রামিঙের মাধ্যমে কোনও ইভেন্ট বাদ দিতে,


// Fire an event
 eventEmitter.emit('eventName');

 

উদাহরণ,
main.js নামের জেএস ফাইল তৈরি করি যাতে নিচের কোড থাকবে,


// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();
// Create an event handler as follows
var connectHandler = function connected() {
     console.log('connection succesful.'); 

     // Fire the data_received event 
     eventEmitter.emit('data_received');
}
// Bind the connection event with the handler
eventEmitter.on('connection', connectHandler);
 
// Bind the data_received event with the anonymous function
eventEmitter.on('data_received', function(){
     console.log('data received succesfully.');
});
// Fire the connection event 
eventEmitter.emit('connection');
console.log("Program Ended.");

 

প্রোগ্রামটি রান করিয়ে আউটপুট পাব,


$ mnode main.js

 

এটি যে ফলাফল দেখাবে,


 connection succesful.
 data received succesfully.
 Program Ended.

 

যেভাবে নড এপ্লিকেশন কাজ করেঃ অসমন্বিত ফাংশন শেষ প্যারামিটাররূপে কলব্যাককে গ্রহণ করে, কলব্যাক এররকে প্রথম প্যারামিটাররূপে গ্রহণ করে। পূর্বের উদাহরণের মাধ্যমে আবার দেখা যাক, input.txt নামে একটি ফাইল তৈরি করি, যাতে নিচের কোড থাকবে।


Tutorials Point is giving self learning content
 to teach the world in simple and easy way!!!!!

 

main.js নামের ফাইল তৈরি করি যাতে নিচের কোড থাকবে।


var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
   if (err){
      console.log(err.stack);
      return;
   }
   console.log(data.toString());
});
console.log("Program Ended");

এখানে fs.readFile() অসমন্বিত ফাংশন যার কাজ হল ফাইল পড়া। এক্ষেত্রে ভুল হলে err অবজেক্ট দ্বারা সেটি readFile এর মাধ্যমে কলব্যাক ফাংশনে যাবে।

 Program Ended
 Tutorials Point is giving self learning content
 to teach the world in simple and easy way!!!!!

 

 

নোড.জেএস – প্রথম এপ্লিকেশন (Node.js – First Application)

রিদওয়ান বিন শামীম

 

নড জেএসের মাধ্যমে ‘হ্যালো ওয়ার্ল্ড’ তৈরির আগে নড জেএসের এপ্লিকেশনের অংশগুলো দেখে নেয়া যাক, এর তিনটি খুব গুরুত্বপূর্ণ অংশ আছে,

  • ইমপোর্ট রিকোয়ারড মডিউল
  • ক্রিয়েটিভ সার্ভার
  • রিড রিকোয়েস্ট, রিটার্ন রেসপন্স

 

নড জেএস এপ্লিকেশন তৈরি করা

প্রথম ধাপ, প্রয়োজনীয় মডিউল ইমপোর্ট করা

আমরা require ডিরেকটিভ ব্যবহার করব এইচটিটিপি মডিউল লোড করতে, আর রিটার্নড এইচটিটিপি ইন্সটেন্সকে এইচটিটিপি ভেরিয়েবলে নিচের মত করে স্টোর করব,


var http = require("http");

 

দ্বিতীয় ধাপ, সার্ভার তৈরি করা

পরবর্তী ধাপে আমরা তৈরি করা এইচটিটিপি ইন্সটেন্স ব্যবহার করি ও http.createServer() তে কল করা হয় সার্ভার ইনটেন্স তৈরি করতে। এরপরlisten মেথড ব্যবহার করে আমরা একে port 8081এর সাথে সংযুক্ত করি। একটি ফাংশনকে প্যারামিটার রিকোয়েস্ট ও রেসপন্সসহ পাস করানো হয়। নিচের ব্যবহারিক প্রয়োগ ‘হ্যালো ওয়ার্ল্ড’ ফলাফল দেখাবে।


http.createServer(function (request, response) {
     // Send the HTTP header
     // HTTP Status: 200 : OK
     // Content Type: text/plain
     response.writeHead(200, {'Content-Type': 'text/plain'});
     // Send the response body as "Hello World"
     response.end('Hello World\n');
}).listen(8081);
// Console will print the message
console.log('Server running at http://127.0.0.1:8081/');

 

উপরের কোড এমন এইচটিটিপি সার্ভার তৈরির জন্য যথেষ্ট যা লোকাল মেশিনের 8081 portএর সাথে সমন্বয় সাধন করে।

 

তৃতীয় ধাপ, রিকোয়েস্ট ও রেসপন্স টেস্ট করা

main.js ফাইলে পূর্বে উল্লেখিত দুটি ধাপের সমন্বয় করে নিচের নত করে এইচটিটিপি সার্ভার চালু করতে হয়,


var http = require("http");
http.createServer(function (request, response) {
    // Send the HTTP header
    // HTTP Status: 200 : OK
    // Content Type: text/plain
    response.writeHead(200, {'Content-Type': 'text/plain'});
    // Send the response body as "Hello World"
    response.end('Hello World\n');
}).listen(8081);
// Console will print the message
console.log('Server running at http://127.0.0.1:8081/');

 

এখন সার্ভার চালুর জন্য main.jsকে সম্পাদন করতে হয় নিচের মত করে,


$ node main.js

 

আউটপুট ভেরিফাই করলে দেখব, সার্ভার চালু হয়ে গেছে।


Server running at http://127.0.0.1:8081/

 

নড জেএস সার্ভারে রিকোয়েস্ট করা

যেকোনো ব্রাউজারে http://127.0.0.1:8081/ ওপেন করে রেজাল্ট দেখব, ‘হ্যালো ওয়ার্ল্ড’ ।

Node.js server

অভিনন্দন! আমাদের প্রথম এইচটিটিপি সার্ভার তৈরি ও চালু হল যা port 8081 এর সকল এইচটিটিপি রিকোয়েস্টের সাড়া দেয়।

 

নোড.জেএস – এনপিএম (Node.js – NPM)

রিদওয়ান বিন শামীম

 

নড প্যাকেজ ম্যানেজার বা এনপিএম দুটি ফাংশনালিটির প্রবর্তন করে,

  • নড জেএস প্যাকেজ বা মডিউলের জন্য অনলাইন সংগ্রহস্থল তৈরি করে যা search.nodejs.orgতে খোঁজা হবে।
  • নড জেএস প্যাকেজ ইন্সটলের জন্য কম্যান্ড লাইন ইউটিলিটি, নড জেএস প্যাকেজের ভার্সন ও সংশ্লিষ্ট নির্ভরতা বিষয়ক ব্যবস্থাপনা নিয়ন্ত্রণ করে।

এনপিএম v0.6.3 এর পরবর্তী সংস্করণগুলোতে নড জেএস ইন্সটলেশন প্যাকেজের সাথে বাণ্ডিল আকারে আসে। ভেরিফাই করার জন্য কনসোল ওপেন করে নিচের কম্যান্ড লিখে দেখতে পারি,


 $ npm --version
 2.7.1

 

যদি এনপিএমের পুরনো সংস্করণ ব্যবহার করে থাকি তাহলে এটি আপডেট করা অনেক সহজ হবে, নিচের কম্যান্ড ব্যবহার করে আমরা এটি করতে পারি,


$ sudo npm install npm -g
 /usr/bin/npm -> /usr/lib/node_modules/npm/bin/npm-cli.js
 npm@2.7.1 /usr/lib/node_modules/npm

 

এনপিএম ব্যবহার করে মডিউল ইন্সটল করা

এজন্য একটি সহজ সিনট্যাক্স আমরা ব্যবহার করতে পারি,


$ npm install <Module Name>

 

যেমন, নিচের কম্যান্ড express নামের একটি পরিচিত নড জেএস ওয়েব ফ্রেমওয়ার্ক মডিউল ইন্সটলের জন্য ব্যবহৃত হতে পারে,


$ npm install express

 

এখন আমরা জেএস ফাইলে এই মডিউল ব্যবহার করতে পারব,


var express = require('express');

 

গ্লোবাল বনাম লোকাল ইন্সটলেশন

বাই ডিফল্ট এনপিএম যেকোনো ডিপেন্ডেন্সিকে লোকাল মোডে ইন্সটল করে। এখানে লোকাল মোড বলতে বোঝায় node_modules ডিরেক্টরিতে প্যাকেজ ইন্সটলেশন যা কিনা নড জেএস এপ্লিকেশন যে ফোল্ডারে আছে সেখানে বিদ্যমান। লোকাল মোডের প্যাকেজগুলো require() মেথডে প্রবেশযোগ্য। যেমন, এক্সপ্রেস মডিউল ইন্সটল করার সময় এটি কারেন্ট ডিরেক্টরিতে node_modules ডিরেক্টরি তৈরি করেছে।


$ ls -l
 total 0
 drwxr-xr-x 3 root root 20 Mar 17 02:23 node_modules

 

অন্যভাবে, লোকালভাবে ইন্সটলড মডিউলকে আমরা npm ls কম্যান্ড ব্যবহার করে তালিকাবদ্ধ করতে পারি,

গ্লোবালভাবে ইন্সটলড প্যাকেজ বা ডিপেন্ডেন্সি সিস্টেম ডিরেক্টরিতে সংরক্ষিত থাকে। এসব ডিপেন্ডেন্সি যেকোনো নড জেএসের সিএলআই বা কম্যান্ড লাইন ইন্টারফেস ফাংশনে ব্যবহৃত হতে পারে কিন্তু require()ব্যবহার করে নড এপ্লিকেশনে সরাসরি ইমপোর্ট করা যায় না। গ্লোবাল ইন্সটলেশন ব্যবহার করে এক্সপ্রেস মডিউল ইন্সটল করা যাক,


$ npm install express -g

 

এটি একই ফলাফল দেবে কিন্তু মডিউল গ্লোবালি ইন্সটলড হবে। এখানে প্রথম লাইন মডিউলের ভার্সন ও ইন্সটলের লোকেশন নির্দেশ করবে।


express@4.12.2 /usr/lib/node_modules/express
 ├── merge-descriptors@1.0.0
 ├── utils-merge@1.0.0
 ├── cookie-signature@1.0.6
 ├── methods@1.1.1
 ├── fresh@0.2.4
 ├── cookie@0.1.2
 ├── escape-html@1.0.1
 ├── range-parser@1.0.2
 ├── content-type@1.0.1
 ├── finalhandler@0.3.3
 ├── vary@1.0.0
 ├── parseurl@1.3.0
 ├── content-disposition@0.5.0
 ├── path-to-regexp@0.1.3
 ├── depd@1.0.0
 ├── qs@2.3.3
 ├── on-finished@2.2.0 (ee-first@1.1.0)
 ├── etag@1.5.1 (crc@3.2.1)
 ├── debug@2.1.3 (ms@0.7.0)
 ├── proxy-addr@1.0.7 (forwarded@0.1.0, ipaddr.js@0.1.9)
 ├── send@0.12.1 (destroy@1.0.3, ms@0.7.0, mime@1.3.4)
 ├── serve-static@1.9.2 (send@0.12.2)
 ├── accepts@1.2.5 (negotiator@0.5.1, mime-types@2.0.10)
 └── type-is@1.6.1 (media-typer@0.3.0, mime-types@2.0.10)

 

গ্লোবালি ইন্সটলড সব মডিউল চেক করে দেখতে,


$ npm ls -g

 

package.jsonব্যবহারঃ package.json যেকোনো নড এপ্লিকেশন বা মডিউলের রুট ডিরেক্টরিতে থাকে এবং প্যাকেজের বৈশিষ্ট্য বিবৃত করে। node_modules/express/তে অবস্থিত এক্সপ্রেস প্যাকেজের package.json খুলে আমরা পাই,


{
  "name": "express",
  "description": "Fast, unopinionated, minimalist web framework",
  "version": "4.11.2",
  "author": {
    "name": "TJ Holowaychuk",
    "email": "tj@vision-media.ca"
  },
  "contributors": [
    {
      "name": "Aaron Heckmann",
      "email": "aaron.heckmann+github@gmail.com"
    },
    {
      "name": "Ciaran Jessup",
      "email": "ciaranj@gmail.com"
    },
    {
      "name": "Douglas Christopher Wilson",
      "email": "doug@somethingdoug.com"
    },
    {
      "name": "Guillermo Rauch",
      "email": "rauchg@gmail.com"
    },
    {
      "name": "Jonathan Ong",
      "email": "me@jongleberry.com"
    },
    {
      "name": "Roman Shtylman",
      "email": "shtylman+expressjs@gmail.com"
    },
    {
      "name": "Young Jae Sim",
      "email": "hanul@hanul.me"
    }
  ],
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "https://github.com/strongloop/express"
  },
  "homepage": "http://expressjs.com/",
  "keywords": [
    "express",
    "framework",
    "sinatra",
    "web",
    "rest",
    "restful",
    "router",
    "app",
    "api"
  ],
  "dependencies": {
    "accepts": "~1.2.3",
    "content-disposition": "0.5.0",
    "cookie-signature": "1.0.5",
    "debug": "~2.1.1",
    "depd": "~1.0.0",
    "escape-html": "1.0.1",
    "etag": "~1.5.1",
    "finalhandler": "0.3.3",
    "fresh": "0.2.4",
    "media-typer": "0.3.0",
    "methods": "~1.1.1",
    "on-finished": "~2.2.0",
    "parseurl": "~1.3.0",
    "path-to-regexp": "0.1.3",
    "proxy-addr": "~1.0.6",
    "qs": "2.3.3",
    "range-parser": "~1.0.2",
    "send": "0.11.1",
    "serve-static": "~1.8.1",
    "type-is": "~1.5.6",
    "vary": "~1.0.0",
    "cookie": "0.1.2",
    "merge-descriptors": "0.0.2",
    "utils-merge": "1.0.0"
  },
  "devDependencies": {
    "after": "0.8.1",
    "ejs": "2.1.4",
    "istanbul": "0.3.5",
    "marked": "0.3.3",
    "mocha": "~2.1.0",
    "should": "~4.6.2",
    "supertest": "~0.15.0",
    "hjs": "~0.0.6",
    "body-parser": "~1.11.0",
    "connect-redis": "~2.2.0",
    "cookie-parser": "~1.3.3",
    "express-session": "~1.10.2",
    "jade": "~1.9.1",
    "method-override": "~2.3.1",
    "morgan": "~1.5.1",
    "multiparty": "~4.1.1",
    "vhost": "~3.0.0"
  },
  "engines": {
    "node": ">= 0.10.0"
  },
  "files": [
    "LICENSE",
    "History.md",
    "Readme.md",
    "index.js",
    "lib/"
  ],
  "scripts": {
    "test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/",
    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
    "test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/",
    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/"
  },
  "gitHead": "63ab25579bda70b4927a179b580a9c580b6c7ada",
  "bugs": {
    "url": "https://github.com/strongloop/express/issues"
  },
  "_id": "express@4.11.2",
  "_shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
  "_from": "express@*",
  "_npmVersion": "1.4.28",
  "_npmUser": {
    "name": "dougwilson",
    "email": "doug@somethingdoug.com"
  },
  "maintainers": [
    {
      "name": "tjholowaychuk",
      "email": "tj@vision-media.ca"
    },
    {
      "name": "jongleberry",
      "email": "jonathanrichardong@gmail.com"
    },
    {
      "name": "shtylman",
      "email": "shtylman@gmail.com"
    },
    {
      "name": "dougwilson",
      "email": "doug@somethingdoug.com"
    },
    {
      "name": "aredridel",
      "email": "aredridel@nbtsc.org"
    },
    {
      "name": "strongloop",
      "email": "callback@strongloop.com"
    },
    {
      "name": "rfeng",
      "email": "enjoyjava@gmail.com"
    }
  ],
  "dist": {
    "shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
    "tarball": "http://registry.npmjs.org/express/-/express-4.11.2.tgz"
  },
  "directories": {},
  "_resolved": "https://registry.npmjs.org/express/-/express-4.11.2.tgz",
  "readme": "ERROR: No README data found!"
}

 

package.jsonএর এট্রিবিউট

  • name – প্যাকেজের নাম
  • version – প্যাকেজের ভার্সন
  • description – প্যাকেজের বর্ণনা
  • homepage – প্যাকেজের হোমপেজ
  • author – প্যাকেজের অথর
  • contributors – প্যাকেজের কন্ট্রিবিউটারের নাম
  • dependencies – ডিপেনডেন্সি লিস্ট
  • repository – প্যাকেজের সংগ্রহস্থলের প্রকরণ ও ইউআরএল
  • main – প্যাকেজের এন্ট্রি পয়েন্ট
  • keywords – কী ওয়ার্ড

 

মডিউল আনইন্সটল করতে

এজন্য কম্যান্ড ব্যবহার করতে পারি,


$ npm uninstall express


 

আনইন্সটল করে of /node_modules/ ডিরেক্টরি থেকে অথবা নিচের কম্যান্ড ব্যবহার করে ভেরিফাই করতে পারি


$ npm ls


 

 

মডিউল আপডেট করতে

package.json আপডেট করে ডিপেন্ডেন্সি ভার্সন পরিবর্তন করে এই কম্যান্ড রান করাতে হয়,


$ npm update express

 

মডিউল সার্চ করতে

এনপিএম ব্যবহার করে প্যাকেজের নাম সার্চ করতে হয়।


$ npm search express


 

মডিউল তৈরি করতে

এনপিএম ব্যবহার করে package.json এর কাঠামো তৈরি করা হয়,


$ npm init
 This utility will walk you through creating a package.json file.
 It only covers the most common items, and tries to guess sane defaults.
See 'npm help json' for definitive documentation on these fields
 and exactly what they do.
Use 'npm install <pkg> --save' afterwards to install a package and
 save it as a dependency in the package.json file.
Press ^C at any time to quit.
 name: (webmaster)

 

ভ্যালিড ইমেইল এড্রেসসহ এনপিএম সংগ্রহস্থল সাইটে রেজিস্ট্রেশন করার জন্য কম্যান্ড,


$ npm adduser
 Username: mcmohd
 Password:
 Email: (this IS public) mcmohd@gmail.com

 

মডিউল পাবলিশ করতে যে কোড ব্যবহার করব,


$ npm publish

 

সবকিছু ঠিকঠাকভাবে সম্পন্ন হলে মডিউলটি পাবলিশ হয়ে যাবেএবং এনপিএমের মাধ্যমে ইন্সটলের যোগ্য হবে অন্যান্য নড জেএস মডিউলের মত।

 

নড.জেএস এর পরিবেশ তৈরি করা (Node.js – Environment Setup)

রিদওয়ান বিন শামীম

 

অনলাইনে অপশন পরীক্ষা করা

নড জেএস এর পরিবেশ নতুন করে তৈরি করার কিছু নেই কারণ ইতোমধ্যেই অনলাইনে সেই পরিবেশ তৈরি হয়ে আছে, অনলাইনে প্রাপ্য সকল উদাহরণ আমরা থিওরি নিয়ে কাজ করার সময়েই সম্পাদন করতে পারব। এটি আমাদের এবিষয়ে পড়াশুনার সময় বিভিন্ন ফলাফলসহ পরীক্ষানিরীক্ষা করার আত্মবিশ্বাস দেবে।

নিচের কোডের সাথে Try it অপশন ব্যবহার করে এটি করা যায়,


/* Hello World! program in Node.js */
 console.log("Hello World!");

 

আমাদের টিউটোরিয়ালের পরবর্তী অংশে Try it অপশন প্রচুর ব্যবহার করা হবে তাই এর ব্যবহার ভালভাবে জেনে নেয়া প্রয়োজন।

লোকাল এনভায়রন সেটআপ করা

লোকাল এনভায়রন সেটআপ করতে চাইলে দুটি জিনিস কম্পিউটারে ইন্সটল করা থাকতে হবে, টেক্সট এডিটর আর নড জেএস বাইনারি ইন্সটলেবল।

টেক্সট এডিটরঃ প্রোগ্রাম টাইপ করার জন্য ব্যবহার করতে হয়। অপারেটিং সিস্টেমের উপর নির্ভর করে উইন্ডোজ নোটপ্যাড, অপারেটিং সিস্টেম এডিট কম্যান্ড ব্রিফ, এপ্সিলন, ইম্যাকস, ভিআইএম বা ভিআই ইত্যাদি টেক্সট এডিটর ব্যবহৃত হয়ে থাকে। এডিটরের মাধ্যমে সোর্স ফাইল তৈরি করা হয় যার মধ্যে প্রোগ্রাম সোর্স কোড থাকে। এর এক্সটেনশনে ".js" থাকে।

প্রোগ্রামিং শুরুর আগে একটি টেক্সট এডিটর ঠিক করে কোডিঙে কিছু অভিজ্ঞতা অর্জন করে একটি ফাইলে রেখে তা সম্পাদন করতে হয়।

নড জেএস রানটাইম

সোর্স ফাইলে লেখা সোর্সকোড হল জাভাস্ক্রিপ্ট। সেই জাভাস্ক্রিপ্ট কোড ইন্টারপ্রিট ও সম্পাদন করতে নড জেএস ইন্টারপ্রিটার ব্যবহৃত হয়।

নড জেএস ডিস্ট্রিবিউশন সান ওএস, লিনাক্স, ম্যাক ওএস এক্স, এবং উইন্ডোজের জন্য ৩২ ও ৬৪ বিট এক্স৮৬ প্রসেসর আর্কিটেকচারে বাইনারি ইন্সটলেবলরূপে পাওয়া যায়।

নড জেএসএর আরকাইভ ডাউনলোড করা

এক্ষেত্রে নড জেএসএর সর্বশেষ আরকাইভ ভার্সন ডাউনলোড করে নিতে হয়, বিভিন্ন ওএসের জন্য প্রযোজ্য কিছু আরকাইভ ভার্সন নিচের ছকে দেয়া হল,

ওএস আরকাইভের নাম

Windows   node-v0.12.0-x64.msi
Linux     node-v0.12.0-linux-x86.tar.gz
Mac       node-v0.12.0-darwin-x86.tar.gz
SunOS     node-v0.12.0-sunos-x86.tar.gz

ইউনিক্স, সান ওএস, লিনাক্স ও ম্যাক ওএস এক্সে ইন্সটল করা

ওএস আর্কিটেকচার অনুযায়ী /tmp তে node-v0.12.0-osname.tar.gz আরকাইভ ডাউনলোড ও এক্সট্রাক্ট করতে হয়। এরপর সেটিকে /usr/local/nodejs ডিরেক্টরিতে সরিয়ে রাখতে হয়।


 $ cd /tmp
 $ wget http://nodejs.org/dist/v0.12.0/node-v0.12.0-linux-x64.tar.gz
 $ tar xvfz node-v0.12.0-linux-x64.tar.gz
 $ mkdir -p /usr/local/nodejs
 $ mv node-v0.12.0-linux-x64/* /usr/local/nodejs

 

পাথ এনভায়রনমেন্ট চলকে /usr/local/nodejs/bin যোগ করতে হয়,

ওএস আউটপুট
 Linux    export PATH=$PATH:/usr/local/nodejs/bin
 Mac      export PATH=$PATH:/usr/local/nodejs/bin
 FreeBSD  export PATH=$PATH:/usr/local/nodejs/bin

উইন্ডোজে ইন্সটলেশন

এমএসআই ফাইল ব্যবহার করে নড জেএসের প্রম্পট ব্যবহার করতে হয়। বাই ডিফল্ট C:\Program Files\nodejs তে নড জেএস ডিস্ট্রিবিউশন ব্যবহার করে থাকে।ইন্সটলার উইন্ডোজের পাথ পরিবেশ চলকে C:\Program Files\nodejs\bin ডিরেক্টরি সেট করে। কম্যান্ড প্রম্পট সক্রিয় করতে রিস্টার্ট করতে হয়।

ইন্সটলেশন ভেরিফাই করা- ফাইল সম্পাদন

main.js নামের জেএস ফাইল তৈরি করতে হয় নিচের কোড সহ,


/* Hello, World! program in node.js */
 console.log("Hello, World!"

 

নড জেএস ইন্টারপ্রিটার ব্যবহার করে main.js ফাইল সম্পাদন করে আমরা ফলাফল দেখতে পারি,


$ node main.js

 

ইন্সটলেশনের সবকিছু ঠিকঠাক থাকলে এটি যে ফলাফল দেখাবে তা হল,


Hello, World!


 

A Modern Web Dev’s Toolkit . ওয়েব ডেভেলপার দের আধুনিক টুলস

A Modern Web Dev's Toolkit . ওয়েব ডেভেলপার দের আধুনিক টুলস

নোড এবং এন পি এমঃ

নোড এনেছে সার্ভার ও ডেস্কটপ জাভা স্ক্রিপ্ট। প্রথমে যদিও জাভা স্ক্রিপ্ট প্রধানত ব্রাউজার এর ভাষার ওপর ভিত্তি করে  ব্যবহার করা হত, এখন নোড দ্বারা আপনি আপনার সার্ভার সাইড ব্যাক বা একটি ডেস্কটপ অ্যাপ্লিকেশন তৈরি করতে পারেন  আপনার নোড-ওয়েবকিটের সাহায্যে (যারা বেশী উদ্বিগ্ন জন্য)। Node.js® হলো, ক্রোমের জাভাস্ক্রিপ্ট রানটাইম উপর নির্মিত একটি প্ল্যাটফর্ম, যা দ্বারা  দ্রুত ও সহজে আকার পরিবর্তনযোগ্য নেটওয়ার্ক অ্যাপ্লিকেশন।

একটি ওয়েব সার্ভার তৈরি করা অত্যন্ত সহজ যদি নিম্নক্ত লাইনগুলো অনুসরণ করা যায়।

var http = require('http');

http.createServer(function (req, res) {

res.writeHead(200, {'Content-Type': 'text/plain'});

res.end('Hello World\n');

}).listen(1337, '127.0.0.1');

console.log('Server running at http://127.0.0.1:1337/');

 

এটি চালানোর জন্য করতে হবে

$ node start

Server running at http://172.0.0.1:1337/

 

নোড এর অন্নতম একটি বিষয় হলো এর গুরুত্বপূর্ণ কমিউনিটি, যা NPM ডিরেক্টরি, নোড প্যাকেজ ম্যানেজার তৈরি করে এবং তথাকথিত নোড মডিউল প্রকাশ করে। বর্তমানে এ সম্পর্কে 90,000 মডিউল আছে এবং গত মাসে প্রায় 390,000 ডাউনলোড করা হয়েছে।

নোড ইনস্টলিং এর নিয়মঃ

শুরুতেই আপনাকে প্রথমে নোড রানটাইম ইনস্টল করতে হবে। এটি স্বয়ংক্রিয়ভাবে আপনার মেশিনে NPM ইনস্টল করবে।

এটি সম্পন্ন হলে, লিখতে হবে

$ node -v

নোড প্যাকেজ ইনস্টলিং এর নিয়মঃ

একটি নোড প্যাকেজ ইনস্টল করা সহজ।

$ npm install grunt

 

এটি node_modules নামক একটি ফোল্ডারে ইনস্টল হবে।

একটি প্যাকেজ আন-ইনস্টল করতেঃ

একটি প্যাকেজ আনইনস্টল করতে নিম্নক্ত পদ্ধতি অবলম্বন করুন।

$ npm uninstall --save-dev grunt

এর ফলে package.json থেকে প্যাকেজটি মুছে যাবে।

 

বিশ্বব্যাপী প্যাকেজসমূহঃ

প্যাকেজ ইনস্টলের পাশাপাশি dev বা রানটাইম নির্ভর করে।

$ npm install grunt –g

 

প্যাকেজ পুনরুদ্ধারের নিয়মঃ

আপনার VCS করতে node_modules ফোল্ডার কমিট করবেন না।

রুট ডিরেক্টরিতে নির্বাহ করতেঃ

$ npm install

সংস্করণ করাঃ

  • একটি সংস্করণ সংখ্যা হলো MINOR.PATCH
  • যখন আপনি অসামঞ্জস্যপূর্ণ মেজর সংস্করণ করেন, তখন API- র পরিবর্তন হয়।
  • ক্ষুদ্র সংস্করণ হয় যখন আপনি পিছন দিকে একটি উপযুক্ত পদ্ধতিতে কার্যকারিতা যোগ করেন, এবং যখন আপনি পিছন দিকে-সামঞ্জস্যপূর্ণ বাগ সংশোধন করেন, তখন প্যাচ সংস্করণ হয়।
  • NPM 1.3.5: প্যাকেজ (সবচেয়ে নিয়ন্ত্রণমূলক) দেওয়া সংস্করণ ব্যবহার করতে বলে।
  • বাড়তি প্যাচ সংস্করণের (সাধারণত বাগ) জন্য3.5 বা 1.3.x: NPM শুধুমাত্র আপগ্রেড দেওয়া প্যাকেজকে এভাবে উল্লেখ করে => = 1.3.5-0
  • 4.0-0: NPM এটি সংজ্ঞায়িত করে এভাবে ~ 1.3.5
  • ^ 1.3.5: <2.0.0: এটি প্রধান রিলিজের চেয়ে পরবর্তী কোনো সংস্করণে আপগ্রেড করতে NPM এভাবে উল্লেখ করেঃ :<2.0.0 ।
  • যখন আপনি নোড প্যাকেজ ইনস্টল করবেন তখন নতুন NPM 1.3.5 ডিফল্ট সিস্টেম এভাবে টা প্রদর্শন করবে => = 1.3.5-0 <2.0.0-0

 

 

বোয়ারঃ

এটা একটি প্যাকেজ ম্যানেজার যা আপনার সামনের শেষ উন্নয়ন লাইব্রেরি যেমন jQuery, বুটস্ট্র্যাপ এর জন্য।

$ npm install -g bower

 

একটি bower.json ফাইলের উদাহরণ।

একটি প্যাকেজ আন-ইনস্টল করতে হলে এই পদ্ধতি অনুসরণ করুনঃ

$ bower uninstall --save jquery

ইওম্যানঃ

ইওম্যান এক ধরণের জেনারেটর দ্বারা ।

ইওম্যান এর জেনারেটরগুলো একটি নোড মডিউল হিসাবে বিতরণ করা হয়।

এটি ইনস্টল করতেঃ

$ npm install -g yo

Gruntfile.js :

Gruntfile.js সেই স্থান যেখানে আপনি আপনার প্রকল্পের কাজটি কনফিগার করবেন এই ফাইলটি সহজে শুরু করতে:

module.exports = function(grunt) {

// Do grunt-related things in here

};

গ্রান্ট মডিউলসঃ

গ্রান্ট মডিউল নোড এর NPM ডিরেক্টরির মাধ্যমে বিতরণ করা হয় গ্রান্ট মডিউলসই  ইনস্টল করতে আমার দেখানো পদ্ধতি অনুসরণ করুনঃ

$ npm install --save-dev grunt-contrib-uglify

গ্রান্ট টাস্কের কারণ বিশ্লেষণঃ

আপনি বিল্ড টাস্ক নির্ধারণ শুরু করতে চাইলে আমার আগে উল্লেখ করা গ্রান্ট বইটির উদাহরণস্বরূপ stringCheck টাস্কটিকে অনুসরণ করবেন

module.exports = function(grunt){

...

grunt.initConfig({

stringCheck: {

file: './src/somefile.js',

string: 'console.log('

}

});

}

আপনি দেখতে পাবেন, একটি টাস্ক কেবলি একটি ফাংশন যা আপনি রেজিস্টার করবেন গ্রান্ট এর সাথে

module.exports = function(grunt){

grunt.registerTask('stringCheck', function() {

//fail if configuration is not provided

grunt.config.requires('stringCheck.file');

grunt.config.requires('stringCheck.string');

 

//retrieve filename and load it

var file = grunt.config('stringCheck.file');

var contents = grunt.file.read(file);

 

//retrieve string to search for

var string = grunt.config('stringCheck.string');

 

if(contents.indexOf(string >= 0))

grunt.fail.warn('"' + string + '" found in "' + file + '"');

});

}

একাধিক টাস্কঃ

গ্রান্ট আপনাকে দিচ্ছে একটি টাস্ক সঞ্চালনের গ্রুপ।নিম্নক্তঃ

module.exports = function(grunt){

...

grunt.initConfig({

stringCheck: {

target1: {

file: './src/somefile.js',

string: 'console.log('

},

target2: {

file: './src/somefile.js',

string: 'eval('

}

}

});

}

 

 

গ্লোবিং:

 

ফাইল গ্লোবিং বা ওয়াইল্ডকার্ড সাদৃশ্যকরণ  একটি বড় গ্রুপের ফাইল ক্যাপচার করার একটি পদ্ধতি।

চলমান কর্মঃ

আপনি যদি একটি টাস্ক রান করতে চাইলে নিম্নের পদ্ধতি অনুসরণ করুনঃ

$ grunt task1 task2

যদি আপনার একাধিক টাস্কের উদ্দেশ্য থাকে, তাহলে নিম্নক্ত পদ্ধতি অনুসরণ করুনঃ

$ grunt task:target1

আপনি যদি এর পরিবর্তে গ্রান্ট চালান, তাহলে ডিফল্ট টাস্ক চলতে থাকবে যা আপনি নিম্নরূপ কনফিগার করতে পারেনঃ

module.exports = function(grunt) {

grunt.registerTask('build', function() {

console.log('building...');

});

 

grunt.registerTask('test', function() {

console.log('testing...');

});

 

grunt.registerTask('default', ['build', 'test']);

};

 

গাল্পঃ

নোড কখনই পূর্ণতা পাবে না, যদি আমরা গাল্পকে উল্লেখ না করি গাল্প হলো জাভা স্ক্রিপ্ট টাস্কের এর আগত নতুন সঞ্চালক যা Node.js প্রবাহের উপর নির্মিত এটি স্ক্রিপ্টকে সহজে নির্মাণের লক্ষেঅনুরক্ত কনফিগারেশন  কোড”  ব্যবহার করা হয়