Node.js - nodemon vs node - разработка против производства

Я хотел бы использовать $>npm start и использовать для его разработки "nodemon" и "node". Я не могу поставить условную логику в файл package.json, так как это лучше всего сделать?

Ответ 1

nodemon фактически считывает значение package.start, поэтому, если вы просто установите для свойства start то, что у вас было бы в производстве, например node app.js, затем запустите nodemon без каких-либо аргументов, он будет работать с package.start и перезапустите, как вы ожидали бы в разработке.

Ответ 2

Вы можете использовать запуск NPM как обычную оболочку script.

"scripts": {
  "start": "if [$NODE_ENV == 'production']; then node app.js; else nodemon app.js; fi"
}

Теперь, чтобы запустить сервер для производства

$ NODE_ENV='production' npm start

или для разработки

$ NODE_ENV='development' npm start

Ответ 3

Мне понравилось решение Даниэля, но я подумал, что будет еще чище поместить его в отдельный файл, startup.sh:

#!/bin/sh

if [ "$NODE_ENV" = "production" ]; then
  node src/index.js;
else
  nodemon src/index.js;
fi

Затем просто измените package.json на:

"scripts": {
  "start": "../startup.sh"
},

Ответ 4

Вместо того, чтобы вводить логику в свой "старт", просто добавьте другой скрипт, например "start-dev": "nodemon app.js", и выполните его как "npm run-script start-dev".