Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

【配置】dotenv+config

dotenv

  • 安装

    npm i -S dotenv
    
    • 最新版本10.0.0
  • 根目录下新建.env文件,里面写敏感配置

    • 必须要加入到.gitignore里面,防止泄漏
    • 可以只留下键=,存一个.env.example
      • 上传到git版本控制中便于其他开发者填写后在本地跑项目
  • .env文件写法

    NODE_ENV=production
    DB_HOST=localhost
    
  • 【重要】尽早初始化的写法(位于lib/utils/config.js)

    import * as dotenv from "dotenv";
    dotenv.config();
    
    • 然后在index.js入口文件中,第一行就 import 这个 config.js
    • 通过单独文件执行这两行代码,保证都被引入,否则后面import config from "config";会出问题!!!

config

  • 安装

    npm i -S config
    
    • 最新版本3.3.6
  • 根目录下要新建config文件夹,放置非敏感配置文件

    mkdir config
    
    • 在里面新建default.json

      • 放置多个环境共用的默认配置
        {
            "default": true
        }
        
    • 在里面新建development.json

      • 放置开发环境专用配置(如果有相同字段冲突,就会覆盖默认的)
      {
          "dbConfig":{
              "host": "development"
          },
          "dev": true
      }
      
      • 如何开启?
        • 使用NODE_ENV=development
          • 要么命令行启动时直接写上
          • 要么写入.env文件中
    • 在里面新建production.json

      • 放置生产环境专用配置(如果有相同字段冲突,就会覆盖默认的)
        {
            "prod": true
        }
        
      • 如何开启?
        • 使用NODE_ENV=production
          • 要么命令行启动时直接写上
          • 要么写入.env文件中
    • 在里面新建custom-environment-variables.json

      {
          "dbConfig":{
              "host": "DB_HOST"
          }
      }
      
      • 这里的DB_HOST
        • 需要结合dotenv.env使用,看后面
  • 在路由中使用

    import config from "config";
    
    • 获取父字段下,子字段对应的对象
      let dbConfig = config.get('父字段.子字段')
      
    • 如果无法保证这个对象一定存在,可能会报错,所以需要先检测
      if(config.has('父字段.子字段')){
          let dbConfig = config.get('父字段.子字段')
      }
      

总结方案

  • 不重要的配置

    • 一律放到default.json
  • 开发时专用的配置

    • 放到development.json
  • 生产时用到的配置

    • 放到production.json
  • 敏感配置,比如密码

    • 一律放到.env文件
    • 借助custom-environment-variables.json文件,加载到config中统一使用