ওয়েবপ্যাক দিয়ে কীভাবে আধুনিক অ্যাপ্লিকেশন তৈরি করা যায়

আমরা স্ট্যান্ডার্ড ওয়েবপ্যাক কনফিগারেশনটি কতদূর পেতে পারি?
আমি গত মাসে জিডিজি ডেভেস্টে কথা বলার সুযোগ পেয়েছি যা আমাদের আধুনিক অ্যাপ্লিকেশনগুলিতে ওয়েবপ্যাকগুলি ব্যবহারের উপর দৃষ্টি নিবদ্ধ করে। আপনি এখানে স্লাইডগুলি পরীক্ষা করে দেখতে পারেন।
প্রতিদিন আমি দুর্দান্ত এবং দ্রুত দলগুলিতে ইঞ্জিনিয়ার এবং / অথবা পরামর্শক হিসাবে কাজ করি এবং ওয়েবপ্যাকটি এই সমস্ত টিমের পুনরাবৃত্তির কারণ বলে মনে হচ্ছে (আমাদের বেশিরভাগ অ্যাপ্লিকেশনের জন্য আমরা রিএ্যাকটিজ ব্যবহার করি)। মূলত আমার আলাপটি ফ্রন্টএন্ড ফ্রেমওয়ার্ক / লাইব্রেরি যেমন রিঅ্যাক্টজেএস, ভ্যু, অ্যাঙ্গুলার ইত্যাদির সাথে ওয়েবপ্যাকগুলি ব্যবহার করার বিষয়ে ফোকাস করার কথা ছিল talk
আমার প্রস্তাব জমা দেওয়ার আগে, আমি ওয়েব-প্যাক সম্পর্কে লোকেরা কী ভাবেছে তা দেখার জন্য একটি মিনি-পোল করার সিদ্ধান্ত নিয়েছি। আমার অবাক করে দিয়ে, অনেকে ওয়েবপ্যাকটিকে "কেবল ফ্রেমওয়ার্ক সহ ব্যবহৃত" হিসাবে উল্লেখ করেছেন যা সত্য থেকে দূরে ছিল। এখনও অন্যরা বলেছেন যে একটি ওয়েবপ্যাক স্থাপন করা দু: খজনক। এটি আমাকে ভ্যানিলা জেএস-এর সাথে ওয়েবপ্যাকগুলি ব্যবহার করতে আরও মনোনিবেশ করতে এবং ডিফল্ট ওয়েবপ্যাক কনফিগারেশনের মাধ্যমে আমরা কতদূর পেতে পারি তা দেখার দিকে পরিচালিত করেছে।
কিন্তু প্রথম:
ওয়েবপ্যাক কি?

