Как использовать nodemon с файлами.env?
Я использую файл.env для хранения переменных окружения для сервера. Это работает, если я запускаю сервер с запуском мастера. Но это не работает с nodemon.
Вместо этого я хотел бы использовать nodemon, потому что он автоматически перезагружается при изменении сервера. Как мне заставить nodemon работать с файлами.env?
16 ответов
- Установить дотенв
npm i dotenv
- Создайте
.env
файл и ваши переменные внутри Добавьте скрипт для выполнения
"dev": "nodemon -r dotenv/config ./app/index.js " or "start": "node -r dotenv/config ./app/index.js "
Запустите приложение, используя
npm run dev
или жеnpm run start
У меня есть производственный Procfile с:
web: node web.js
Итак, я создал файл Procfile_dev с:
web: nodemon web.js
И когда я в среде разработки, я запускаю:
$ foreman start -f Procfile_dev
Это работает как шарм и не влияет на производство.
Вы можете заставить nodemon напрямую использовать.env с помощью следующей команды
$: env $(cat .env) nodemon app.js
Помните, что вам придется перезапустить его, если вы внесете изменения в.env, и вам не понравится, если в вашем файле.env есть пробелы.
Пока у меня это работает очень хорошо,
nodemon -w . -w .env index.js
Как это работает: "-w
" говорит nodemon смотреть файлы в текущем каталоге " -w.env " говорит nodemon смотреть.env файл "index.js " просто файл для запуска, когда происходят изменения (может быть что-нибудь)
В последних версиях Node (начиная с io.js 1.6) вы можете передать его -r
флаг для запуска модуля. Это позволяет напрямую загружать .env
используя nodemon's --exec
:
nodemon --exec 'node -r dotenv/config'
Это требует пакета npm dotenv
быть установленным.
Поместите локальные переменные конфигурации в файл.env и запустите foreman вместе с nodemon, используя следующую команду
$ foreman run nodemon web.js
В моем случае файл используется для разработки, а не развертывания. Поэтому я хотел, чтобы мой код был отделен от
.env
файл. В идеале я не хотел нигде в моем коде. Это мое решение:
Моя конфигурация нодмона:
{
"watch": [
"src",
".env"
],
"ext": ".ts",
"exec": "ts-node -r dotenv/config ./src/index.ts"
}
Мой скрипт NPM:
"start:dev": "nodemon"
В этом решении
ts-node
требуется dotenv, который устанавливает переменные среды перед запуском основного приложения. Это означает, что нигде в моем коде мне не нужно
import 'dotenv/config'
.
dotenv
может стать зависимостью разработчика, и это также предотвращает загрузку dotenv после развертывания кода.
"scripts": {
"start": "node -r dotenv/config src/server.js dotenv_config_path=dev.env dotenv_config_debug=true",
"start:dev": "nodemon --exec \"npm start\""
}
Нить некромантии!
Используйте grunt-env для загрузки переменных окружения из вашей конфигурации heroku.
В три шага
- Создание файла в корневой папке> .env
# .env ======
PORT=5000
WHO_AM_I="Who Knows"
- Установите dotenv
- Выполните команду ниже
"dev": "nodemon -r dotenv/config src/app.js"
Вы можете получить доступ к определенным вами переменным, используя> process.env.varible_name
Если вы хотите запустить Typescript и вам нужен определенный файл с
dotenv
тогда вы можете сделать:
В
package.json
скрипты:
"dev": "nodemon -r dotenv/config src/myApp.ts dotenv_config_path=/path/to/your/env/file",
И строчка в
nodemon.json
сказать
nodemon
использовать
ts-node
при встрече с расширениями Typescript:
"execMap": {"ts": "node -r ts-node/register"},
Это полезно для использования файла разработки, скажем
.env.development.local
для локальной работы разработчиков и оставить основной
.env
файл для живых производственных переменных.
Используйте ключ -w, чтобы указать nodemon, что нужно смотреть дополнительно.
"scripts": {
"dev": "env-cmd nodemon -w app -w *.js -w .env server.js"
}
Не забудьте перезапустить npm run dev
вpackage.json
:
...
"scripts": {
...
"dev": "nodemon src/index.js -w . -w .env -e js,mjs,json,env",
...
},
...
предполагаяindex.js
находится по адресу./src
и.env
файл находится в корне.
npm run dev
сейчас:
[nodemon] watching path(s): *.* .env
[nodemon] watching extensions: js,mjs,json,env
я используюcross-env
для сред.
npm i cross-env
наборpackage.json
.
"start": "cross-env NODE_ENV=production node dist/app.js",
"dev": "cross-env NODE_ENV=dev nodemon --exec ts-node src/app.ts",
npm run start
ИЛИnpm run dev
Heroku Procfile
Изменение: web: узел app.js на web: nodemon app.js
Чтобы загрузить пакет dotenv и любые объявленные переменные.env в среду, вы можете сделать следующее:
nodemon -r dotenv/config myapp.js