Импорт стиля ES6 в Node.js REPL

Исходя из фона Python и будучи новым для Node.js, мне было неожиданно сложно интерактивно попробовать код с Node.js REPL. Одна из ключевых проблем, с которыми я столкнулся, - imports:

Импорт стилей ES6 не будет работать на Node.js REPL, и я должен использовать импорт стиля в стиле JJJJ, используя require. Пример: я не могу написать import rxjs в приглашении Node и использовать require('rxjs'). Это затрудняет копирование вставных скриптов в Node REPL, чтобы быстро протестировать их, и я должен сначала преобразовать все импортированные им стили ES6, чтобы потребовать импорт, который кажется нелогичным.

Есть ли какой-либо простой способ использовать импорт стиля ES6 из Node.js REPL?

Как

$node
> import 'rxjs',
> import {map} из 'rxjs/operator/map';

Я даже пробовал babel-node, который, похоже, не поддерживает импорт модулей.

Ответ 1

Боюсь, что ответ - нет, или, по крайней мере, пока. Мы знаем, что это будет поддерживаться в будущем, но import и export ES2015 не будут действовать, как замена на месте CommonJS require и module.exports. Это просто потому, что они не работают одинаково. Вы можете найти более подробную информацию в этом блоге Node.js и это так вопрос. В частности, уже можно запускать и импортировать стандартные модули в Node.js под флагом --experimental-modules (соответствующий пост в блоге 2ality). Однако эта функция по-прежнему не будет работать с REPL.

Ваша идея использовать babel-node (который теперь называется babel-cli) была не так уж и плоха: babel реализует совместимую функцию require, которая является своего рода оболочкой, которая может извлекать модули, разработанные для системы любого типа. К сожалению, официальный сайт заявляет об отсутствии поддержки этой функциональности в REPL:

Загрузка модуля в стиле ES6 может не работать должным образом

Из-за технических ограничений загрузка модуля в стиле ES6 не поддерживается полностью в Babel-узле REPL.

Тем не менее, эта проблема не относится к производственному коду, который в любом случае не должен полагаться на REPL. Вместо того, чтобы использовать REPL, вы можете написать сценарий в простом проекте, содержащем babel-cli, и создать сценарий для запуска транспилированной версии:

{
  "name": "my-test-chamber",
  "private": true,
  "scripts": {
    "build": "babel src/main.js -o lib/main.js",
    "start": "npm run build && node lib/main.js"
  },
  "dev-dependencies": {
    "babel-cli": "^6.0.0"
  }
}