ব্যক্তিগতভাবে, আমি ওয়েবপ্যাকটিকে এমন একটি সরঞ্জাম হিসাবে সংজ্ঞায়িত করি যা অনেক জাভাস্ক্রিপ্ট মডিউল নেয় এবং সেগুলি ব্রাউজারে প্রেরণ করা যেতে পারে এমন একটি জাভাস্ক্রিপ্ট মডিউলে একীভূত করে।
আমি জানি এটি ওয়েবপ্যাক যা করে তার একটি সরলীকরণ, তবে লোকেরা এটি পেয়েছে বলে মনে হয়। আরও ব্যাখ্যা করার জন্য, ওয়েবপ্যাক এমন একটি বান্ডিলার যা নির্ভরতা সহ জাভাস্ক্রিপ্ট মডিউলগুলির জন্য অনুসন্ধান করে (মূলত জাভাস্ক্রিপ্ট ফাইলগুলির জন্য অন্যান্য জাভাস্ক্রিপ্ট ফাইলগুলির কোড প্রয়োজন), সেগুলি সংক্ষেপ করে এবং তার পরে একটি জাভাস্ক্রিপ্ট ফাইল বা ফাইলগুলি তৈরি করে যা এতে অন্তর্ভুক্ত থাকে কোন নির্ভরতা আছে। এইভাবে, তাদের সহজেই ব্রাউজারে প্রেরণ করা যায়।
ওয়েবপ্যাকের ইতিহাস
ওয়েবপ্যাক সমস্যা সমাধানের চেষ্টা করছে তা বোঝার জন্য, ওয়েবপ্যাকের ইতিহাস সম্পর্কে আমাদের কিছু জানা দরকার know এই বিভাগটি সংক্ষিপ্ত রাখতে, আমি কেবল দুটি মূল সরঞ্জাম এবং একটি ধারণাটি রূপরেখা দিয়েছি:
- গুগল ওয়েব টুলকিট: এটি গুগলের একটি ফ্রেমওয়ার্ক যা জাভাটিকে জাভাস্ক্রিপ্টে রূপান্তরিত করে (আমি জানি, ডান?) এটিতে এমন একটি বৈশিষ্ট্য রয়েছে যা ওয়েবপ্যাকটিতে আমার ব্যক্তিগত প্রিয় বৈশিষ্ট্য বলে মনে হচ্ছে এটি "কোড বিভাজন"। (আমি পরবর্তী প্রবন্ধে কোড ব্রেকডাউনটি ব্যাখ্যা করব))
- মডিউল_উইবমেক: এটি ওয়েবপ্যাক থেকে প্রাপ্ত লাইব্রেরি। এটি মূলত একটি সরঞ্জাম যা ব্রাউজারের জন্য আমাদের জাভাস্ক্রিপ্ট ফাইলগুলি নোডজেএস (চমত্কার) জন্য আমরা একইভাবে সংগঠিত করার অনুমতি দেয়।
- আইআইএফই: অর্থ হ'ল ফাংশন এক্সপ্রেশন অবিলম্বে বলা হয়। এটি মূলত একটি জাভাস্ক্রিপ্ট ফাংশন যা এটি তৈরি করা হয়েছিল বা একই সাথে বলা হয়েছিল it
তত্ক্ষণাত ফোন করা ফাংশন এক্সপ্রেশন
আমি এটির নিজের বিভাগে বিভক্ত হয়েছি কারণ আমাকে আরও ব্যাখ্যা করতে হয়েছিল। এটি একটি আইআইএফইর উদাহরণ:

আমরা যদি এই স্ক্রিপ্ট ট্যাগটিতে এই ফাংশনটি রাখি তা তা অবিলম্বে এটি করবে। স্ক্রিপ্ট ট্যাগ ব্রাউজার থেকে লোড করা হয়। এটি উইন্ডো.অনলোডে কোনও ফাংশন সংযোজন করার সমান, তবে এর অতিরিক্ত সুবিধা রয়েছে।
জাভাস্ক্রিপ্টে বন্ধের কাজ করার কারণে, আইআইএফইতে ঘোষিত সমস্ত ভেরিয়েবলগুলি এই ফাংশনটিতে অন্তর্ভুক্ত রয়েছে। এর অর্থ হল যে আমার কোড বেসে নেমস্পেস বিরোধের সাথে আমার কোনও সমস্যা নেই, তবে একই সাথে আইআইএফই সরবরাহিত কার্যকারিতাটিতে আমার এখনও অ্যাক্সেস থাকবে।
ওয়েবপ্যাক কেন?
ওয়েবপ্যাক আজ কোন সমস্যার মুখোমুখি?
প্রথমত, আমাদের স্ক্রিপ্ট ট্যাগগুলির সমস্যা আছে। আমি এমন একটি কোড বেসে কাজ করছি যেখানে প্রতিটি HTML পৃষ্ঠায় খুব সুনির্দিষ্ট ক্রমে কমপক্ষে 30 টি স্ক্রিপ্ট ট্যাগ রয়েছে। আমি জানি কেউ কেউ বলতে পারে এটি সত্যিকারের সমস্যা নয়, তবে ব্রাউজারকে প্রতি ফাইলের জন্য একটি অনুরোধ করতে হবে, যা আপনার "লোড টাইম" लाई প্রভাবিত করতে পারে। স্ক্রিপ্ট ট্যাগগুলি পরিচালনা করাও কঠিন হতে পারে, এবং কেবলমাত্র একটির পুনর্বিন্যাস করা অ্যাপ্লিকেশনটি ভেঙে দিতে পারে (এটি আমি চেষ্টা করেছি।)।
দ্বিতীয়ত, নাম স্থানটির সমস্যা এখনও রয়েছে যেখানে বিশ্বব্যাপী নেমস্পেস বিশৃঙ্খল হয়ে যেতে পারে। আমি জানি আমরা খুব সৃজনশীল মানুষ, বিশেষত যখন ভেরিয়েবলের নামকরণের বিষয়টি আসে তবে আপনি যখন আরও বড় দলের হয়ে থাকেন তখন এমন সময় আসে যখন ভেরিয়েবলের নামগুলি সংঘর্ষ হয়। এমনকি আপনার ভবিষ্যতও আপনি আবার একই নামটি ভাবতে পারেন (হ্যাঁ, এটি ঘটে)।
আমি কিছু সংস্থাগুলি জানি যা তাদের বিকাশকারীদের সর্বদা তাদের ফাংশনগুলির মধ্যে তাদের ভেরিয়েবলগুলি রাখার অভ্যাস হিসাবে গড়ে তোলে তবে আমরা সর্বদা এটির উপর নির্ভর করতে পারি না (বা নির্ভর করতে পারি না)। শেষ পর্যন্ত, এটি কেবল উদ্বেগগুলি পৃথক করা কঠিন করে তোলে।
তৃতীয়, আমার মনে আছে ওয়েবপ্যাকটি মডিউল_উইবমেক থেকে এসেছে। যেহেতু আমরা নোডজেএস-এ (কমনজেএস ব্যবহার করে) আমাদের ফাইলগুলি ঠিক একইভাবে সাজানোর জন্য ওয়েবপ্যাক ব্যবহার করতে পারি, তাই আমাদের কাছে মডুলার কোড লেখার অতিরিক্ত সুবিধা রয়েছে যা খুব ভালভাবে স্কেল করে (কেবলমাত্র ফ্রন্টএন্ড ফ্রেমওয়ার্কগুলি ব্যবহার করে এমন লোকদের জিজ্ঞাসা করুন)।
কমনজেএস

