21 числа этого месяца, 2019.11.21, Node.js выпустила версию 13.2.0, в которой были обновлены некоторые функции. Самым волнующим из них является официальная отмена--experimental-modules
параметры запуска. Это означает, что Node.js официально поддерживает модули ES. Давайте посмотрим вместе.
Описание индекса стабильности
Индекс стабильности, то есть описание индекса стабильности API. Он включает в себя 3 значения:
- Стабильность: 0 , не рекомендуется. Указывает, что API официально объявлен устаревшим, и эта функция может выдать предупреждение. Обратная совместимость не гарантируется.
- Стабильность: 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», серьезно изучить интерфейс и быть профессиональным техническим специалистом...