自定义环境(Environment)

用于抽象环境相关的内容,比如识别生产环境还是开发环境、以及其他扩展的环境相关变量(比如机房信息)。

如何获取

用户可以通过 require('dorapan').environment 获得该对象。

如何定义

  1. 可以在全局配置中设置,参考全局配置一章。
  2. 可以在 procfile.js 中设置,如:
  1. module.exports = function(pandora) {
  2. // 不传参数则获取
  3. pandora.environment(UrEnvironmentClass);
  4. }

主要接口

最基本的 Environment 对象是约束于 Interface Environment自定义环境(Environment) - 图1

简单的来说包含以下方法:

get(name: string): any

通过一个 name 获得特定的上下文变量

保留意义的变量名:

  1. env -> 当前环境的标识字符串,如 production 、development
  2. appName -> 当前应用名
  3. appDir -> 当前应用路径
  4. pandoraLogsDir -> Pandora 日志路径,默认为 ~/logs

match(name: string): boolean

通过一个 name (当前环境的标识字符串) 来匹配当前环境,返回布尔型。

建议使用的基础实现 - 抽象类 BaseEnvironment

这里我们建议直接继承我们的基础实现 BaseEnvironment,通过import {BaseEnvironment} from 'pandora'获得。

详细参见类型信息: BaseEnvironment自定义环境(Environment) - 图2

该类扩展出 constructor()set() 等默认行为与方法。

下面是一个例子

  1. import {BaseEnvironment} from 'pandora';
  2. export class ForceTestEnvironment extends BaseEnvironment {
  3. constructor(variables?: any) {
  4. variables = variables || {};
  5. if(!variables.env) {
  6. variables.env = 'test';
  7. }
  8. super(variables);
  9. }
  10. match(name: string): boolean {
  11. return this.get('env') === name;
  12. }
  13. }

默认行为 - DefaultEnvironment

如果用户不注入自定义的 Environment 类,我们将使用默认的 DefaultEnvironment自定义环境(Environment) - 图3

该类主要是基于 process.env.NODE_ENV 判读当前环境,主要实现如下:

  1. switch (process.env.NODE_ENV) {
  2. case 'production':
  3. variables.env = 'production';
  4. break;
  5. case 'prepub':
  6. variables.env = 'prepub';
  7. break;
  8. case 'test':
  9. case 'unittest':
  10. variables.env = 'test';
  11. break;
  12. default:
  13. variables.env = 'development';
  14. break;
  15. }