Node.js读取.env变量返回undefined问题的排查与解决
这个问题我碰到过好多次啦,别着急,咱们一步步排查解决:
第一步:确保安装并正确引入dotenv包
Node.js本身不会自动加载.env文件,得靠dotenv这个包来帮我们处理。先确认你有没有安装它:
运行安装命令:npm install dotenv # 或者用yarn yarn add dotenv然后在你的
server.js最顶部(一定要在其他代码之前)添加这段代码:// CommonJS语法 require('dotenv').config(); // 如果你的项目用ES模块(package.json里有"type": "module"),就用这个: // import dotenv from 'dotenv'; // dotenv.config();第二步:检查.env文件的位置是否正确
确保.env文件和你的server.js在同一个项目根目录下。如果它在其他子文件夹里,你需要在config时指定路径:require('dotenv').config({ path: './src/.env' }); // 替换成你的.env实际路径结合你提供的文件层级截图,仔细核对一下位置,别把
.env放到了子目录里哦。第三步:检查.env文件的语法是否规范
.env的语法很严格,注意这几点:- 变量名和值之间不要加空格:比如
val = hello是错的,必须写成val=hello - 值不需要加引号:
val="hello"虽然有时候能生效,但容易出问题,尽量用无引号的写法 - 不要在变量名前加
export:比如export val=hello是多余的,dotenv会自动处理
- 变量名和值之间不要加空格:比如
第四步:重启你的服务器
如果你用了nodemon之类的自动重启工具,有时候修改.env后它不会自动触发重启,这时候手动重启一下服务器,再运行node server.js试试。第五步:验证环境变量是否真的被加载
在dotenv.config()之后,打印所有环境变量看看:require('dotenv').config(); console.log(process.env); // 看看输出里有没有val这个键如果输出里没有
val,说明.env文件没被正确加载;如果有但值不对,再检查.env的内容或者是否有其他地方覆盖了这个变量。第六步:排查是否有环境变量被覆盖
系统环境变量或者运行命令时手动设置的变量会优先于.env里的内容。比如你如果用val=world node server.js启动服务器,那process.env.val会是world而不是.env里的hello。可以检查一下系统里有没有同名的环境变量。
按照上面的步骤排查下来,基本就能解决process.env.val返回undefined的问题啦!
内容的提问来源于stack exchange,提问作者user7927930

