如何将 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】:-
安装dotenv
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
运行应用程序
【讨论】:
【参考方案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 start
和nodemon
将使用该文件。如果您将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 文件一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
将 browsersync 与 gulp/nodemon 一起使用