Мне нужна помощь в структурировании / настройке пакетов, чтобы получить то, что я хочу работать.
Я пытаюсь использовать 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 никогда не работает, однако.).
Я получаю ту или иную ошибку в зависимости от ситуации:
- "Ошибка: не удается найти модуль XXX импортировано из YYY. js "
- " SyntaxError: Невозможно использовать инструкцию импорта вне модуля "
- " Ошибка [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 серверов?