Как получить синтаксис ES6, работающий в Node для библиотек, приложений и серверов? - PullRequest
0 голосов
/ 13 апреля 2020

Мне нужна помощь в структурировании / настройке пакетов, чтобы получить то, что я хочу работать.

Я пытаюсь использовать Node для создания приложений CLI, использующих синтаксис ES6, и создания общей библиотеки / пакетов многократного использования, использующих синтаксис ES6, которые могут использоваться в Express сервере или приложениях CLI Node.

Я использую Node v12.16.1. Я использую ES6 без проблем в программировании внешнего интерфейса React (из-за babel / webpack). Я использую ES6 без проблем весь день на Express серверах.

То, что я сделал (иногда) сработало:

  • Сделал несколько файлов .mjs
  • Включение и выключение пакета. json "type": "module"
  • Перезаписаны файлы кода для небольших библиотек, чтобы использовать «require» вместо импорта (это очень нежелательно).
  • Используется node --experimental-modules ./cli.js
  • В некоторых операциях импорта используются явные расширения файлов (это новое) const { component } from '../lib/library.js'
  • Используется babel (я бы предпочел, если бы я мог этого избежать, но у меня нет проблемы с этим. babel-node никогда не работает, однако.).

Я получаю ту или иную ошибку в зависимости от ситуации:

  1. "Ошибка: не удается найти модуль XXX импортировано из YYY. js "
  2. " SyntaxError: Невозможно использовать инструкцию импорта вне модуля "
  3. " Ошибка [ERR_REQUIRE_ESM]: необходимо использовать импорт для загрузки модуля ES "

Первое, что я получаю прямо сейчас. Конфигурация: у меня "type":"module" в файле package.json, и я звоню node --experimental-modules ./cli.js. Он задыхается от import { generateTestData } from "../lib/generateTestData", но он полностью работает, если я добавляю расширение файла в (import { generateTestData } from "../lib/generateTestData.js").

Второй - когда я удаляю "type":"module" из package.json. Тем не менее, у меня есть другое приложение CLI, которое выполняет точно , и это работает без проблем. (Я делаю то же самое в этом, и я получаю 1-е, и могу исправить только путем изменения расширения файла.).

Третий, который показывает часто парадоксальный и ложный характер этих ошибок, Я использую babel-node во всем коде ES6, в котором НЕТ «требуется».

Я хочу использовать синтаксис ES6 для абсолютно всего. Мой повторно используемый библиотечный код, Express серверы и приложения CLI.

Я не хочу переименовывать все мои файлы *.mjs, если я могу избежать этого.

Если я могу выполнить Приложения CLI без использования babel, я согласен с этим, если мне придется сначала добавить babel, это тоже нормально.

Пример структуры файла:

/code

/code/cli
/code/cli/bin
/code/cli/bin/cli.js
/code/cli/lib/clilib.js

/code/library
/code/library/lib
/code/library/lib/library.js (written in ES6)

Я использую npm link ./library и затем npm install ../library внутри CLI для повторного использования библиотеки во время разработки. cli.js использует код clilib.js, в то время как clilib.js использует library.js.

Как мне заставить Node постоянно разрешать мне использовать синтаксис ES6 для библиотек, CLI и Express серверов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...