Skip to content

Latest commit

 

History

History
100 lines (73 loc) · 4.38 KB

readme.md

File metadata and controls

100 lines (73 loc) · 4.38 KB

@miaooo/pika

version downloads license dependencies coveralls

易于使用的javascript配置文件构造器

Usage

import Pika from '@miaooo/pika'

const env = new Pika(process.env.NODE_ENV, {
  prod: value => value === 'prod' || value === 'production',
  test: value => value === 'test',
  dev: value => value === 'dev' || value === 'development',
  local: value => value === 'local',
})

const databaseHost = env.switch({
  priority: process.env.DB_HOST,
  prod: 'prod.mysql.com',
  test: 'test.mysql.com',
  dev: 'dev.mysql.com',
  local: 'localhost.com',
  default: 'prod.mysql.com',
})

以上代码的含义是:

  • process.env.DB_HOST是非undefined时,无论process.env.NODE_ENV为何值,databaseHost都将设置为process.env.DB_HOST
  • process.env.NODE_ENV === 'prod' || process.env.NODE_ENV === 'production时,databaseHost将被设定为'prod.mysql.com'。同理,当testdevlocal等判定条件匹配的时候,都会将databaseHost设定为对应的数据。
  • process.env.NODE_ENV不匹配prodtestdevlocal的任何一个判定条件时,将会使用default指定的默认值。

通过以上的代码解读,大家应该很容易明白Pika库的用途:减少重复的书写if,提高配置文件的可读性。

另外,Pika还提供一些变量供开发过程中使用:

if (env.is.prod) console.log('在生产环境中')
if (env.is.test) console.log('在测试环境中')
if (env.is.dev) console.log('在开发环境中')
if (env.is.local) console.log('在本地开发中')

if (env.not.prod) console.log('不在生产环境中')
if (env.not.test) console.log('不在测试环境中')
if (env.not.dev) console.log('不在开发环境中')
if (env.not.local) console.log('不在本地开发中')

Pika可以将process.env.NODE_ENV的判定逻辑封装起来,提供统一的API接口给业务层面调用,使代码易于阅读并且避免多人开发中写出不健壮的if

另外prodtestdevlocal这些名称可以任意更换,也可以提供任意多个key。只要在new Pika时声明的判断条件均可以使用,Pika没有任何限制:

const env = new Pika(process.env.NODE_ENV, {
  customA: value => value === 'A',
  customB: value => value === 'B',
})

const x = env.switch({
  customA: 'abc',
  default: 'def',
})

if (env.is.customA) console.log('abc')
if (env.is.not.customB) console.log('not def')

env.switch的第一个参数时一个枚举对象,priority是内置的key,具备最高优先级,只要priority设置的数据不为undefined,那么priority优先生效。否则,会进行各种条件的判定,最终决定使用哪个值。 如果未匹配到任何一个条件,则default字段指定的值生效。

注意事项

  1. Pika完全由Typescript开发,具备完善和代码提示,并且.switch的所有枚举值的类型必须一致。
  2. .switch的枚举key可以填写任意多个,除了default这个字段必须填写,这是为了在防止new Pika初始化时设定的条件不能够覆盖所有状况,导致代码运行时出现意外。
  3. new Pick初始化时,设定的所有判定规则必须互斥,否则.swtich无法保证在多个条件同时匹配时,返回哪个值。

Sponsor

Support code development on patron.

patron

Contributing & Development

If there is any doubt, it is very welcome to discuss the issue together. Please read Contributor Covenant Code of Conduct and CONTRIBUTING.