Модулі ECMAScript

Починаючи з версії 6.х Node.js підтримується підключення модулів згідно стандарту ECMAScript. Щоправда, повноцінно таке імпортування модулів запрацювало тільки з версії 14.x.

Перший спосіб за допомогою використання MJS модулів ми розглянули раніше.

Другий спосіб завдяки конфігурації файлу package.json. Це по суті файл налаштування проєкту. Йому потрібно встановити поле "type" у значення "module".

  1. Спочатку потрібно ініціалізувати проєкт. В терміналі заходимо в папку нашого проєкту і запускаємо команду

terminal
npm init

Після цього проклацуємо і вводимо всі поля налаштувань, які запитає термінал.

Утім можна поставити прапорець -y і в такому разі всі налаштування встановляться за замовчанням, але ми зможемо їх скорегувати в будь-який момент в проєкті в VSCode.

terminal
npm init -y

Після цього у каталозі нашого проєкту створиться файл package.json.

package.json
{
  "name": "es6_modules",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "Sasha Khomiak",
  "license": "ISC"
}

Нам потрібно дописати йому поле "type" у значення "module"

"type": "module"
package.json після правок
package.json
{
  "name": "es6_modules",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "Sasha Khomiak",
  "license": "ISC",
  "type": "module"
}

Тепер можна використовувати синтаксис експорту-імпорту стандарту ECMAScript, як було описано в MJS модулях. Тільки файли матимуть розширення js і при імпорті його не обов'язково вказувати.

english.js
const english = () => console.log("Hello from ECMAScript module");

export default english;
index.js
import english from "./english";

english();

А ось рефакторинг коду розглянутого в CommonJS.

module.js
export const info = msg => {
  console.log(`Info: ${msg}`);
};

export const log = msg => {
  console.log(`Log: ${msg}`);
};
index.js
import { info, log } from './module';

info('info function');
log('log function');

Last updated