code: function CombineConfig(config, allModules, moduleId) {
      this._config = config;
      this._allModules = allModules;
      this._excludes = {
          require: true,
          module: true,
          exports: true
      };
  
      this._includes = {};
      this._patterns = [];
  
      this.prepare();
  }
docs: 一个模块的 Include 和 Exclude 是这样子工作的
  1. 解析 foo.js，可以得到一个模块定义的集合，可以把数据结构简化为这个样子
  {
  excludes: ['id1', 'id2', 'id3'],
  modules: [
  {id: 'id1', includes: Array.<string>},
  {id: 'id2', includes: Array.<string>},
  {id: 'id3', includes: Array.<string>},
  ]
  }
  2. 在 module.conf 里面我们可以给 `id` 配置一些 `规则`，通过这些规则我们遍历一次 `所有的模块Id`，就可以
  知道这个模块Id 应该是 exclude 还是 include 的状态，例如：
  {
  "id1": { "modules": ["~er", "!esui/Button"] }
  }
  此时把得到的 includes 和 excludes 来合并一下
  3. 合并的规则是这样子的
  excludes 是两个数组简单的合并起来即可
  includes 只在入口阶段生效，递归的时候是不生效的(?)
  
  @constructor
  @param {Object|*} config module.conf中的配置.
  @param {Array.<string>} allModules 所有的模块Id列表.
  @param {string} moduleId The module id.