如何将 nodemon 与 .env 文件一起使用?

Posted

技术标签:

【中文标题】如何将 nodemon 与 .env 文件一起使用?【英文标题】:How to use nodemon with .env files? 【发布时间】:2012-05-20 13:47:17 【问题描述】:

我正在使用 .env 文件来保存服务器的环境变量。如果我使用工头启动运行服务器,这将有效。但它不适用于nodemon。

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

【问题讨论】:

我一直在使用带有dotenv 包的 .env 文件,并且非常有用,但是如果我更改 .env 文件上的一些变量并重新启动进程(例如在控制台上使用 rs 命令),我会遇到麻烦) .env 文件上的任何新更改都不会被考虑 【参考方案1】:
    安装dotenvnpm i dotenv 在里面创建.env文件和你的变量

    添加要执行的脚本

    "dev": "nodemon -r dotenv/config ./app/index.js " or
    "start": "node -r dotenv/config ./app/index.js "
    

    使用npm run devnpm run start 运行应用程序

【讨论】:

【参考方案2】:

我有一个生产 Procfile,其中:

web: node web.js

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

web: nodemon web.js

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

$ foreman start -f Procfile_dev

它就像一个魅力,不影响生产。

【讨论】:

使用 Express 的 Procfile_dev 将是:web: nodemon ./bin/www【参考方案3】:

你可以通过下面的命令让nodemon直接使用.env

$: env $(cat .env) nodemon app.js

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

【讨论】:

如果你的任何变量里面有 JSON 值,这种方法就会有问题。示例:JSON="a": "b",因为 doublecuotes 转义。【参考方案4】:

使用最新版本的 Node(自 io.js 1.6 起),您可以将 -r 标志传递给它,以在启动时要求模块。这使您可以使用 nodemon 的 --exec 直接加载 .env

nodemon --exec 'node -r dotenv/config'

这需要安装 npm 包dotenv

【讨论】:

或者只是nodemon -r dotenv/config...?【参考方案5】:

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

$ foreman run nodemon web.js

【讨论】:

这是一个很好的解决方案,因为如果你不想要一个Procfile,它也不会强迫你。另一种方法是在package.json 文件中使用start script section,npm startnodemon 将使用该文件。如果您将Heroku 用于生产,它现在会在部署时生成一个Procfile,它也使用npm start【参考方案6】:

到目前为止,这对我来说效果很好,

nodemon  -w . -w .env index.js

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

【讨论】:

【参考方案7】:

线程死灵术!

使用grunt-env 从您的heroku 配置中加载环境变量。

【讨论】:

这有助于我在 Gruntfile.js 中使用我的 .env 文件。正是我想要的。【参考方案8】:

分三步

    在根文件夹中创建文件 > .env
# .env ======
PORT=5000
WHO_AM_I="Who Knows"
    安装 dotenv 运行以下命令
"dev": "nodemon -r dotenv/config src/app.js"

您可以使用 > process.env.varible_name 访问您定义的变量

【讨论】:

【参考方案9】:

如果你想在 nodemon 中运行 Typescript 并且需要一个 特定 .env 文件和 dotenv 那么你可以这样做:

package.json 脚本中:

"dev": "nodemon -r dotenv/config src/myApp.ts dotenv_config_path=/path/to/your/env/file",

nodemon.json 中的一行告诉nodemon 在遇到 Typescript 扩展时使用ts-node

"execMap": "ts": "node -r ts-node/register",

这对于使用开发 .env 文件(例如 .env.development.local)进行本地开发工作很有用,而将主 .env 文件用于实时生产变量。

【讨论】:

【参考方案10】:

使用 -w 键指定 nodemon 要额外监视的内容。

"scripts": 
    "dev": "env-cmd nodemon -w app -w *.js -w .env server.js"

别忘了重新运行npm run dev

【讨论】:

【参考方案11】:

Heroku Procfile

更改:web: node app.js 到 web: nodemon app.js

【讨论】:

【参考方案12】:

要将 dotenv 包和任何声明的 .env 变量加载到环境中,您可以执行以下操作:

nodemon -r dotenv/config myapp.js

【讨论】:

以上是关于如何将 nodemon 与 .env 文件一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 nodemon 与 WSL 2 一起工作?

将 browsersync 与 gulp/nodemon 一起使用

如何在开发和生产中设置 dotenv?

如何使跨环境和 nodemon 一起工作?

将 nodemon 与 docker 和 docker-compose 一起使用

如何将 nuxt.config.js 中的 .env 值与运行时配置一起使用