আমি সিজেএস সম্পর্কে খুব বেশি ব্যাখ্যা করতে যাচ্ছি না কারণ এটি নিবন্ধটির মূল বিষয় নয়। তবে, আপনি বলতে পারেন যে এটি একটি জেএস মডুলার সিস্টেম যা নোডজেএসে ব্যবহৃত হয়।
ওয়েবপ্যাকের সাহায্যে আমরা ব্রাউজারে সহজেই এই মডিউলটি এবং "আরও ভাল" ইএস মডিউল সিস্টেমটি ব্যবহার করতে পারি (ওয়েবপ্যাকটি বুদ্ধিমান উপায়ে এটি পরিচালনা করে)। এটি আমাদের সত্যই মডুলার এবং রক্ষণাবেক্ষণযোগ্য কোড লিখতে সহায়তা করে যাতে একটি জেএস ফাইল কোনও একক কার্যকারিতা (একক দায়িত্বের নীতিমালা) পরিচালনা করতে পারে।
ES মডিউল (ESM)

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

আমার সেখানে দুটি ফাইল রয়েছে, index.js এবং helpers.js। এই দুটি ফাইল পৃথক ফাংশন সম্পাদন করে তবে আমি আমদানি করে আমার সূচি.জেএস ফাইলটিতে সাহায্যকারী.জেজে ফাংশনটি ব্যবহার করি। ডিফল্টরূপে, ওয়েবপ্যাক এন্ট্রি পয়েন্টটি ./src/index.js। সেখান থেকে এটি নির্ভরতা চিত্রটি এভাবে তৈরি করার চেষ্টা করে:

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

