易于使用的javascript
配置文件构造器
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'
。同理,当test
、dev
、local
等判定条件匹配的时候,都会将databaseHost
设定为对应的数据。 - 当
process.env.NODE_ENV
不匹配prod
、test
、dev
、local
的任何一个判定条件时,将会使用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
。
另外prod
、test
、dev
、local
这些名称可以任意更换,也可以提供任意多个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
字段指定的值生效。
Pika
完全由Typescript
开发,具备完善和代码提示,并且.switch
的所有枚举值的类型必须一致。.switch
的枚举key
可以填写任意多个,除了default
这个字段必须填写,这是为了在防止new Pika
初始化时设定的条件不能够覆盖所有状况,导致代码运行时出现意外。new Pick
初始化时,设定的所有判定规则必须互斥,否则.swtich
无法保证在多个条件同时匹配时,返回哪个值。
Support code development on patron.
If there is any doubt, it is very welcome to discuss the issue together. Please read Contributor Covenant Code of Conduct and CONTRIBUTING.