CommonJS և ES Modules
CommonJS և ES Modules համատեղում Node.js-ում
Node.js-ում սկզբնական տարբերակներում օգտագործվում էր միայն CommonJS մոդուլային համակարգը (require
և module.exports
)։ Սակայն ժամանակի ընթացքում Node.js սկսեց աջակցել նաև ES Modules-ին (import
և export
)՝ տալով ծրագրավորողներին ավելի մեծ ճկունություն։
Այսօր հնարավոր է օգտագործել երկու համակարգերն էլ, բայց դրանք համատեղելիս կան որոշ կարևոր նրբություններ։
Որպեսզի Node.js-ը իմանա, որ քո ֆայլը ES Module է, պետք է անել հետևյալից մեկը՝
index.mjs
)։"type": "module"
դաշտը․
{
"type": "module"
}
Այն ժամանակ բոլոր .js
ֆայլերը կընկալվեն որպես ES Modules։
Եթե ունես CommonJS մոդուլ և ուզում ես այն օգտագործել ES Modules-ից, պետք է օգտագործես import
-ի հատուկ ձևաչափ։ Օրինակ՝
// greet.cjs ֆայլ (CommonJS)
module.exports = function(name) {
return `Բարև, ${name}!`;
};
// main.mjs ֆայլ (ES Module)
import greet from './greet.cjs';
console.log(greet('Անի')); // Բարև, Անի!
Node.js ավտոմատ կերպով կվերածի CommonJS մոդուլը default export-ի նման՝ որպեսզի հնարավոր լինի import անել։
Եթե ուզում ես CommonJS կոդում օգտագործել ES Module, գործը մի փոքր ավելի բարդ է։ Հնարավոր չէ ուղղակիորեն require()
անել ES Module։ Այս դեպքում պետք է օգտագործել դինամիկ import()
ֆունկցիան, որը վերադարձնում է Promise։
// greet.mjs ֆայլ (ES Module)
export function greet(name) {
return `Բարև, ${name}!`;
}
// main.cjs ֆայլ (CommonJS)
async function loadGreet() {
const { greet } = await import('./greet.mjs');
console.log(greet('Անի')); // Բարև, Անի!
}
loadGreet();
Այս մոտեցումը պահանջում է async ֆունկցիաներ, քանի որ import() ֆունկցիան Promise է վերադարձնում։
Node.js-ում այժմ հնարավորություն կա օգտագործելու թե՛ CommonJS, թե՛ ES Modules, սակայն համատեղում անելիս կարևոր է հասկանալ սինթաքսիկ և տեխնիկական տարբերությունները։ Առաջարկվում է նոր նախագծերում հնարավորության դեպքում նախընտրել ES Modules, քանի որ դրանք համապատասխանում են JavaScript-ի նոր ստանդարտներին և ապահովում են ավելի լավ համատեղելիություն առաջադեմ գործիքների հետ։