- ব্রাউজারগুলিতে নোডের রিকুয়ার ফাংশনের জন্য নেটিভ সাপোর্ট নেই, তাই CommonJS-স্টাইলের npm মডিউলগুলি সরাসরি ক্লায়েন্ট-সাইড জাভাস্ক্রিপ্টে চলতে পারে না।
- Browserify main.js এর মতো একটি এন্ট্রি ফাইল বিশ্লেষণ করে, সমস্ত প্রয়োজনীয় কল অনুসরণ করে এবং প্রতিটি নির্ভরতাকে একটি একক ব্রাউজার-প্রস্তুত জাভাস্ক্রিপ্ট ফাইলে একত্রিত করে।
- npm install uniq এর মতো কমান্ড ব্যবহার করে মডিউল ইনস্টল করার ফলে Browserify node_modules থেকে প্যাকেজগুলি টেনে এনে জেনারেট করা bundle.js-এ এম্বেড করতে পারে।
- HTML-এ একটি স্ট্যান্ডার্ড স্ক্রিপ্ট ট্যাগের মাধ্যমে bundle.js অন্তর্ভুক্ত করলে npm-ভিত্তিক মডুলার কোড ব্রাউজারে একটি অপ্টিমাইজড অ্যাসেট হিসেবে মসৃণভাবে কার্যকর করা সম্ভব হয়।

যখন আপনি জাভাস্ক্রিপ্ট মডিউল নিয়ে কাজ শুরু করেন, তখন আপনার প্রথম যে সমস্যাটি হয় তা হল Node.js কীভাবে কোড লোড করে এবং ব্রাউজারগুলি কীভাবে এটি করে তার মধ্যে ব্যবধান। নোডে আপনি শুধু কল করুন require() এবং সবকিছু জাদুর মতো একসাথে সংযুক্ত। কিন্তু একই জিনিস সরাসরি ব্রাউজারে চেষ্টা করে দেখুন এবং আপনি দ্রুত আবিষ্কার করবেন যে এই ফাংশনটি সেখানে বিদ্যমান নেই। ঠিক সেখানেই একটি npm প্যাকেজ ব্রাউজার এবং Browserify এর মতো বান্ডলারগুলির চারপাশের সরঞ্জাম, কর্মপ্রবাহ এবং ধারণাগুলি দিনটি বাঁচাতে এগিয়ে আসে।
এই প্রবন্ধটি আপনাকে দেখাবে কিভাবে npm একটি প্যাকেজ ইকোসিস্টেম হিসেবে ব্রাউজিং, আবিষ্কার এবং অবশেষে প্যাকেজগুলিকে বান্ডিল করার ধারণার সাথে মিশে যায় যাতে সেগুলি আসলে একটি ওয়েব ব্রাউজারে চলে। আমরা Browserify-এর উপর ভিত্তি করে একটি ক্লাসিক উদাহরণ পুনর্বিবেচনা করব, কেন তা ব্যাখ্যা করব require নোডে কাজ করে কিন্তু ব্রাউজারে নয়, এবং ধাপে ধাপে দেখাবে কিভাবে একটি ছোট স্ক্রিপ্ট ফাইল থেকে একটি একক বান্ডিল অ্যাসেটে যেতে হয় যা আপনি একটি সাধারণ স্ক্রিপ্ট ট্যাগ ব্যবহার করে একটি ওয়েব পৃষ্ঠায় ড্রপ করতে পারেন। পথের পাশাপাশি, আমরা প্রসঙ্গ, ব্যবহারিক টিপস এবং কিছু আধুনিক বিকল্পও দেব যাতে বাস্তব-বিশ্বের প্রকল্পগুলির জন্য পুরো কর্মপ্রবাহটি অর্থবহ হয়।
Node.js এবং ব্রাউজারের মধ্যে ব্যবধান বোঝা

