Транспортировка ES6 и запуск приложения Express при изменении файла - PullRequest
0 голосов
/ 11 сентября 2018

Я разрабатываю приложение Express.Код использует операторы импорта ES6, поэтому Babel должен передать его в код ES5, чтобы его можно было запускать с Node.Исходный код ES6 хранится в моем каталоге src, а скомпилированный код помещается в мой каталог dest.

Я хотел бы запустить команду npm, которая будет наблюдать за любымИзмените мой каталог src, перенесите проект в dest, а затем перезапустите приложение Express.

Ниже приведено мое решение (я запускаю npm run server:watch).Он использует chokidar-cli для выполнения сценариев server:build и server:run всякий раз, когда любой js-файл изменяется в моем каталоге src.Это работает отлично, за исключением того, что приложение Express не умирает при повторной передаче кода, поэтому я получаю исключение «порт используется», когда я пытаюсь снова запустить server:watch.

// package.json
"scripts": {
  "server:clean": "rm -f dist/*",
  "server:build": "npm run server:clean && ./node_modules/.bin/babel  ./src --experimental --source-maps-inline -d ./dist",
  "server:run": "nodemon dist/app.js --watch",
  "server:watch": "chokidar 'src/*.js' -c 'npm run server:build && npm run server:run'"
}

Включен ли яправильный путь здесь?Как лучше всего решить проблему такого рода?

(Для пояснения я говорю о передаче кода на стороне сервера, поэтому веб-пакет или любой другой модуль-модуль здесь неуместен)

1 Ответ

0 голосов
/ 29 сентября 2018

nodemon смотрит ваши файлы dist и никогда не завершает работу. С вашим скриптом наблюдения вы запускаете второй экземпляр nodemon каждый раз, когда происходит изменение файла, поэтому возникает ошибка "используется порт".

Вам нужно запустить nodemon один раз и продолжать работать в фоновом режиме, пока работает скрипт просмотра. Это легче всего сделать с помощью https://github.com/mysticatea/npm-run-all.

Установите его, запустив:

npm install npm-run-all --save-dev

в командной строке.

Тогда вы бы отредактировали свои скрипты так:

// package.json
"scripts": {
  "server:clean": "rm -f dist/*",
  "server:build": "npm run server:clean && ./node_modules/.bin/babel  ./src --experimental --source-maps-inline -d ./dist",
  "server:run": "nodemon dist/app.js --watch",
  "server:watch": "chokidar 'src/*.js' -c 'npm run server:build'",
  "server:dev": "run-p server:run server:watch"
}

Затем вы просто запускаете npm run server:dev в командной строке, чтобы запустить сервер с помощью nodemon и запустить процесс наблюдения / восстановления, и все это в одной команде.


Примечание: если вы разрабатываете для Windows, вы не сможете использовать одинарные кавычки в своих скриптах, вам придется использовать двойные кавычки, экранированные с помощью \" в JSON.

...