Отличия между CommonJS и ESM модулями
Не могут использоваться в браузере без сборщика. В Node.js
файлы с расширением .js
относятся к системе модулей CommonJS
, которая применяется в Node.js
и предполагает использование require
и module.exports
:
// импорт модуля CommonJS
const product = require('product');
// экспорт модуля CommonJS
function product() {
console.log('CommonJS');
}
module.exports.product = product;
Могут использоваться в браузере без сборщика. В Node.js
файлы с расширением .mjs в свою очередь, связаны с системой модулей ECMAScript Modules (ESM)
, в основе которой лежат директивы import
и export
. Система ESM
позволяет всесторонне применять статический анализ и приемы оптимизации, такие как tree shaking
:
// импорт модуля ESM
import product from 'product';
// экспорт модуля CommonJS
export function product() {
console.log('ESM');
}
Помните о необходимости указания атрибута type="module"
для вашего скрипта:
// так подключаются модули без сборщика
<script type="module" src="./your-module.js"></script>
В веб разработке мы используем для CommonJS
и ECMAScript Modules (ESM)
одно расширение файлов .js
, тип указывается package.json
в виде параметра type
который определяет формат модуля для файлов с расширением ..js
:
"type": "module"
Если файл package.json
не содержит поля type
, то файлы .js
рассматриваются как CommonJS
.
Значение module
в поле type
указывает Node.js
интерпретировать файлы .js
внутри пакета как использующие синтаксис ES
.