মূল শুরুর বিষয় হল ওয়েব ব্রাউজার এবং Node.js একেবারেই ভিন্ন মডিউল সিস্টেম অফার করে। নোড ঐতিহাসিকভাবে CommonJS মডিউল ফর্ম্যাট ব্যবহার করেছে, যেখানে আপনি নির্ভরতা লোড করেন require('package-name') এবং এর সাথে কার্যকারিতা প্রকাশ করুন module.exports। এই প্যাটার্নটি নোড রানটাইমের সাথে গভীরভাবে একত্রিত, কিন্তু ঐতিহ্যবাহী ব্রাউজারগুলি এটি সম্পর্কে কিছুই জানে না।
একটি সাধারণ ব্রাউজার পরিবেশে কোনও অন্তর্নির্মিত নেই require ফাংশন, এবং বেশিরভাগ npm প্যাকেজের উপর নির্ভর করে এমন CommonJS-স্টাইল মডিউলগুলির জন্য কোনও সমর্থন নেই। ব্রাউজারটি ক্লাসিক স্ক্রিপ্ট ট্যাগগুলি বোঝে যা বিশ্বব্যাপী জাভাস্ক্রিপ্ট ফাইল লোড করে এবং আরও আধুনিক পরিবেশে এটি ES মডিউলগুলিকে সমর্থন করে type="module" অ্যাট্রিবিউট ব্যবহার করে, কিন্তু এটি এখনও নোডের কমনজেএস শব্দার্থবিদ্যা নিজে থেকে বুঝতে পারে না।
ক্লায়েন্ট-সাইড জাভাস্ক্রিপ্টের ভিতরে সরাসরি নোড-স্টাইল কোড বা npm প্যাকেজ পুনরায় ব্যবহার করার চেষ্টা করার সাথে সাথে এই পার্থক্যটি একটি সমস্যা হয়ে দাঁড়ায়। আপনার কাছে একটি সাধারণ স্নিপেট থাকতে পারে যেমন var unique = require('uniq') এটি একটি নোড স্ক্রিপ্টে নিখুঁতভাবে কাজ করে, কিন্তু যদি আপনি একই লাইনটি ব্রাউজারে লোড করা একটি ফাইলে পেস্ট করেন তবে আপনি তাৎক্ষণিকভাবে একটি রেফারেন্স ত্রুটি পাবেন, কারণ require সংজ্ঞায়িত করা হয় নি.
তাই ডেভেলপারদের এমন এক ধরণের "সেতু" প্রয়োজন যা তাদের ব্রাউজার-সামঞ্জস্যপূর্ণ সম্পদ পাঠানোর সময় পরিচিত নোড-সদৃশ কোড লিখতে সাহায্য করে। এই ব্রিজটি সাধারণত একটি বান্ডলার: একটি টুল যা একটি এন্ট্রি ফাইল থেকে শুরু করে আপনার নির্ভরতা গ্রাফের মধ্য দিয়ে যায়, প্রয়োজনীয় সবকিছু সংগ্রহ করে এবং একটি একক জাভাস্ক্রিপ্ট বান্ডেল আউটপুট করে যা ব্রাউজারটি নোড বা এনপিএম সম্পর্কে কিছু না জেনেই কার্যকর করতে পারে।
npm ইকোসিস্টেমে Browserify কী করে
Browserify হল জাভাস্ক্রিপ্ট ডেভেলপারদের জন্য এই সঠিক চ্যালেঞ্জটি সমাধান করার জন্য প্রাথমিক এবং প্রভাবশালী টুলগুলির মধ্যে একটি। এর লক্ষ্য সহজ: আপনাকে Node's দিয়ে কোড লিখতে দিন require প্যাটার্ন ব্যবহার করে, npm থেকে মডিউলগুলি টেনে আনুন, এবং তারপর সেগুলি একটি একক ফাইলে প্যাকেজ করুন যা ব্রাউজারে চলবে যেন CommonJS স্থানীয়ভাবে সমর্থিত।
npm প্যাকেজ ব্রাউজিংয়ের দৃষ্টিকোণ থেকে, Browserify কার্যকরভাবে বিশাল নোড প্যাকেজ ইকোসিস্টেমকে সম্ভাব্য ক্লায়েন্ট-সাইড নির্ভরতার একটি লাইব্রেরিতে পরিণত করে। স্ক্রিপ্টগুলি ম্যানুয়ালি অনুলিপি করার পরিবর্তে, আপনি কেবল npm থেকে একটি মডিউল ইনস্টল করুন, ব্যবহার করুন require() ঠিক সার্ভার-সাইড কোডের মতো, এবং আপনার ব্যবহারকারীদের ব্রাউজারগুলি বুঝতে পারে এমন কিছুতে অনুবাদ করার জন্য Browserify-এর উপর নির্ভর করুন।
অভ্যন্তরীণভাবে, Browserify রেফারেন্সকৃত সমস্ত মডিউলের মাধ্যমে অতিক্রম করে require, একটি প্রদত্ত এন্ট্রি ফাইল থেকে শুরু করে, এবং একটি নির্ভরতা গ্রাফ তৈরি করে। সেই গ্রাফের প্রতিটি মডিউলের জন্য, এটি কোডটিকে এমন একটি ফর্মে পুনর্লিখন করে যা ব্রাউজারে CommonJS পরিবেশকে অনুকরণ করে, যার মধ্যে স্থানীয় স্কোপিং এবং ব্রাউজার-বান্ধব require বাস্তবায়ন। চূড়ান্ত আর্টিফ্যাক্ট হল একটি একক বান্ডিল ফাইল, যা সাধারণত বলা হয় bundle.js, যা এই সমস্ত মডিউলগুলিকে ধারণ করে।
এর ফলে এমন একটি কর্মপ্রবাহ তৈরি হবে যেখানে ফ্রন্ট-এন্ড ডেভেলপাররা নোড মডিউলের জন্য ব্রাউজারের নেটিভ সাপোর্টের অভাব নিয়ে চিন্তা না করেই npm থেকে প্যাকেজের উপর নির্ভর করতে পারবেন। ডেটা ম্যানিপুলেশন, ইউটিলিটি বা UI হেল্পারের মতো কাজের জন্য আপনি বিশাল লাইব্রেরির ক্যাটালগে অ্যাক্সেস পাবেন, কিন্তু তবুও ক্লায়েন্টকে শুধুমাত্র একটি স্ক্রিপ্ট ফাইল পরিবেশন করতে পারবেন, যা ঐতিহ্যবাহী HTML পৃষ্ঠাগুলিতে মসৃণভাবে সংহত হবে।
ক্লাসিক Browserify টিউটোরিয়ালের উদাহরণ পুনর্লিখন
সবকিছুকে সুনির্দিষ্ট করার জন্য, কল্পনা করুন আপনার কাছে একটি জাভাস্ক্রিপ্ট ফাইল আছে যার নাম main.js আপনার প্রকল্পে এবং আপনি একটি npm প্যাকেজ ব্যবহার করতে চান যাকে বলা হয় uniq একটি অ্যারে থেকে ডুপ্লিকেট মান ফিল্টার করতে। নোড পরিবেশে, আপনি ফাইলটি একটি লাইন দিয়ে শুরু করবেন যেমন var unique = require('uniq'). এই লাইনটি থেকে রপ্তানি করা ফাংশন আমদানি করে uniq মডিউল এবং এটিকে একটি ভেরিয়েবলে সংরক্ষণ করে যার নাম unique.
এই ভিতরে main.js ফাইলে, আপনি তারপর সংখ্যার একটি সহজ অ্যারে তৈরি করতে পারেন যাতে বারবার এন্ট্রি থাকে। উদাহরণস্বরূপ, আপনি সেট করতে পারেন var data = , যেখানে নির্দিষ্ট সংখ্যা একাধিকবার প্রদর্শিত হয়। লক্ষ্য হল একটি নতুন অ্যারে তৈরি করা যাতে প্রতিটি সংখ্যা কেবল একবার সাজানো ক্রমে অন্তর্ভুক্ত থাকে।
আমদানি করা ফাংশন ব্যবহার করে, বাকি কোডটি খুব সহজ হয়ে যায়। আপনি আহ্বান করতে পারেন console.log(unique(data)) কনসোলে প্রিন্ট করার জন্য অ্যারেটি ফেরত পাঠাবে uniq প্যাকেজ, যা তালিকা থেকে ডুপ্লিকেট করা মানগুলি বাদ দেয়। যদি আপনি এটি নোডে চালান, তাহলে আপনি একটি আউটপুট অ্যারে দেখতে পাবেন যেখানে প্রতিটি সংখ্যা কেবল একবার প্রদর্শিত হবে।
এই সমস্ত যুক্তি ধরে নেয় যে uniq মডিউলটি আপনার পরিবেশে উপলব্ধ, এবং যে require ফাংশনটি সংজ্ঞায়িত এবং এটি সমাধান করতে সক্ষম। নোডে, এটি রানটাইম এবং দ্বারা পরিচালিত হয় নোড মডিউল রেজোলিউশন অ্যালগরিদম, যা নামের একটি ডিরেক্টরি খুঁজছে node_modules এবং তারপর নামের একটি ফোল্ডারের জন্য uniq এটার ভিতরে.
npm থেকে uniq প্যাকেজ ইনস্টল করা হচ্ছে
আপনার কোড কল করার আগে require('uniq'), আপনাকে আসলে npm রেজিস্ট্রি থেকে প্যাকেজটি ইনস্টল করতে হবে। এটি কমান্ড লাইন থেকে করা হয় npm ক্লায়েন্ট ব্যবহার করে যা Node.js এর সাথে আসে। আপনার প্রজেক্ট ফোল্ডারে দাঁড়িয়ে, আপনি একটি কমান্ড চালাতে পারেন যেমন npm install uniq যাতে npm মডিউলটি ডাউনলোড করে এবং এর অধীনে সংরক্ষণ করে node_modules ডিরেক্টরি.
সার্জারির npm install uniq নির্দেশাবলী এর প্রকাশিত সংস্করণটি নিয়ে আসে uniq প্যাকেজ তৈরি করে এবং এটি আপনার স্থানীয় প্রকল্প নির্ভরতাগুলিতে যোগ করে। আপনার npm কনফিগারেশনের উপর নির্ভর করে এবং আপনি একটি ব্যবহার করেন কিনা package.json ফাইল, এটি আপনার নির্ভরতা তালিকায় প্যাকেজটি রেকর্ড করতে পারে, যা আপনার দলের অন্যান্য ডেভেলপারদের জন্য পরিবেশ জুড়ে সামঞ্জস্যপূর্ণ ইনস্টলেশন নিশ্চিত করে।
প্যাকেজটি ইনস্টল হয়ে গেলে, আপনার প্রকল্পের ডিরেক্টরি কাঠামোতে একটি নতুন অন্তর্ভুক্ত থাকে node_modules/uniq সেই প্যাকেজের কোড ধারণকারী ফোল্ডার। ঠিক এটাই নোডের অনুমতি দেয় require মডিউলটি সমাধান হয়ে গেলে তা সনাক্ত করার জন্য সিস্টেম 'uniq'। আপনার বান্ডেলের জন্য নির্ভরতা গ্রাফ তৈরি শুরু করার সময় Browserify একই ফোল্ডারটি পরীক্ষা করবে।
এই মুহুর্তে, আপনার main.js ফাইলটি পুরোপুরি বৈধ নোড কোড যা সার্ভারে বা স্ট্যান্ডার্ড নোড ইন্টারপ্রেটার ব্যবহার করে টার্মিনাল থেকে কার্যকর করা যেতে পারে। তবে, যদি তুমি এটিকে কেবল ফেলে দাও main.js স্ক্রিপ্ট ট্যাগ ব্যবহার করে একটি ওয়েব পেজে ফাইলটি প্রবেশ করান, তবুও আপনার ব্রাউজারটি CommonJS-স্টাইলের আমদানিটি বুঝতে পারবে না, তাই এটি ব্রাউজার-প্রস্তুত করার জন্য আপনার একটি অতিরিক্ত পদক্ষেপের প্রয়োজন।
main.js এবং এর নির্ভরতাগুলিকে bundle.js-এ বান্ডিল করা
এই নোড-স্টাইল কোডটি ব্রাউজারে চালানোর জন্য গুরুত্বপূর্ণ পদক্ষেপ হল Browserify প্রক্রিয়াটিকে অনুমতি দেওয়া main.js এবং এর সমস্ত প্রয়োজনীয় মডিউল, তারপর একটি একক জাভাস্ক্রিপ্ট ফাইল নির্গত করে যা সাধারণত বলা হয় bundle.js. আপনার প্রোজেক্টে Browserify বিশ্বব্যাপী বা স্থানীয়ভাবে ইনস্টল হয়ে গেলে আপনি কমান্ড লাইন থেকে এটি করতে পারেন।
এই প্রক্রিয়াটি ট্রিগার করার জন্য একটি সাধারণ কমান্ড দেখতে এরকম হতে পারে browserify main.js -o bundle.js. এখানে, browserify হল এক্সিকিউটেবল যা বান্ডলিং প্রক্রিয়া শুরু করে, main.js হল সেই এন্ট্রি ফাইল যা Browserify নির্ভরতা গ্রাফের মূল হিসেবে বিবেচনা করে, এবং -o bundle.js টুলটিকে ফলাফল বান্ডেলটি নামের একটি ফাইলে লেখার নির্দেশ দেয় bundle.js বর্তমান ডিরেক্টরিতে।
পর্দার আড়ালে, Browserify বিশ্লেষণ করে main.js, প্রতিটি অনুসরণ করে require এটিকে finds বলে, এবং প্রতিটি আমদানি করা মডিউল পুনরাবৃত্তভাবে অন্বেষণ করে। এর মধ্যে আপনার নিজস্ব স্থানীয় ফাইলগুলি অন্তর্ভুক্ত রয়েছে যদি আপনি সেগুলিকে আপেক্ষিক পাথ সহ প্রয়োজন করেন, সেইসাথে তৃতীয়-পক্ষের মডিউলগুলিও অন্তর্ভুক্ত থাকে যার অধীনে থাকে node_modules, যেমন uniq npm থেকে আপনি যে প্যাকেজটি ইনস্টল করেছেন।
Browserify-এর প্রতিটি নির্ভরতা রূপান্তরিত হয় যাতে এটি নেটিভ নোড পরিবেশের প্রয়োজন ছাড়াই ব্রাউজারের ভিতরে চলতে পারে। এটি প্রতিটি মডিউলকে তার নিজস্ব স্কোপে মোড়ানো, CommonJS ইন্টারফেসকে অনুকরণ করে এবং এই সমস্ত রূপান্তরিত মডিউলগুলিকে একটি একক স্ক্রিপ্টে একত্রিত করে। ফলস্বরূপ bundle.js ফাইলটিতে এমন কোড রয়েছে যা অনুকরণ করে require ফাংশন এবং আপনার মূল অনুমতি দেয় var unique = require('uniq') ক্লায়েন্ট সাইডে কার্যকর করার সময় সঠিকভাবে আচরণ করার জন্য লাইন।
একবার Browserify শেষ হয়ে গেলে, আপনার কাছে কেবল একটি জাভাস্ক্রিপ্ট ফাইল থাকবে যা আপনার মূল অ্যাপ্লিকেশন লজিক এবং এটি কার্যকর করার জন্য প্রয়োজনীয় সম্পূর্ণ ট্রানজিটিভ ডিপেন্ডেন্সি ট্রি ক্যাপচার করবে। এই ফাইলটি এখন অন্য যেকোনো স্ক্রিপ্টের মতোই HTML পৃষ্ঠায় রেফারেন্স করার জন্য প্রস্তুত, ব্রাউজারের পক্ষ থেকে কোনও অতিরিক্ত কনফিগারেশন ছাড়াই।
একটি HTML পৃষ্ঠায় Browserify বান্ডেল লোড করা হচ্ছে
সঙ্গে bundle.js তৈরি করা হয়েছে, সবকিছু একটি নিয়মিত ওয়েবসাইটে একীভূত করা আপনার HTML-এ একটি একক স্ক্রিপ্ট ট্যাগ যোগ করার মতোই সহজ। লোড করার চেষ্টা করার পরিবর্তে main.js সরাসরি, আপনি Browserify দ্বারা উত্পাদিত সংকলিত বান্ডেলটি উল্লেখ করেন, যা ইতিমধ্যেই অন্তর্ভুক্ত uniq এবং আপনার প্রয়োজনীয় অন্য যেকোনো npm মডিউল।
একটি মৌলিক HTML স্নিপেটে এরকম কিছু থাকতে পারে <script src="bundle.js"></script> বন্ধের আগে কোথাও </body> ট্যাগ। এই স্ক্রিপ্ট ট্যাগটি ব্রাউজারকে ডাউনলোড এবং এক্সিকিউট করতে বলে bundle.js ফাইল। যেহেতু বান্ডেলটি নিজের মধ্যে CommonJS পরিবেশকে অনুকরণ করে, তাই আপনার কলগুলি require অভ্যন্তরীণভাবে কাজ করে যদিও বিশ্বব্যাপী ব্রাউজার পরিবেশ এখনও সেই ফাংশনটি কী তা জানে না।
পৃষ্ঠার দৃষ্টিকোণ থেকে, এই বান্ডেল এবং আপনার অন্তর্ভুক্ত করা অন্য কোনও একক জাভাস্ক্রিপ্ট ফাইলের মধ্যে কোনও দৃশ্যমান পার্থক্য নেই। মডিউলের জটিলতা, অভ্যন্তরীণ নির্ভরতা এবং সিমুলেটেড require যুক্তি সব ভেতরেই লুকিয়ে আছে bundle.js। ব্রাউজারকে শুধুমাত্র একটি রিসোর্স লোড করে চালাতে হয়, যার অনেকগুলি পৃথক ছোট ফাইল লোড করার তুলনায় কর্মক্ষমতা সুবিধাও রয়েছে।
এই কারণে, কর্মপ্রবাহটি এমনকি পুরানো ফ্রন্ট-এন্ড স্ট্যাকগুলিতেও সুন্দরভাবে ফিট করে যেখানে আপনি স্ট্যাটিক HTML ফাইল বা সার্ভার-রেন্ডার করা টেমপ্লেটগুলির সাথে কাজ করতে পারেন। আপনার পৃষ্ঠাগুলির গঠনে আমূল পরিবর্তন আনার দরকার নেই; আপনাকে কেবল আপনার পরিবেশিত জাভাস্ক্রিপ্ট প্রস্তুত করার পদ্ধতি পরিবর্তন করতে হবে, একাধিক বিক্ষিপ্ত সংস্থান এবং নোড-অনলি মডিউলগুলিকে ব্রাউজারিফাই দ্বারা উত্পাদিত একটি সুবিন্যস্ত বান্ডেল দিয়ে প্রতিস্থাপন করতে হবে।
npm প্যাকেজ ব্রাউজিংয়ের জন্য Browserify এর সাথে বান্ডেল করা কেন গুরুত্বপূর্ণ?
যখন লোকেরা "npm প্যাকেজ ব্রাউজার" বা ফ্রন্ট-এন্ড ব্যবহারের জন্য npm প্যাকেজ ব্রাউজ করার কথা বলে, তখন সাধারণত অন্তর্নিহিত প্রশ্নটি হয়: ব্রাউজার-ভিত্তিক প্রকল্পে আমি আসলে কীভাবে এই মডিউলটি ব্যবহার করতে পারি? Browserify-এর মতো টুলের অস্তিত্ব সার্ভার-সাইড লাইব্রেরির একটি তাত্ত্বিক ক্যাটালগকে একটি ব্যবহারিক টুলবক্সে পরিণত করে যা আপনি সরাসরি আপনার ওয়েব অ্যাপ্লিকেশনগুলিতে প্রয়োগ করতে পারেন।
বাস্তবে, এর অর্থ হল দরকারী মডিউলগুলির জন্য npm অন্বেষণ এখন আর নোড বা ব্যাক-এন্ড কাজের মধ্যে সীমাবদ্ধ নয়। যদি আপনি এমন একটি ছোট ইউটিলিটি লাইব্রেরি খুঁজে পান যা সম্পূর্ণরূপে জাভাস্ক্রিপ্ট ডেটা স্ট্রাকচারের উপর কাজ করে এবং নোড-নির্দিষ্ট API-এর উপর নির্ভর করে না, তাহলে Browserify বা অনুরূপ কোনও টুলের সাথে এটি বান্ডেল করে ব্রাউজারে এটি ব্যবহার করার সম্ভাবনা বেশি। এটি অ্যারে ডিডুপ্লিকেট করা, ডেটা রূপান্তর করা বা ছোট অ্যালগরিদম বাস্তবায়নের মতো সমস্যা সমাধানের সময় আপনার বিকল্পগুলিকে ব্যাপকভাবে প্রসারিত করে।
তদুপরি, বান্ডলিং আপনার ওয়েব পৃষ্ঠা লোড করার সময় যে নেটওয়ার্ক অনুরোধগুলি সম্পাদন করতে হয় তার সংখ্যা হ্রাস করে। প্রতিটি স্থানীয় ফাইল বা দূরবর্তী লাইব্রেরির জন্য পৃথক স্ক্রিপ্ট ট্যাগ অন্তর্ভুক্ত করার পরিবর্তে, সবকিছু এককভাবে একত্রিত করা হয় bundle.js asset. এটি HTTP ক্যাশিংয়ের সাথে সুন্দরভাবে কাজ করে এবং ডিপ্লয়মেন্ট পাইপলাইনগুলিকে সহজ করতে পারে, বিশেষ করে যখন আপনি এমন জটিল অ্যাপ্লিকেশনগুলির সাথে কাজ করছেন যা অনেক npm মডিউলের উপর নির্ভর করে।
রক্ষণাবেক্ষণের দিক থেকে, ধারাবাহিকভাবে নির্ভর করতে সক্ষম হওয়া require এবং npm-এর নির্ভরতা ব্যবস্থাপনা আপনার ফ্রন্ট-এন্ড কোডবেসকে আরও অনুমানযোগ্য এবং মডুলার করে তোলে। আপনি npm কমান্ড ব্যবহার করে মডিউল ইনস্টল, আপডেট এবং অপসারণ করেন, কেন্দ্রীয়ভাবে নির্ভরতা নিরীক্ষণ করেন এবং ব্রাউজার সামঞ্জস্যের জন্য প্রয়োজনীয় রূপান্তর পরিচালনা করতে Browserify কে অনুমতি দেন, ম্যানুয়ালি ফাইল কপি করা বা অ্যাড-হক উপায়ে তৃতীয় পক্ষের কোড এম্বেড করার পরিবর্তে।
আধুনিক জাভাস্ক্রিপ্ট টুলিংয়ের সাথে সম্পর্ক
যদিও আমরা যে ক্লাসিক উদাহরণটি দেখেছি তা বিশেষভাবে Browserify-এর উপর দৃষ্টি নিবদ্ধ করে, তবুও এটি যে মৌলিক প্যাটার্নটি চিত্রিত করে তা এখনও অনেক আধুনিক ফ্রন্ট-এন্ড বিল্ড টুলের উপর ভিত্তি করে। ওয়েবপ্যাক, রোলআপ, পার্সেল বা ভাইটের মতো নতুন বান্ডলারগুলি একই স্টাইলে লেখা মডিউলগুলিকে এমন বান্ডেলে রূপান্তর করার সমস্যাটিও মোকাবেলা করে যা ব্রাউজারগুলি দক্ষতার সাথে সম্পাদন করতে পারে।
আধুনিক ব্রাউজারগুলি এখন স্থানীয়ভাবে ES মডিউলগুলিকে সমর্থন করে <script type="module">, যা ছবির কিছু অংশ পরিবর্তন করে কিন্তু npm-সচেতন বিল্ড ধাপগুলির প্রয়োজনীয়তা দূর করে না। npm ইকোসিস্টেমের অনেক প্যাকেজ এখনও CommonJS এন্ট্রি পয়েন্টগুলিকে প্রকাশ করে অথবা Node-স্টাইল রেজোলিউশনের উপর নির্ভর করে, এবং এমনকি যখন ES মডিউল বিল্ডগুলি উপলব্ধ থাকে, তখনও বান্ডলিং অপ্টিমাইজেশন, ট্রি-শেকিং এবং সামঞ্জস্যপূর্ণ লোডিং আচরণের জন্য মূল্যবান থাকে।
এই বিস্তৃত প্রেক্ষাপটে, ছোট উদাহরণটি ব্যবহার করে require('uniq'), npm install uniq এবং একটি browserify main.js -o bundle.js কমান্ড একটি তুচ্ছ টিউটোরিয়ালের চেয়েও বেশি কিছু। এটি "মডুলার কোড লিখুন, npm থেকে নির্ভরতা ইনস্টল করুন, তারপর একটি ব্রাউজার-বান্ধব বান্ডেল তৈরি করুন" এর মূল পাইপলাইনটি প্রদর্শন করে, যা আজকাল প্রায় প্রতিটি গুরুতর ফ্রন্ট-এন্ড সেটআপ দ্বারা ভাগ করা হয়, এমনকি নির্দিষ্ট সরঞ্জামগুলি ভিন্ন হলেও।
ব্রাউজারফাই কীভাবে কাজ করে তা বোঝার ফলে নতুন স্ট্যাক সম্পর্কে যুক্তি করাও সহজ হয়ে যায়। আধুনিক বান্ডলারগুলিকে ব্ল্যাক বক্স হিসেবে বিবেচনা করার পরিবর্তে, আপনি মিল দেখতে পাবেন: তারা সকলেই এন্ট্রি ফাইল পড়ে, আমদানি বা প্রয়োজনীয়তা অনুসরণ করে, নির্ভরতা সংগ্রহ করে, কোড এবং আউটপুট বান্ডেলগুলিকে রূপান্তর করে যা ব্রাউজার সহজ স্ক্রিপ্ট ট্যাগের মাধ্যমে লোড করে। npm প্যাকেজ ইকোসিস্টেম, মডিউল সিস্টেম এবং বান্ডলার একসাথে এমন অভিজ্ঞতা তৈরি করে যা দৈনন্দিন বিকাশে নির্বিঘ্ন বোধ করে।
সবকিছুকে একত্রে ব্যবহারিক কর্মপ্রবাহে পরিণত করা
মূল উদাহরণ দ্বারা উহ্য ব্যবহারিক কর্মপ্রবাহের সংক্ষিপ্তসার জানাতে, আপনি আপনার অ্যাপ্লিকেশন কোডটি একটি ফাইলে লিখে শুরু করুন যেমন main.js ব্যবহার require আপনি যে কোনও npm মডিউল ব্যবহার করতে চান তা আমদানি করতে। সেই ফাইলে আপনি কল করতে পারেন var unique = require('uniq'), অ্যারে সংজ্ঞায়িত করুন যেমন , এবং কনসোলে ফলাফল লগ করুন। ধারণাগতভাবে, আপনি এমনভাবে কাজ করছেন যেন এই সমস্ত কিছু নোডের অধীনে চলবে।
পরবর্তী ধাপ হল npm দিয়ে ইনস্টল করে নিশ্চিত করা যে আপনার প্রোজেক্টে সেই মডিউলগুলি আসলেই বিদ্যমান, উদাহরণস্বরূপ npm install uniq. এই ক্রিয়াটি পূরণ করে node_modules ডিরেক্টরি, নোড এবং ব্রাউজারফাই উভয়কেই মডিউলের কোডে অ্যাক্সেস দেয় যাতে এটি সমাধান করা যায় এবং প্রয়োজনে অন্তর্ভুক্ত করা যায়।
আপনার কোড এবং নির্ভরতাগুলি স্থাপন করার পরে, আপনি Browserify কে নির্দেশ দেবেন যে আপনার এন্ট্রি ফাইল থেকে শুরু করে সবকিছু পুনরাবৃত্তভাবে সংগ্রহ করতে, যেমন একটি কমান্ড চালিয়ে browserify main.js -o bundle.js. এই প্রক্রিয়াটি নির্ভরতা বৃক্ষের মধ্য দিয়ে যায়, ব্রাউজারে একটি CommonJS পরিবেশ অনুকরণ করার জন্য প্রতিটি মডিউল মোড়ানো হয় এবং অবশেষে লেখা হয় bundle.js সমস্ত প্রয়োজনীয় কোড ধারণকারী একক বান্ডিল ফাইল হিসাবে।
অবশেষে, আপনি আপনার HTML-এ স্যুইচ করুন এবং শুধুমাত্র এই একক আউটপুট ফাইলটিকে একটি প্রচলিত স্ক্রিপ্ট ট্যাগ দিয়ে রেফারেন্স করুন যেমন <script src="bundle.js"></script>. পৃষ্ঠাটিতে কোনও বিশেষ বাক্য গঠনের প্রয়োজন নেই; জটিলতা সম্পূর্ণরূপে বান্ডেলের মধ্যেই থাকে। ব্রাউজারটি ডাউনলোড এবং কার্যকর করে bundle.js, এবং এর ভিতরের কোডটি এমনভাবে চলে যেন require ব্রাউজারেই যন্ত্রপাতি তৈরি করা হয়েছিল।
এই প্যাটার্ন অনুসরণ করে, আপনি কার্যকরভাবে নোডের মডিউল সিস্টেম এবং ব্রাউজার পরিবেশের মধ্যে ব্যবধান পূরণ করতে পারবেন এবং একই সাথে বিশাল npm প্যাকেজ ইকোসিস্টেম থেকে উপকৃত হতে পারবেন। আপনি প্যাকেজগুলি ব্রাউজ করেন, ইনস্টল করেন, সেগুলি প্রয়োজন করেন এবং তারপর আপনার ব্যবহারকারীদের কাছে একটি অপ্টিমাইজ করা ফাইল পাঠান, যার ফলে ডেভেলপমেন্ট অভিজ্ঞতা এবং রানটাইম পরিবেশ উভয়ই পরিচালনাযোগ্য এবং দক্ষ থাকে।
উচ্চ-স্তরের দৃষ্টিকোণ থেকে দেখলে, npm, Node-স্টাইল মডিউল এবং Browserify-এর মতো একটি বান্ডলারের সমন্বয় জাভাস্ক্রিপ্ট ফাইলের বিক্ষিপ্ত সংগ্রহকে একটি সুসংগত, ব্রাউজার-প্রস্তুত সম্পদ পাইপলাইনে রূপান্তরিত করে। ডেভেলপাররা মডুলার কোড লিখতে পারে, কমিউনিটি-রক্ষণাবেক্ষণ করা প্যাকেজের উপর নির্ভর করতে পারে এবং তবুও তাদের ওয়েব পৃষ্ঠাগুলিতে একটি একক স্ক্রিপ্ট সরবরাহ করতে পারে, যা আধুনিক জাভাস্ক্রিপ্ট ডেভেলপমেন্টকে বিভিন্ন সরঞ্জাম এবং পরিবেশে স্কেলযোগ্য এবং অ্যাক্সেসযোগ্য করে তোলে।