Новая версия Node 13.2.0 официально поддерживает функцию модулей ES.

Node.js

21 числа этого месяца, 2019.11.21, Node.js выпустила версию 13.2.0, в которой были обновлены некоторые функции. Самым волнующим из них является официальная отмена--experimental-modulesпараметры запуска. Это означает, что Node.js официально поддерживает модули ES. Давайте посмотрим вместе.

Описание индекса стабильности

Индекс стабильности, то есть описание индекса стабильности API. Он включает в себя 3 значения:

  1. Стабильность: 0 , не рекомендуется. Указывает, что API официально объявлен устаревшим, и эта функция может выдать предупреждение. Обратная совместимость не гарантируется.
  2. Стабильность: 1. Экспериментальная. Указывает, что API уже поддерживает удобство использования. Но обратно несовместимые изменения или удаления могут произойти в любом будущем выпуске. Не рекомендуется использовать эту функцию в производственной среде.
  • Стабильность: 2, стабильная версия. Указывает на то, что тест завершен, в основном никаких дальнейших изменений происходить не будет, и его можно использовать в производственной среде.

Unflag --experimental-modules

В версии 13.2.0 узел имеет экспериментальную поддержку модулей ECMAScript, включенную по умолчанию, что означает, что параметры запуска не требуются. Итак, как nodejs различает esm и commonjs? Переведите официальную документацию здесь.

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

  • Суффикс файла.mjs
  • Когда суффикс файла.js, или, если суффикс файла отсутствует, посмотрите на его файл package.json,package.json 中 type 字段值为 "module"
  • Добавить параметры запуска --input-type=module
  • Используйте переданные символьные аргументы для--eval,Такие как$ node --eval 'import("http");

В остальных случаях он будет распознан как commonjs. Теперь этот узел уже поддерживает esm и commonjs, когда мы его используем, лучше указать модуль.

Например 🌰

import './legacy-file.cjs';
// Loaded as CommonJS since .cjs is always loaded as CommonJS.

import 'commonjs-package/src/index.mjs';
// Loaded as ES module since .mjs is always loaded as ES module.

В этом случае он обрабатывается в разных модулях в соответствии с суффиксом файла.

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

в текущем каталоге или в родительском каталогеpackage.jsonсодержать"type": "module", модуль будет рассматриваться как модуль ES.

// my-app.js, in an ES module package scope because there is a package.json
// file in the same folder with "type": "module".

import './startup/init.js';
// Loaded as ES module since ./startup contains no package.json file,
// and therefore inherits the ES module package scope from one level up.

import 'commonjs-package';
// Loaded as CommonJS since ./node_modules/commonjs-package/package.json
// lacks a "type" field or contains "type": "commonjs".

import './node_modules/commonjs-package/index.js';
// Loaded as CommonJS since ./node_modules/commonjs-package/package.json
// lacks a "type" field or contains "type": "commonjs".

Как показано в комментариях выше, если текущий каталог файлов не содержитpackage.json, он будет смотреть на родительский каталогpackage.jsonфайл, а затем определите тип типа.

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

Вот использование передачи параметров символов в--eval,Добавить к--input-typeслучае параметров запуска.

Быстрый опыт

Текущая официальная документация версии 13.2.0 помечает модуль ES какStability: 1, вы уже можете установить новую версию, чтобы поэкспериментировать. Я верю, что совместными усилиями сообщества мы скоро войдемStability: 2Официальная стабильная версия.

При локальной разработке часто необходимо быстро обновлять или переключаться между разными версиями узла. Вы можете использовать nvm, n и другие решения, а межплатформенное решение для локального управления — nvs. Вы можете использовать его.Пример, который я привожу здесь, это использование nvs:

$ nvs add node/13.2.0
$ nvs use 13.2.0
$ node -v
13.2.0

Попробуйте сейчас~

наконец

  • Добро пожаловать, чтобы добавить меня в WeChat (winty230), привлечь вас в техническую группу, долгосрочный обмен и обучение...
  • Добро пожаловать, чтобы обратить внимание на «Front-end Q», серьезно изучить интерфейс и быть профессиональным техническим специалистом...

GitHub