Nodemon запускается несколько раз при сохранении при использовании babel

Я использую Nodemon и Babel 6. Я полностью удалил Nodemon и установил последнюю версию.

Я пробовал обе следующие строки в своих сценариях npm:

"watch-new": "nodemon src/index.js --exec babel-node"

А также

"watch-new": "nodemon src/index.js --exec babel -w src/ -d build/ --source-maps"

Изменения в работе babel, по-видимому, приводят к похожим/идентичным ошибкам, связанным с nodemon.

Я начал с файла, который просто содержал console.log("Hello, World!");, а затем добавил после этого оператора строку, содержащую console.log("Test");. Сохранение (только один раз) двухстрочного файла привело к следующему выводу консоли.

Добавление любого из следующих элементов в nodemon приводит к перезапуску моей программы только один раз "--delay 2.5" или "-L" / "--legacyWatch"

Почему он так много раз запускается и перезагружается?

введите здесь описание изображения


person Connorelsea    schedule 06.09.2016    source источник


Ответы (1)


Я обнаружил, что комбинации nodemon, babel и других программ-наблюдателей часто могут странно взаимодействовать. Этот тип «двойного хода» довольно распространен. Они отлично работают, когда настроены просто так, но могут быть хрупкими.

Тем не менее, я не понимаю ваш выбор аргументов командной строки. Я не скажу, что они неверны, но они не соответствуют версиям babel, которые я установил, или документации, которую я использую. Были заметны изменения в рекомендуемых способах запуска Babel; не вся документация в Интернете актуальна и актуальна с учетом последних подходов.

Поэтому вместо того, чтобы пытаться отлаживать то, что не работает в вашей конфигурации, позвольте мне дать вам конфигурацию, которая работает у меня.

Сначала я установил Babel и его пресеты:

npm install --save-dev babel-cli babel-preset-es2015

Затем скрипт npm в package.json:

"watch-new": "nodemon src --exec babel --presets es2015 -w src/ --out-dir build/ --source-maps"

(Вы можете использовать другие пресеты. Я использую только большой, ES2015.)

Я вызываю nodemon для исходного каталога, а не для одного исходного файла, с другой стороны, чтобы babel не вкладывалось src в build; Я предполагаю, что вам нужны отдельные файлы .js в build, а не в подкаталоге src. Я также использую вариант --out-dir, который я считаю правильным (не -d).

Наконец, запустите его:

npm run watch-new

Эти пакеты и этот вызов скрипта дают мне правильное поведение с повторным запуском один раз для каждого изменения. Если вы хотите, чтобы node запускал код сразу после преобразования, а не сохранял его под build/, вы можете изменить --exec babel на --exec babel-node и удалить спецификацию --out-dir.

И последнее замечание: ваш вопрос помечен для ECMAscript-6. То, что когда-то называлось es6, теперь более официально называется es2015. (См., например, этот учебник по названиям новых версий.) У вас больше шансов получить правильную, актуальную документацию, если вы будете искать по новому термину es2015.

person Jonathan Eunice    schedule 06.09.2016
comment
Спасибо за помощь. Я изменил свои сценарии npm, чтобы они соответствовали вашему новому сценарию. Я получаю этот вывод после внесения одного изменения. Выделенная строка — это то место, где я был до того, как изменил код и один раз нажал «Сохранить». imgur.com/a/glcs1 - person Connorelsea; 06.09.2016
comment
Если я удалю '-w src/', он просто будет работать вечно. Просто наблюдение. - person Connorelsea; 06.09.2016
comment
Добавление любого из следующих элементов в nodemon приводит к перезапуску моей программы только один раз --delay 2.5 или -L / --legacyWatch - person Connorelsea; 06.09.2016