Zam*_*age 15 javascript node.js dotenv
我在根文件夹文件中有.env 文件
NODE_ENV=development
NODE_HOST=localhost
NODE_PORT=4000
NODE_HTTPS=false
DB_HOST=localhost
DB_USERNAME=user
DB_PASSWORD=user
Run Code Online (Sandbox Code Playgroud)
并server.js
在root/app/config/server.js
文件夹中存档.第一行server.js
文件是
require('dotenv').config();
我也试过以下:
require('dotenv').config({path: '../.env'})
;
require('dotenv').config({path: '../../.env'})
;
但是,当我server.js
从命令提示符运行该文件时,我的env变量未加载
node root/app/config/server.js
如果我使用visual studio并按下F5,它会加载!
我不确定我做错了什么,我错过了什么.任何建议都非常感谢.谢谢.
Dav*_*idP 42
这解决了我在 Node 中的问题v8.14.1
:
const path = require('path')
require('dotenv').config({ path: path.resolve(__dirname, '../.env') })
Run Code Online (Sandbox Code Playgroud)
简单地做require('dotenv').config({path:__dirname+'/./../../.env'})
导致一个位置解析为/some/path/to/env/./../../.env
小智 30
怎么用require('dotenv').config({path:__dirname+'/./../../.env'})
?
你的问题似乎是执行路径.
Sas*_*chi 20
这是一个单行解决方案:
require('dotenv').config({ path: require('find-config')('.env') })
Run Code Online (Sandbox Code Playgroud)
这将递归父目录,直到找到要使用的 .env 文件。
你也可以使用这个名为ckey 的模块,灵感来自上面的 one-liner。
.env 文件来自主目录。
# dotenv sample content
USER=sample@gmail.com
PASSWORD=iampassword123
API_KEY=1234567890
Run Code Online (Sandbox Code Playgroud)
来自子目录的一些js文件
const ck = require('ckey');
const userName = ck.USER; // sample@gmail.com
const password = ck.PASSWORD; // iampassword123
const apiKey = ck.API_KEY; // 1234567890
Run Code Online (Sandbox Code Playgroud)
Dig*_*lit 19
@DavidP 的答案中的评论之一记录了 dotenv.config 的输出
console.log(require("dotenv").config())
Run Code Online (Sandbox Code Playgroud)
这将输出配置日志并显示错误。就我而言,它表明 config 方法正在引用当前目录,而不是包含我的 .env 文件的父目录。我可以通过以下内容进行参考
require('dotenv').config({path: '../.env'})
Run Code Online (Sandbox Code Playgroud)
dnh*_*yde 10
在您到达这一点的远程情况下,我的问题相当愚蠢:我错误地用冒号“:”而不是等于“=”命名了我的环境变量。菜鸟错误,但导致的行为不是加载拼写错误的变量赋值。
# dotenv sample content
# correct assignment
USER=sample@gmail.com
# wrong assignment (will not load env var)
USER : sample@gmail.com
Run Code Online (Sandbox Code Playgroud)
Ark*_*Tun 10
确保.env
在条目文件的开头加载(例如index.js
或server.js
)。有时,执行顺序会在服务启动后加载环境变量。并且,通过使用__dirname
,它可以轻松地指向相对于当前文件所需的文件。
这里我的项目结构是这样的。
\n.\n\xe2\x94\x9c\xe2\x94\x80 src\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80 index.ts\n\xe2\x94\x94\xe2\x94\x80 .env\n
Run Code Online (Sandbox Code Playgroud)\n.\n\xe2\x94\x9c\xe2\x94\x80 src\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80 index.ts\n\xe2\x94\x94\xe2\x94\x80 .env\n
Run Code Online (Sandbox Code Playgroud)\n
如果您dotenv
从嵌套文件调用,并且您的.env
文件位于项目根目录,则您希望通过以下方式连接点:
require('dotenv').config({path:'relative/path/to/your/.env'})
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以首先使用以下方法进行调试:
console.log(require('dotenv').config())
Run Code Online (Sandbox Code Playgroud)
在我的场景中,我的.env
文件位于根目录中,我需要在嵌套目录中使用它。结果给了我:
{
parsed: {
DATABASE_URL: 'mongodb://localhost/vidly',
PORT: '8080'
}
}
Run Code Online (Sandbox Code Playgroud)
所以我简单地解析结果并将其存储在一个变量中:
{
parsed: {
DATABASE_URL: 'mongodb://localhost/vidly',
PORT: '8080'
}
}
Run Code Online (Sandbox Code Playgroud)
然后像 JS 对象一样访问我的 DATABASE_URL:
const dotenv = require('dotenv').config().parsed;
Run Code Online (Sandbox Code Playgroud)
小智 6
这为我解决了这个问题:
const path = require('path');
require('dotenv').config({
path: path.resolve('config.env'),
});
Run Code Online (Sandbox Code Playgroud)
小智 6
尝试这个:
const dotenv = require('dotenv');
dotenv.config({ path: process.cwd() + '/config/config.env' });
Run Code Online (Sandbox Code Playgroud)
为我工作我不知道怎么样?
这让我有些头疼,将 require 语句的输出记录到控制台的提示非常有用。console.log(require('dotenv').config());
事实证明,我正在从我的 user/ 目录运行我的应用程序nodemon application_name/.
,这使得 dotenv 在我的主目录而不是应用程序的目录中查找 .env 文件。我很懒,跳过了一个cd
,这花了我几分钟的时间。
const path = require('path');
const dotenv = require('dotenv');
dotenv.config({ path: path.resolve(__dirname, '../config.env') })
Run Code Online (Sandbox Code Playgroud)
小智 5
debug: true
我在配置中找到了一个要发送的选项
dotenv.config({ debug: true });
Run Code Online (Sandbox Code Playgroud)
这向我展示了以下内容:
[dotenv][DEBUG] "PORT" is already defined in `process.env` and was NOT overwritten
Run Code Online (Sandbox Code Playgroud)
我添加overwrite: true
并让它工作:
[dotenv][DEBUG] "PORT" is already defined in `process.env` and WAS overwritten
Run Code Online (Sandbox Code Playgroud)
我知道我可能回答得太晚了,但在检查文档几个小时后决定分享我的发现。
归档时间: |
|
查看次数: |
19598 次 |
最近记录: |