Использование ES-модулей в Node.js

В этом руководстве вы узнаете, как использовать модули ES в Node.js с помощью операторов импорта и экспорта.

JavaScript использует модуль ECMAScript для создания пакетов для повторного использования. Помимо модуля CommonJS, Node.js поддерживает модули ES в версии 14.0.0.

Таким образом, Node.js имеет два типа модулей: модули ES и CommonJS.

По умолчанию Node.js рассматривает JavaScript как модули CommonJS. Но вы можете указать Node.js рассматривать код JavaScript.

Node.js будет рассматривать следующие файлы как модули ES:

  • Файлы, заканчивающиеся на .mjs
  • Файлы, оканчивающиеся на .js, если ближайший родительский файл package.json содержит поле верхнего уровня "type" со значением "module".
  • Передайте аргумент --eval или передайте команду node через STDIN с флагом --input-type=module.

Модуль через файлы .mjs

Сначала создайте новый файл с именем math.mjs и добавьте следующий код:

function add(x,y) {
    return x + y;
}

function subtract(x,y){
    return x - y;
}

export { add, subtract};

В math модуле:

  • Сначала определите функции add и subtract.
  • Во-вторых, экспортируйте функцию add и subtract, используя оператор export.

Во-вторых, создайте новый файл с именем app.mjs, который использует math модуль:

import { add, subtract } from './math.mjs';

let result = add(20, 10);
console.log(result);

result = subtract(30, 10);
console.log(result);

В файле app.mjs :

  • Сначала импортируйте функции add и substract из math модуля с помощью оператора import.
  • Во-вторых, вызовите функции add и subtract.

В-третьих, запустите файл app.mjs с помощью команды node :

node app.mjs

И вы должны увидеть в консоли следующее:

{ result: 30 }
{ result: 20 }

В этом примере мы используем файлы, которые заканчиваются на .mjs, node.js рассматривает их все как модули ES.

Модуль с type-модулем в package.json

  • Сначала переименуйте math.mjs и app.mjs в math.js и app.js
  • Во-вторых, создайте файл package.json с type поля верхнего уровня со значением "module" :
{
    "type":"module"
}
  • В-третьих, запустите файл app.js с помощью команды node :
node app.js

И вы должны увидеть тот же результат, что и в первом примере.

С аргументом eval

В следующем примере выполняется команда node с аргументом eval и параметром --input-type=module :

node --input-type=module --eval "import { delimiter } from 'path';
 console.log(delimiter);"

В этом примере мы передаем следующий код в аргумент --eval :

import { delimiter } from 'path';
    console.log(delimiter);

Это импортирует разделитель из модуля path и выводит его на консоль.

Точно так же вы можете использовать следующую команду:

echo "import { delimiter } from 'path'; console.log(delimiter);
    " | node --input-type=module

Заключение

  • Node.js поддерживает как модули CommonJS, так и модули ES.
  • По умолчанию Node.js рассматривает файлы как модули CommonJS.
  • Используйте .mjs или package.json с полем верхнего уровня type="module", если вы хотите, чтобы Node.js рассматривал файлы как модули ES.
Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript