美文网首页
dotenv将环境变量从项目根目录下的.env文件加载到proc

dotenv将环境变量从项目根目录下的.env文件加载到proc

作者: 静昕妈妈芦培培 | 来源:发表于2021-03-16 11:31 被阅读0次

    Dotenv是零依赖模块,可将环境变量从项目根目录下的.env文件加载到[process.env]中(https://nodejs.org/docs/latest/api/process.html#process_process_env)。将配置与代码分开存储在环境中是基于“十二要素应用程序”方法的。

    安装

    npm install dotenv
    

    用法

    在您的项目的根目录中创建一个.env文件。以NAME=VALUE的形式在新行上添加特定于环境的变量。例如:
    .env

    DB_HOST=localhost
    DB_USER=root
    DB_PASS=s1mpl3
    

    config.js

    const dotenv = require('dotenv')
    dotenv.config()
    //process.env现在具有您在.env文件中定义的键和值。
    
    //导出.env文件设置的变量,以供其他模块导入使用
    module.exports = {
      DB_HOST=localhost
      DB_USER=root
      DB_PASS=s1mpl3
    } = process.env
    

    process.env现在具有您在.env文件中定义的键和值。

    在其他模块导入使用变量,例如:
    /src/main.js

    const app = require('./app/index')
    const config = require('./app/config')
    
    app.listen(config.APP_PORT, () => {
        console.log(`服务器已启动在${config.APP_PORT}端口`)
    })
    

    Config

    config将读取您的.env文件,解析内容,将其分配给 process.env,并返回一个对象. 对象的parsed键是一个对象,包含加载的内容.如果失败,则返回一个键error,包含着错误。

    Path

    默认: path.resolve(process.cwd(), '.env'),其中process.cwd返回Node.js 进程的当前工作目录,也就是当前项目的根目录
    如果包含环境变量的文件位于其他位置,则可以指定自定义路径。

    require('dotenv').config({ path: '/full/custom/path/to/your/env/vars' })
    

    Encoding

    默认: utf8
    您可以指定包含环境变量的文件的编码。

    require('dotenv').config({ encoding: 'latin1' })
    

    Debug

    默认: false
    您可以打开日志记录以帮助调试为什么某些键或值未按预期设置。

    require('dotenv').config({ debug: process.env.DEBUG })
    

    Parse

    解析包含环境变量的文件内容的引擎是可以使用的,它接受一个String或Buffer并将返回一个带有已解析的键和值的Object。

    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' }
    
    options(此为Parse的可设置选项)

    Debug
    默认: 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
    

    Rules
    解析引擎当前支持以下规则:

    • BASIC=basic 变成 {BASIC: 'basic'}
    • 空行被跳过
    • #开头的行被视为注释
    • 空值变成空字符串(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'}
    

    常问问题

    我应该提交我的.env文件吗?

    否。我们强烈建议您不要将.env文件提交到版本控制。它应仅包含特定于环境的值,例如数据库密码或API密钥。生产数据库的密码应与开发数据库的密码不同。

    我应该有多个.env文件吗?

    不能。我们强烈建议不要使用“主要”.env文件和“环境”.env文件,例如.env.test。您的配置在部署之间应该有所不同,并且您不应该在环境之间共享值。

    在一个十二因子应用程序中,环境变量是粒度控件,每个控件都与其他环境变量完全正交。它们从不作为“环境”组合在一起,而是针对每个部署进行独立管理。当应用在其生命周期内自然扩展到更多部署时,该模型可以平稳地扩展。

    十二要素应用程序

    已经设置的环境变量会怎样?

    我们将永远不会修改任何已设置的环境变量。特别是,如果文件中有一个变量.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]
    }
    

    翻译自:https://www.npmjs.com/package/dotenv

    相关文章

      网友评论

          本文标题:dotenv将环境变量从项目根目录下的.env文件加载到proc

          本文链接:https://www.haomeiwen.com/subject/azircltx.html