Как использовать nodemon с файлами.env?

Я использую файл.env для хранения переменных окружения для сервера. Это работает, если я запускаю сервер с запуском мастера. Но это не работает с nodemon.

Вместо этого я хотел бы использовать nodemon, потому что он автоматически перезагружается при изменении сервера. Как мне заставить nodemon работать с файлами.env?

16 ответов

  1. Установить дотенв npm i dotenv
  2. Создайте .env файл и ваши переменные внутри
  3. Добавьте скрипт для выполнения

    "dev": "nodemon -r dotenv/config ./app/index.js " or
    "start": "node -r dotenv/config ./app/index.js "
    
  4. Запустите приложение, используя 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.

В три шага

  1. Создание файла в корневой папке> .env
# .env ======
PORT=5000
WHO_AM_I="Who Knows"
  1. Установите dotenv
  2. Выполните команду ниже
"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
Другие вопросы по тегам