В этом руководстве вы узнаете, как использовать модули 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.