প্রথম পদক্ষেপটি একটি নতুন প্রকল্প ডিরেক্টরি তৈরি করা এবং দুটি ফোল্ডার তৈরি করা হয়, যার নাম ডিস্ট এবং অন্যটি নামযুক্ত এসসিআর। ডিফল্টরূপে, ওয়েবপ্যাকের প্রবেশ পয়েন্টটি ./src/index.js হয় এবং জেএস প্যাকেজটি ./dist/main.js এ আউটপুট হয় is এজন্য আমরা দুটি ফোল্ডার তৈরি করছি।
আপনি dist ফোল্ডারে index.html ফাইল তৈরি করতে পারেন। এটি ওয়েবপ্যাকের জন্য প্রয়োজনীয় নয় কারণ ফাইলটি ডিরেক্টরি ডিরেক্টরিতে যে কোনও জায়গায় সংরক্ষণ করা যেতে পারে এবং আপনি কেবল মেইন.জেএস ফাইলটি উল্লেখ করতে পারেন। শেষ পর্যন্ত, আপনার প্রকল্পের কাঠামোটি দেখতে এমন হওয়া উচিত:

এসআরসি ফোল্ডারে আমরা ইনডেক্স। Html ফাইল তৈরি করি, যাতে আমরা আমাদের টো-ডিও অ্যাপ্লিকেশনটির কার্যকারিতা বাস্তবায়ন শুরু করি। প্রথমে আমরা index.html ফাইলটি ডেটা সহ পূরণ করি। যেহেতু একটি টু-ডিও অ্যাপ তৈরি করা এই টিউটোরিয়ালের অংশ নয়, আমি কেবল নিম্নলিখিত কোডটি দেখাব:
টোডো অ্যাপ শিরোনাম মাথা> <ডি ক্লাস = "ধারক"><লেবেল = "নতুন-টাস্ক"> উপাদান যুক্ত করুন লেবেল> <ইনপুট আইডি = "নতুন-টাস্ক" প্রকার = "পাঠ্য"> <বোতাম আইডি = "অ্যাডটাস্ক"> বাটন> p>
টোডো h3>
ul> div> <স্ক্রিপ্ট src = "main.js"> স্ক্রিপ্ট বডি> html>
এখন এটি কাজ করা যাক। আমরা দুটি ফাংশন (যুক্ত এবং মুছে ফেলা) তাদের নিজস্ব ফাইলগুলিতে ভাঙ্গতে যাব এবং তারপরে সেগুলি index.js এ আমদানি করব। আমরা আমাদের এসআরসি ফোল্ডারে অ্যাডটাস্ক.জেএস এবং ডিলিটটাস্ক.জেএস নামে দুটি ফাইল তৈরি করতে যাচ্ছি। আপনার প্রকল্পের কাঠামোটি এখন দেখতে এইরকম হওয়া উচিত:

