পাইথনের মতোই, আমি সর্বদা নিজেকে এই গডড্যামন কোড স্নিপেট কীভাবে লিখব তা মনে করার চেষ্টা করি। সুতরাং আমি এটির জন্য একটি সাধারণ মডিউল তৈরি করার সিদ্ধান্ত নিয়েছি। কলারের মডিউল তথ্য অ্যাক্সেস করা সোজাসাপ্টা নয়, তবে এটি কীভাবে করা যায় তা মজাদার হয়েছিল।
সুতরাং ধারণাটি হল একটি মডিউলকে কল করা এবং কলার মডিউলটি মূল কিনা এটি জিজ্ঞাসা করা। আমাদের কলার ফাংশনের মডিউলটি বের করতে হবে। আমার প্রথম পদ্ধতির গ্রহণযোগ্য উত্তরের একটি পরিবর্তন ছিল:
module.exports = function () {
return require.main === module.parent;
};
তবে এটি কাজের গ্যারান্টিযুক্ত নয়। module.parent
মডিউলটি নির্দেশ করে যা আমাদের স্মৃতিতে লোড করে, আমাদের ডাকে এমনটি নয়। যদি এটি কলার মডিউলটি ছিল যা এই সহায়ক মডিউলটিকে মেমরিতে লোড করেছে, ঠিক আছে। তবে তা না হলে আমরা অসহায়। সুতরাং আমাদের অন্য কিছু চেষ্টা করা দরকার। আমার সমাধানটি ছিল একটি স্ট্যাক ট্রেস তৈরি করা এবং সেখান থেকে কলারের মডিউলটির নাম পাওয়া:
module.exports = function () {
// generate a stack trace
const stack = (new Error()).stack;
// the third line refers to our caller
const stackLine = stack.split("\n")[2];
// extract the module name from that line
const callerModuleName = /\((.*):\d+:\d+\)$/.exec(stackLine)[1];
return require.main.filename === callerModuleName;
};
এখন আমরা করতে পারি:
if (require("./is-main-module")()) { // notice the `()` at the end
// do something
} else {
// do something else
}
বা আরও পাঠযোগ্য:
const isMainModule = require("./is-main-module");
if (isMainModule()) {
// do something
} else {
// do something else
}
ভোলা অসম্ভব :-)