如何在.env文件中使用nodemon?

nod*_*nja 22 javascript development-environment web-services environment-variables node.js

我使用.env文件来保存服务器的环境变量.如果我使用foreman start运行服务器,这是有效的.但它不适用于nodemon.

我想使用nodemon,因为它会在您修改服务器时自动重新启动.如何让nodemon使用.env文件?

Dan*_*llo 32

我有一个生产 Procfile:

web: node web.js
Run Code Online (Sandbox Code Playgroud)

所以我创建了一个Procfile_dev文件:

web: nodemon web.js
Run Code Online (Sandbox Code Playgroud)

当我在开发环境中运行时:

$ foreman start -f Procfile_dev
Run Code Online (Sandbox Code Playgroud)

它的作用就像一个魅力,不会影响生产.


fli*_*ide 23

您可以使用以下命令让nodemon直接使用.env

$: env $(cat .env) nodemon app.js
Run Code Online (Sandbox Code Playgroud)

请注意,如果对.env进行更改,则必须重新启动它.如果.env文件中有任何空格,则不会喜欢它.


Tom*_*Tom 15

这样就可以做到,

nodemon  -w . -w .env index.js
Run Code Online (Sandbox Code Playgroud)

工作原理:
“-w”。告诉nodemon 监视当前目录中的文件
“-w .env”告诉nodemon 监视.env 文件
“index.js”只是发生更改时要运行的文件(可以是任何内容)


bre*_*ell 8

使用最新版本的Node(从io.js 1.6开始),您可以将-r标志传递给需要启动的模块.这允许您.env使用nodemon 直接加载--exec:

nodemon --exec 'node -r dotenv/config'
Run Code Online (Sandbox Code Playgroud)

这需要dotenv安装npm包.

  • 或者只是`nodemon -r dotenv / config` ...? (4认同)

小智 7

将本地配置变量放在.env文件中,并使用以下命令运行foreman和nodemon

$ foreman run nodemon web.js
Run Code Online (Sandbox Code Playgroud)


jen*_*101 6

就我而言,我使用的是 TypeScript,该.env文件仅用于开发。我希望我的代码与文件分离.env,但我不想import 'dotenv/config'在代码中的任何地方分离。这是我的解决方案:

我的nodemon配置:

{
  "watch": [
    "src",
    ".env"
  ],
  "ext": ".ts",
  "exec": "ts-node -r dotenv/config ./src/index.ts"
}
Run Code Online (Sandbox Code Playgroud)

我的 NPM 脚本:

"start:dev": "nodemon"
Run Code Online (Sandbox Code Playgroud)

在此解决方案中ts-node需要 dotenv,它在主应用程序启动之前设置环境变量。这意味着我的代码中没有任何地方需要import 'dotenv/config'. dotenv可以成为开发依赖项,这也会阻止在部署代码后加载 dotenv。


Ale*_*oya 5

  1. 安装dotenv npm i dotenv
  2. .env在内部创建文件和您的变量
  3. 添加脚本以执行

    "dev": "nodemon -r dotenv/config ./app/index.js " or
    "start": "node -r dotenv/config ./app/index.js "
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用npm run dev或 运行应用npm run start

  • 嗯,当将 Typescript 与 nodemon 一起使用时,或者可能与扩展“-e”标志结合使用时,这似乎对我不起作用。 (3认同)