如何在 Node.js 中设置 dotenv 文件?

Posted

技术标签:

【中文标题】如何在 Node.js 中设置 dotenv 文件?【英文标题】:How do I setup the dotenv file in Node.js? 【发布时间】:2015-01-14 09:52:56 【问题描述】:

我正在尝试使用 dotenv NPM 包,但它不适合我。我有一个文件config/config.js,内容如下:

'use strict';
    
var dotenv = require('dotenv');
dotenv.load();
console.log('config');

我的应用程序文件夹的根目录中有另一个文件.env。我还有一个环境变量TWILIO_ACCOUNT_SID

这是我尝试在某个函数中使用环境变量时经历的过程:

$ node
> require('./config/config.js');
config

> process.env.TWILIO_ACCOUNT_SID
undefined

我在 .env 文件中定义了 TWILIO_ACCOUNT_SID,但是当我尝试在控制台中输出该值时,我收到一条错误消息,指出该变量未定义。

我将非常感谢在解决此问题时提供的任何支持。

【问题讨论】:

对我有用,在 REPL 和运行脚本中。你使用的是什么版本的节点,你能展示一个你的 .env 文件的例子吗? 我在 .env 文件中添加了导致此错误的分号。 【参考方案1】:

在我的情况下,在我的 MacBook Pro 上读取我的 .env 文件的相同代码库没有读取我的登台服务器 ubuntu 18.04 上的 .env 文件,所以我尝试了@user3006381 建议,我注意到代码正在尝试查看对于我的用户目录“/home/myusername/.env”而不是“/home/myusername/project/.env”中的 .env 文件, 如果您知道为什么会这样,请添加评论。

【讨论】:

【参考方案2】:

在一些操作系统上(主要是一些 linux 发行版,我在看你的 raspbian),.env 文件不起作用。重命名它们并导入

【讨论】:

【参考方案3】:

我自己在这里注意到了一些东西。

我已经正确定义了.env,等等,并且我在那里定义了DATABASE_URL,但是尽管这样做了另一个DATABASE_URL被引用,如果它存在的话,也许引用了一个全局环境变量?

无论如何,我发现当我在.env 中定义TESTCONNECTION_STRING 时,它们都被正确引用,而DATABASE_URL 仍然没有被引用。

谢谢,

迈克尔

【讨论】:

【参考方案4】:

就我而言,我正在创建一个 vscode 扩展,其中 __dirname 指的是 d:\extension\my_extension\out 之类的东西。

根文件夹是my_extension,但__dirname指向my_extension\out

所以我通过写来修复它

require('dotenv').config(path: __dirname.slice(0,-3)+'/.env');

【讨论】:

【参考方案5】:

我有类似的问题。我通过修剪解决了它。请检查,path.resolve 可能会在路径末尾添加额外的空间。

var path = require('path');
const envPath = path.resolve(process.cwd()+'/config','.env.'+process.env.NODE_ENV).trim()
require('dotenv').config( path: envPath )

我的包脚本是这样使用多个.env的:

 "scripts": 
    "start": "set NODE_ENV=development && nodemon ./bin/www",
    "prod": "set NODE_ENV=production && node ./bin/www"
  ,

【讨论】:

【参考方案6】:

如果这是使用 dotenv 的 react native 项目,.env 文件可能不会更改,因为它被缓存在 ios 构建中。在 XCode 中,每次更新 .env 时执行 Product > Clean Build Folder

【讨论】:

你也可以使用react-native-dotenv来管理你的.env文件

以上是关于如何在 Node.js 中设置 dotenv 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Winston/Node.js 中设置日志级别

你如何在 Webstorm 中设置文件观察器来重启 Node.js?

如何在 Dockerfile 中设置 Node 环境变量以运行 node.js 应用程序?

如何在 node.js 中设置默认时区?

如何使用 swig node js 在变量中设置 JSON 对象?

运行 cron 作业 (Node.js) 时如何在 Amazon Elastic Beanstalk 中设置环境变量?