自定义环境(Environment)
用于抽象环境相关的内容,比如识别生产环境还是开发环境、以及其他扩展的环境相关变量(比如机房信息)。
如何获取
用户可以通过 require('dorapan').environment
获得该对象。
如何定义
- 可以在全局配置中设置,参考全局配置一章。
- 可以在 procfile.js 中设置,如:
module.exports = function(pandora) {
// 不传参数则获取
pandora.environment(UrEnvironmentClass);
}
主要接口
最基本的 Environment 对象是约束于 Interface Environment 。
简单的来说包含以下方法:
get(name: string): any
通过一个 name 获得特定的上下文变量
保留意义的变量名:
- env -> 当前环境的标识字符串,如 production 、development
- appName -> 当前应用名
- appDir -> 当前应用路径
- pandoraLogsDir -> Pandora 日志路径,默认为
~/logs
match(name: string): boolean
通过一个 name (当前环境的标识字符串) 来匹配当前环境,返回布尔型。
建议使用的基础实现 - 抽象类 BaseEnvironment
这里我们建议直接继承我们的基础实现 BaseEnvironment,通过import {BaseEnvironment} from 'pandora'
获得。
详细参见类型信息: BaseEnvironment
该类扩展出 constructor()
、set()
等默认行为与方法。
下面是一个例子
import {BaseEnvironment} from 'pandora';
export class ForceTestEnvironment extends BaseEnvironment {
constructor(variables?: any) {
variables = variables || {};
if(!variables.env) {
variables.env = 'test';
}
super(variables);
}
match(name: string): boolean {
return this.get('env') === name;
}
}
默认行为 - DefaultEnvironment
如果用户不注入自定义的 Environment 类,我们将使用默认的 DefaultEnvironment 。
该类主要是基于 process.env.NODE_ENV
判读当前环境,主要实现如下:
switch (process.env.NODE_ENV) {
case 'production':
variables.env = 'production';
break;
case 'prepub':
variables.env = 'prepub';
break;
case 'test':
case 'unittest':
variables.env = 'test';
break;
default:
variables.env = 'development';
break;
}