আমরা এখন আমাদের প্রয়োজনীয় যুক্তি যুক্ত করা শুরু করতে পারি। সুতরাং আসুন প্রথমে ডিলিটটাস্ক.জেএস ফাইলটি বাস্তবায়ন করি কারণ এর কোনও নির্ভরতা নেই। আপনার মুছে ফেলা টাস্ক.জেএস ফাইলটিতে এটি আটকান:
কনসট ডিলিটটাস্ক = ফাংশন (গুলি) so কনসোল.লগ ("টাস্ক মুছুন ...", ই) // উল তালিকা থেকে মূল তালিকা আইটেমটি সরান আইটেম = e.target.parentNode; var ul = listItem.parentNode;
ul.removeChild (listItem); };
ডিফল্ট ডিফল্ট ডিলিটটাস্ক;
এই ফাইলটিতে কেবল ডিলিটটাস্ক ফাংশন তৈরি করা হয় এবং তারপরে স্ট্যান্ডার্ড এক্সপোর্ট হিসাবে রফতানি করা হয়।
এখন আমরা অ্যাডটাস্ক ফাংশনটি বাস্তবায়ন করতে পারি। AddTask.js ফাইলে, নিম্নলিখিত কোডটি যুক্ত করুন:
"./DeleteTask" থেকে মুছুন টাস্ক আমদানি করুন;
create createNewTaskElement = ফাংশন (টাস্ক স্ট্রিং) {কনট লিস্টটি আইটেম = ডকুমেন্ট.ক্রেটইলেট ("লি"); কনস্ট লেবেল = ডকুমেন্ট.ক্রেটএলিমেন্ট ("লেবেল"); কনট ডিলিটবটন = ডকুমেন্ট.ক্রেটইলেট ("বোতাম");
deleteButton.innerText = "মুছুন"; মুছুন বাটন.ক্লাসনাম = "মুছুন"; ডিলিটবটন.এডডিএভেন্টলিস্টনার ("ক্লিক করুন", ডিলিটটাস্ক);
label.innerText = টাস্কস্ট্রিং;
listItem.appendChild (লেবেল); listItem.appendChild (মুছে ফেলা);
প্রত্যাবর্তন তালিকা };
কনড অ্যাডটাস্ক = ফাংশন (গুলি) {কমান্ড টাস্কলিস্ট = ডকুমেন্ট.জেট এলিমেন্টবাইআইডি ("কার্য"); কন্সট টাস্ক = ডকুমেন্ট.জেট এলিমেন্টবাইআইডি ("নতুন-টাস্ক"); if (টাস্ক.ভ্যালু! == "") {নতুন টাস্কআইটেম = createNewTaskElement (টাস্ক.ভ্যালু); টাস্কলিস্ট.অ্যাপেন্ডচিল্ড (নতুন টাস্কআইটেম); টাস্ক.ভ্যালু = ""; }};
এক্সপোর্ট ডিফল্ট অ্যাডটাস্ক;
এটিতে আমরা প্রথমে ফাইলটি ডিলিটটাস্ক.জেগুলি আমদানি করি। আমদানির সময় যদি কোনও এক্সটেনশান নির্দিষ্ট না করা থাকে তবে ওয়েবপ্যাকটি স্বয়ংক্রিয়ভাবে ধরে নেয় যে এটি ডিফল্টরূপে একটি .js ফাইল। তারপরে আমাদের ফাংশন রয়েছে যা তালিকার আইটেমটি তৈরি করে যা ফর্মটিতে প্রবেশ করা টাস্কটি অন্তর্ভুক্ত করে। মনে রাখতে হবে যে আমরা মুছুন বোতামটির ক্লিক হ্যান্ডলারের সাথে মুছে ফাংশনটি সংযুক্ত করছি। তারপরে আমরা আসল অ্যাডটাস্ক ফাংশন তৈরি করে এটিকে রফতানি করি।
আমাদের তখন আমাদের addTask ফাংশনটি index.js এ আমদানি করতে হবে। আপনার index.js ফাইলে নিম্নলিখিত কোডটি আটকে দিন:
'./addTask' থেকে অ্যাডটাস্ক আমদানি করুন;
কনস্ট addTaskButton = ডকুমেন্ট.সেটমেন্ট বিবিআইডি ("অ্যাডটাস্ক"); #TaskButton.addEventListener ("ক্লিক করুন", অ্যাডটাস্ক);
এটি বেশ সহজ: আমরা অ্যাডটাস্ক ফাংশনটি আমদানি করি এবং এটিকে অ্যাডটাস্ক বাটনের জন্য ক্লিক হ্যান্ডলারে যুক্ত করি। আপনি যদি উপরের পদক্ষেপগুলি অনুসরণ করেন তবে আপনার প্রস্তুত হওয়া উচিত।
আমাদের মেইন.জেএস ফাইলটি পেতে আমাদের কোড বেস থেকে ওয়েবপ্যাক চালানো দরকার। এই পদক্ষেপের জন্য, নোডজেএস আপনার সিস্টেমে ইনস্টল করা আছে তা নিশ্চিত করুন। তারপরে আমরা নিম্নলিখিত কমান্ডের সাথে বিশ্বব্যাপী ওয়েবপ্যাক এবং ওয়েবপ্যাক সি এল এল ইনস্টল করব:
এনপিএম ইনস্টল -জি ওয়েবপ্যাক ওয়েবপ্যাক-ক্লিপ বা এনডো এনপিএম ইনস্টল -জি ওয়েবপ্যাক ওয়েবপ্যাক-ক্লিপ
ইনস্টলেশন সমাপ্ত হওয়ার পরে, নিম্নলিখিত কমান্ডটি চালান:
ওয়েবপ্যাক
এটি আমাদের ফাইলটিকে সফলভাবে বান্ডেল করবে, তবে আমাদের টার্মিনালে এই জাতীয় সতর্কতা দেখতে হবে:

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