Node দুটি মডিউল সিস্টেম সমর্থন করে: CommonJS (CJS) — মূল সিস্টেম, require/module.exports ব্যবহার করে — এবং ES Modules (ESM) — মান, import/ ব্যবহার করে। এগুলি সিনট্যাক্স, লোডিং আচরণ এবং পারস্পরিক সামঞ্জস্যে পৃথক।
Node দুটি মডিউল সিস্টেম সমর্থন করে: CommonJS (CJS) — মূল সিস্টেম, require/module.exports ব্যবহার করে — এবং ES Modules (ESM) — মান, import/ ব্যবহার করে। এগুলি সিনট্যাক্স, লোডিং আচরণ এবং পারস্পরিক সামঞ্জস্যে পৃথক।
export// math.js
function add(a, b) { return a + b; }
module.exports = { add };
// app.js
const { add } = require("./math"); // synchronous, runtime
// math.mjs (or .js with "type": "module")
export function add(a, b) { return a + b; }
export default something;
// app.mjs
import { add } from "./math.mjs"; // static, hoisted
CommonJS ES Modules
Syntax require/module.exports import/export
Loading synchronous, runtime static, hoisted
Top-level await no yes
Tree-shaking hard yes (statically analyzable)
File extension .cjs / .js (default) .mjs / .js with "type":"module"
__dirname/__filename available not available (use import.meta.url)
// package.json
{ "type": "module" } // now .js files are treated as ESM
অথবা স্পষ্টভাবে .mjs এক্সটেনশন ব্যবহার করুন। এটি ছাড়া, Node ডিফল্টভাবে .js কে CommonJS হিসাবে বিবেচনা করে।
// ESM can import CommonJS:
import pkg from "some-cjs-lib"; // works (default import)
// CommonJS CANNOT require() a pure-ESM package (it's async):
const esm = require("esm-only-pkg"); // ❌ ERR_REQUIRE_ESM
// must use dynamic import: const esm = await import("esm-only-pkg");
মূল সমস্যা: CJS ESM-শুধুমাত্র প্যাকেজ require() করতে পারে না — এটি সাধারণ মাইগ্রেশন সমস্যা। এছাড়াও নোট করুন ESM __dirname নেই (import.meta.url ব্যবহার করুন)।
উভয় সিস্টেম জানা বাস্তব Node কাজের জন্য অপরিহার্য: ESM হল ভবিষ্যত (মান, tree-shakeable, top-level await, ব্রাউজার-সংযুক্ত) এবং নতুন প্রকল্পের জন্য সঠিক পছন্দ, কিন্তু npm ইকোসিস্টেম এবং বিদ্যমান কোডের একটি বিশাল অংশ CommonJS।
সিনট্যাক্স পার্থক্য, কীভাবে ESM সক্ষম করতে হয় ("type": "module"), এবং পারস্পরিক সামঞ্জস্যের সীমাবদ্ধতা (বিশেষত CJS-ESM প্যাকেজ প্রয়োজন করতে পারে না) বুঝা সাধারণ বিভ্রান্তি এবং ত্রুটি প্রতিরোধ করে যা তাদের মিশ্রণ করার সময় দেখা যায়।