Я хотел бы использовать $>npm start
и использовать для его разработки "nodemon" и "node". Я не могу поставить условную логику в файл package.json, так как это лучше всего сделать?
Node.js - nodemon vs node - разработка против производства
Ответ 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".