如何在 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
中定义TEST
和CONNECTION_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 文件?的主要内容,如果未能解决你的问题,请参考以下文章
你如何在 Webstorm 中设置文件观察器来重启 Node.js?
如何在 Dockerfile 中设置 Node 环境变量以运行 node.js 应用程序?