text: /**
   * 名称：M站站点环境
   * 日志：2016-11-02
   * 描述：用于判断当前环境,以及在不同环境进行适配
   */
  
  // 引用依赖>>
  let fse = require('fs-extra');
  let path = require('path');
  
  // 环境顺序
  let envOrders = ['development', 'production'];
  
  let runAppVariableName = '@@__reactRunApplicationName__@@';
  
  /**
   * 环境适配类
   */
  function AppContext() {
    // 初始化环境
    let env = this.env = process.env.NODE_ENV || 'development';
    this.isPro = env === 'production';
    this.isDev = env === 'development';
    this.context = {
      web: fse.readJsonSync(path.resolve('web.json')),
    };
    this.envIndex = envOrders.indexOf(env);
  }
  
  /**
   * 环境适配表达式
   * @param env 环境类型 例如： development
   * @param handler 表达式函数，当在env与当前应用程序的环境一致时触发
   */
  AppContext.prototype.on = function (env, handler) {
    if (env == this.env) {
      if (typeof handler == 'function') {
        return handler();
      } else {
        return handler;
      }
    }
  };
  
  /**
   * 设置react runApplication 名称
   * @param name 使用AppRegistry的app名称
   */
  AppContext.prototype.setRunReactAppName = function (name) {
    this[runAppVariableName] = name;
  };
  
  /**
   * 获取react runApplication 名称
   */
  AppContext.prototype.getRunReactAppName = function (name) {
    return this[runAppVariableName];
  };
  
  /**
   * 当环境为生产环境时触发
   * @param handler 表达式函数 当当前环境为production时触发
   */
  AppContext.prototype.onPro = function (handler) {
    return this.on('production', handler);
  };
  
  /**
   * 当环境为开发环境时触发
   * @param handler 表达式函数 当当前环境为development时触发
   */
  AppContext.prototype.onDev = function (handler) {
    return this.on('development', handler);
  };
  
  /**
   * 环境取值，根据当前环境返回对应传入参数的值
   * @param ....args
   * 参数顺序:'development's value,'production's value
   */
  AppContext.prototype.valueOf = function (...values) {
    return values[this.envIndex];
  };
  
  /**
   * 设置环境参数
   * @param name 参数名
   * @param value 参数值
   */
  AppContext.prototype.setParam = function (name, value) {
    this.context[name] = value;
  };
  
  /**
   * 获取指定参数
   * @param name 参数名
   * @param dv 默认参数值
   */
  AppContext.prototype.getParam = function (name, dv) {
    return this.context[name] || dv;
  };
  
  /**
   * 获取服务所在机器的ip地址
   */
  AppContext.prototype.getLocalIP = function () {
    let ipv4;
    let os = require('os');
    let networks = os.networkInterfaces();
    let keys = Object.keys(networks);
    let network = networks[keys[0]];
    for (let i = 0; i < network.length; i++) {
      let networkItem = network[i];
      if (networkItem.family == 'IPv4') {
        ipv4 = networkItem.address;
        break;
      }
    }
    return ipv4;
  };
  
  // 公布实例为exports
  module.exports = new AppContext();
  