多腾v
Dotenv 是一个零依赖模块,它从一个 .env 文件输入 process.env。在环境中与代码分开的存储配置基于 十二因素应用程序 方法.
安装
# with npm
npm install dotenv
# or with Yarn
yarn add dotenv
使用量
在应用程序中,请尽快要求和配置 dotenv .
require('dotenv').config()
创建一个 .env 在您的工程根目录中的文件。 添加
新线上的环境变量,形式如下: NAME=VALUE。 。 。 .
例如:
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
process.env 现在有您定义的键和值 .env 文档.
const db = require('db')
db.connect({
host: process.env.DB_HOST,
username: process.env.DB_USER,
password: process.env.DB_PASS
})
预装
你可以用这个 --require (单位:千美元)-r(中文(简体) ) 命令行选项 以预装多腾v。 通过这样做,你不需要在应用程序代码中要求并加载多腾v. 这是在使用 import 改为 require。 。 。 .
$ node -r dotenv/config your_script.js
以下配置选项在格式中作为命令行参数支持 dotenv_config_<option>=value
$ node -r dotenv/config your_script.js dotenv_config_path=/custom/path/to/.env
此外,还可以使用环境变量设置配置选项. 命令行参数会在这些参数之前 .
$ DOTENV_CONFIG_<OPTION>=value node -r dotenv/config your_script.js
$ DOTENV_CONFIG_ENCODING=latin1 node -r dotenv/config your_script.js dotenv_config_path=/custom/path/to/.env
配置
config 会读你的 .env 文件、 解析内容、 指派到
process.env, (中文(简体) ),
返回带有 parsed 包含已装入内容的密钥或一个 error 键,如果失败.
const result = dotenv.config()
if (result.error) {
throw result.error
}
console.log(result.parsed)
另外,还可以将选项传递给 config。 。 。 .
选项
路径
默认 : path.resolve(process.cwd(), '.env')
如果您的文件包含环境变量, 您可以指定自定义路径 .
require('dotenv').config({ path: '/custom/path/to/.env' })
编码
默认 : utf8
您可以指定包含环境变量的文件的编码.
require('dotenv').config({ encoding: 'latin1' })
调试
默认 : false
您可以打开日志来帮助调试为什么某些密钥或值没有按照预期设置 .
require('dotenv').config({ debug: process.env.DEBUG })
多线
默认 : default
您可以指定值 line-breaks 将解析器切换为换行模式
允许在内部引用值.
require('dotenv').config({ multiline: 'line-breaks' })
允许在此格式中指定多行值 :
PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
MIGT...
7ure...
-----END PRIVATE KEY-----"
确保数值以单引号或双引号字符开头,以同字符结尾.
解析
描述包含环境的文件内容的引擎 变量可供使用。 它接受字符串或缓冲,并将返回 带有已解析的密钥和值的对象.
const dotenv = require('dotenv')
const buf = Buffer.from('BASIC=basic')
const config = dotenv.parse(buf) // will return an object
console.log(typeof config, config) // object { BASIC : 'basic' }
选项
调试
默认 : false
您可以打开日志来帮助调试为什么某些密钥或值没有按照预期设置 .
const dotenv = require('dotenv')
const buf = Buffer.from('hello world')
const opt = { debug: true }
const config = dotenv.parse(buf, opt)
// expect a debug message because the buffer is not in KEY=VAL form
规则
解析引擎目前支持以下规则:
-
BASIC=basic变成{BASIC: 'basic'} -
跳过空行
-
线条开头
#作为评论处理 -
空值变为空字符串( e)
EMPTY=变成{EMPTY: ''}(中文(简体) ) -
内部引文保持不变(认为JSON)(
JSON={"foo": "bar"}变成{JSON:"{\"foo\": \"bar\"}"(中文(简体) ) -
从未引用值的两端去除白空格(详见
trim(中文(简体) )FOO= some value变成{FOO: 'some value'}(中文(简体) ) -
单取和双取的数值被省去(
SINGLE_QUOTE='quoted'变成{SINGLE_QUOTE: "quoted"}(中文(简体) ) -
单取和双取值从两端保持空白(
FOO=" some value "变成{FOO: ' some value '}(中文(简体) ) -
双引出值扩展出新行. 示例
MULTILINE="new\nline"变成{MULTILINE: 'new line'} -
如果使用
{ multiline: "line-break" }选项. 在此模式下, 您不需要使用\n以区分行。 示例PRIVATE_KEY="-----BEGIN PRIVATE KEY----- MIGT... 7ure... -----END PRIVATE KEY-----"注意,在使用此选项时,所有以引用开头的值都必须以引用结尾.
财务问题
我是否应该承诺 .env 档案?
没有 我们 强烈的 建议不执行 .env 文件到版本
控制系统。 它只应包括数据库等环境特定值
密码或 API 密钥。 你的制作数据库应该有不同的
密码 .
我应该有多个 .env 档案?
没有 我们 强烈的 建议不使用“主” .env 文件和“环境” .env 类似文件 .env.test。您的配置应该因部署而异,不应该在环境之间分享价值.
在一个由12个要素组成的应用中,env vars是颗粒控制器,每个完全正交到其他env vars. 它们从未被归类为“环境”,而是在每次部署时得到独立的管理。 随着应用在一生中自然扩展为更多的部署,这个模型可以平稳地扩展.
– 说吧 – 十二因素应用程序
已经设定的环境变量会发生什么?
我们永远不会修改任何已经设定的环境变量。 特别是,如果有变量 在你的 .env 文件与环境中已经存在的文件相撞,则该变量将被跳过。 这种行为可以让你超越所有 .env 具有机器特定环境的配置,尽管不推荐.
如果您想要覆盖 process.env 你可以做这样的事情:
const fs = require('fs')
const dotenv = require('dotenv')
const envConfig = dotenv.parse(fs.readFileSync('.env.override'))
for (const k in envConfig) {
process.env[k] = envConfig[k]
}
我可以自定义/写入多腾v的插件吗?
对于 [email protected]对. dotenv.config() 现在返回一个代表对象
解析 .env 文档。 这给你所有需要继续的
设置值于 process.env。例如:
const dotenv = require('dotenv')
const variableExpansion = require('dotenv-expand')
const myEnv = dotenv.config()
variableExpansion(myEnv)
那可变扩张呢?
尝试 dotenv 扩展
我怎么用多腾夫 import? 吗?
ES2015及以后提供模块,允许您 export 任何顶级 function, (中文(简体) ), class, (中文(简体) ), var, (中文(简体) ), let,或 const。 。 。 .
当你运行一个包含
import声明,它所导入的模块首先被加载,然后每个模块正体在依赖图的深度第一转弯中被执行,通过跳过任何已执行的来避免循环.– 说吧 – ES6 深度:模块
你必须跑 dotenv.config() 在引用任何环境变量之前。 以下是一个问题代码的例子:
errorReporter.js数字 :
import { Client } from 'best-error-reporting-service'
export const client = new Client(process.env.BEST_API_KEY)
index.js数字 :
import dotenv from 'dotenv'
import errorReporter from './errorReporter'
dotenv.config()
errorReporter.client.report(new Error('faq example'))
client 将无法正确配置,因为它是之前构建的 dotenv.config() 被处决。 有(至少)3种方法可以使这项工作发挥作用.
- 预装多腾v :
node --require dotenv/config index.js(单位:千美元)说明:不需要import采用这种方法的dotenv(中文(简体) ) - 导入
dotenv/config改为dotenv(单位:千美元)注意: 您不需要拨打dotenv.config(),并且必须使用这种方法通过命令行或环境变量传递选项(中文(简体) ) - 创建一个将执行的单独文件
config一. 导言 此评论关于 # 133
贡献指南
见 捐款额
更改日志
见 变动情况
谁在用道特活?
扩展它的项目经常使用 npm 上的关键词"dotenv"。 。 。 .