Nodemon 未在 Node.js 20.9.0 中加载 .env 变量(未定义)

Nodemon Not Loading .env Variables in Node.js 20.9.0 (undefined)

提问人:Sakar 提问时间:11/17/2023 更新时间:11/17/2023 访问量:60

问:

当我使用 运行我的应用程序时,环境变量会正确加载。但是,当我尝试使用带有脚本的 nodemon 运行相同的应用程序时,环境变量未定义。node --env-file=.env index.jsnpm run dev

  • Node.js 版本:20.9.0
  • Nodemon 版本:3.0.1

我尝试将package.json配置为 ,但它仍然未定义。"scripts": {"dev": "nodemon index.js"}, "scripts": {"start": "nodemon --exec 'node --env-file=.env index.js'"}

javascript 节点 .js 环境变量 nodemon

评论


答:

0赞 Wil Moore III 11/17/2023 #1

你写道

nodemon --exec 'node --env-file=.env index.js'

但是,你会希望 在引号之外index.js

» npx nodemon --exec 'node --env-file=.env' index.js

演示

» cat .env
ENVIRONMENT_NAME=local

» cat index.js
console.log(process.env.ENVIRONMENT_NAME);

» npx nodemon --exec 'node --env-file=.env' index.js
[nodemon] 3.0.1
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,cjs,json
[nodemon] starting `node --env-file=.env index.js`
local
[nodemon] clean exit - waiting for changes before restart

这同样适用于包脚本:

» cat package.json
{
  "name": "env",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "npx nodemon --exec 'node --env-file=.env' index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

» npm start

> [email protected] start
> npx nodemon --exec 'node --env-file=.env' index.js

[nodemon] 3.0.1
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,cjs,json
[nodemon] starting `node --env-file=.env index.js`
local
[nodemon] clean exit - waiting for changes before restart

评论

1赞 Sakar 11/17/2023
这并没有解决问题。直接在命令行中执行时,您的命令和我的命令都可以工作。但是,当我在 package.json 中配置命令并使用 npm run dev 运行它时,它无法正常运行。谢谢你的回答。
2赞 Sakar 11/17/2023 #2

解决方案 1:

经过一些故障排除,我发现问题与引号的解释方式有关。通过删除命令部分周围的引号,问题已得到解决。node --env-file=.env index.js

"dev": "nodemon --exec node --env-file=.env index.js"

关键要点:在某些环境或 shell 配置中,package.json脚本中处理引号的方式可能会导致意外行为或错误。如果遇到类似问题,调整脚本命令中引号的使用可能会提供解决方案。

解决方案 2

我还发现了另一个解决方案,即添加到根文件夹并向其添加以下内容nodemon.json

{
    "execMap": {
      "js": "node --env-file=.env"
    }
}

现在,您可以保持原样。"dev": "nodemon index.js"package.json

0赞 Muhamed Fazeel 11/26/2023 #3

尝试像这样替换您的开发脚本:

"dev": "nodemon --env-file=.env index.js"