Node.js v13.2.0 поддерживает модули ES

Node.js

Эта статья была впервые опубликована в публичном аккаунте: CoyPan, как и ожидалось.

написать впереди

Недавно Node.js выпустил версию 13.2.0, объявив о поддержке модулей ES. Перед этим, если вы хотите использовать модули ES в узле, вам нужно добавить--experimental-module. После версии 13.2.0 модули ES можно использовать напрямую.

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

Существует два способа использования модулей ES в вашем проекте:

1. Используйте суффикс файла.mjs

В качестве примера предположим, что каталог проекта выглядит следующим образом:

.
|____component
| |____a.mjs
|____index.mjs

Содержимое файла следующее:

// component/a.mjs
let a = 'This is component a';
export default a;

// index.mjs
import a from './component/a.mjs';
console.log(a);

воплощать в жизньnode index.mjs, код может быть выполнен правильно, вывод будет следующим:

(node:77465) ExperimentalWarning: The ESM module loader is experimental.
This is component a

2, файл все еще используется.jsсуффикс в проектеpackage.jsonСредние настройки:type:module

Каталог проекта выглядит следующим образом:

.
|____component
| |____a.js
|____package.json
|____index.js

Содержимое каждого файла следующее:

// component/a.js
let a = 'This is component a';
export default a;

// index.js
import a from './component/a.mjs';
console.log(a);

// package.json
{
  ...
  "type": "module", // 必须要有这一行
  ...
}

воплощать в жизньnode index.js, код может быть выполнен правильно, вывод будет следующим:

(node:78977) ExperimentalWarning: The ESM module loader is experimental.
This is component a

Если вы используете модуль ES в командной строке, вам нужно добавить--input-type=module. Например:

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

Следует отметить, что в настоящее время реализация модуля ES все еще является экспериментальной и может быть скорректирована в любое время в будущем.

Import

При импорте модулей ES поддерживаются следующие методы:

  1. относительный путь (./file.mjs)
  2. абсолютный путь (file:///opt/app/file.mjs)
  3. имя модуля (es-module-package’)
  4. Внутримодульный путь (es-module-package/lib/file.mjs)

Кроме того, при ссылке на модуль ES с помощью импорта его можно использовать следующим образом:

  1. import _ from ‘es-module-package’
  2. import { shuffle } from ‘es-module-package
  3. import * as fs from ‘fs

Все встроенные модули Node, такие какfsа такжеpath, все поддерживают указанные выше три способа ссылки.

импорт и Commonjs

import также может импортировать модули Commonjs, включая следующие два случая:

  • Модули написаны с использованием спецификации Commonjs и имеют суффикс:.cjs

Например, каталог кода выглядит следующим образом:

.
|____component
| |____a.cjs
|____package.json
|____index.js

Содержимое файла следующее:

// component/a.cjs
let a = 'This is component a';
console.log('aaaa');
module.exports = a;

// index.js
import a from './component/a.cjs'; 
console.log(a);

// package.json
{
  ...
  "type": "module",
  ...
}

воплощать в жизньnode index.js, код может быть выполнен корректно, ввод выглядит следующим образом:

(node:81677) ExperimentalWarning: The ESM module loader is experimental.
aaaa
This is component a
  • У модулей свой package.json, без настроек"type": "module"или установить"type": "commonjs". Например, каталог кода выглядит следующим образом:
.
|____component
| |____a.js
| |____package.json
|____package.json
|____index.js

Содержимое файла следующее:

// component/a.js
let a = 'This is component a';
console.log('aaaa');
module.exports = a;

// component/package.json
{
  "type": "commonjs" // 也可以不设置type字段
}

// index.js
import a from './component/a.js';
console.log(a);

// package.json
{
  ...
  "type": "module",
  ...
}

воплощать в жизньnode index.js, код может быть выполнен корректно, ввод выглядит следующим образом:

(node:81677) ExperimentalWarning: The ESM module loader is experimental.
aaaa
This is component a

написать на обороте

Эта статья кратко знакомит с использованием модуля ES в Node.js на примерах.Более подробную информацию можно найти в официальной документации:

узел будет .org/API/ESM.htm…