Skip to content

coajs/coa-env

Repository files navigation

coa-env

GitHub license npm version npm downloads PRs Welcome

COA 框架环境配置包装器,用于统一化通用的环境和配置信息

数据结构

// 以下属性均为只读属性,在实例创建时刻就已经固定,实例生成后无法修改

class CoaEnv {
  // runEnv 运行环境,一般定义为开发类环境('d0' 'd1' 'd2') 测试类环境('t0' 't1' 't2') 生产类环境('v0' 'v1' 'v2')等
  // 由环境变量 process.env.RUN_ENV 控制,如果没有定义,则默认为 'd0'
  public readonly runEnv: string

  // runEnvType 运行环境类型,单字母形式,便于判断某一类环境,根据 runEnv 自动判断,如 'd' 't' 'v'
  public readonly runEnvType: 'd' | 't' | 'v' | string

  // runEnvName 运行环境的名称,便于对外展示环境的名称,根据 runEnvType 自动判断,如 'alpha' 'beta' 'online'
  public readonly runEnvName: 'alpha' | 'beta' | 'online' | 'unknown' | string

  // cwd 当前运行Node.js进程的工作目录,由 process.cwd() 控制
  public readonly cwd: string

  // name 当前包名,由 package.json 中的 name 控制
  public readonly name: string

  // isProd 是否是生产环境,由 process.env.NODE_ENV === 'production' 控制,只要不是 'production' 均为非生产环境
  public readonly isProd: boolean

  // isOnline 是否是线上环境,由 runEnvType === 'v' 控制,只要不是 'v' 均为非线上环境
  public readonly isOnline: boolean

  // hostname 当前主机名称,由 process.env.HOSTNAME 控制,默认为 'local'
  public readonly hostname: string

  // 当前运行的版本号,解耦出来,由外部程序控制,创建实例时必传此参数
  public readonly version: string
}

以上为 TypeScript 代码

用法

安装

yarn add coa-env

示例

import { CoaEnv } from 'coa-env'

// 创建一个新的环境实例
const appEnv = new CoaEnv('1.0.0')

// 判断是否是线上环境
if (appEnv.isOnline) {
  // do something
}

// 判断是否是测试类环境
if (appEnv.runEnvType === 't') {
  // do something
}

// 获取版本
const version = appEnv.version

// 获取环境名称
const runEnvName = appEnv.runEnvName

// 获取当前工作目录
const cwd = appEnv.cwd

配置自动选择

定义不同环境的配置表,会自动根据环境类型返回对应环境的配置信息

  • 精确返回对应环境的配置
// 用户 d1 t1 v1 等精确的环境,精确返回对应环境的配置
const hostConfig1 = appEnv.getConfig({
  d1: { host: '127.0.0.1' },
  t1: { host: '192.168.0.1' },
  v1: { host: '172.16.0.1' },
})
// 当环境是d1,返回 { host: '127.0.0.1' }
// 当环境是t1,返回 { host: '192.168.0.1' }
// 当环境是v1,返回 { host: '172.16.0.1' }
// 当环境是v2,报错 CoaError: Env.ConfigNotFound 配置信息不存在
  • 返回一类环境的配置
// 用 d t v 可以代表一类环境,返回该类环境
const hostConfig2 = appEnv.getConfig({
  d: { host: '127.0.0.1' },
  t: { host: '192.168.0.1' },
  v: { host: '172.16.0.1' },
})
// 当环境是d1 d2 d3,返回 { host: '127.0.0.1' }
// 当环境是t1 t2 t3,返回 { host: '192.168.0.1' }
// 当环境是v1 v2 v3,返回 { host: '172.16.0.1' }
// 当环境是a1,报错 CoaError: Env.ConfigNotFound 配置信息不存在
  • 返回默认环境配置
// 用 $ 可以代表默认配置,当配置表不存在对应环境时,返回默认配置
const hostConfig3 = appEnv.getConfig({
  $: { host: '127.0.0.1' },
  v: { host: '172.16.0.1' },
})
// 当环境是t1 t2 t3,返回 { host: '192.168.0.1' }
// 其他环境,一律返回 { host: '127.0.0.1' }