code: function combineCMD(file) {
  	combined_list[file] = true;
  	file_tree.push(util.repeat('|   ', tree_deep)+'|...'+file);
  	tree_deep++;
  
  	var file_content = [];
  	file_content.push('\r\n/* ===== '+file+' ===== */');
  
  	var lines = fs.readFileSync(prj_path+file, charset).replace(reg_comment, '')
  		.replace(/^\s+/, '').replace(/\r/g, '').replace(reg_define, function (mark) {
  			return mark.replace(/define[\t ]*\(/, ';('+mok_global+'["'+
  				util.getModuleAbbr(file.slice(0, -3))+'"]=');
  		}).split('\n'),
  		i = 0, len = lines.length, line, req_ms;
  	for (; i < len; i++) {
  		line = lines[i];
  		if (line.indexOf('require')<0) { //90%以上无require吧
  			file_content.push(line);
  		} else {
  			req_ms = util.parseRequire(line, file);
  			file_content.push(req_ms[0]);
  			req_ms = req_ms[1]; //复用req_ms
  			while (req_ms.length) {
  				line = req_ms.shift()+'.js'; //复用line
  				if (combined_list[line]) {
  					file_tree.push(util.repeat('|   ', tree_deep)+'|.  '+line);
  				} else {
  					fs.existsSync(prj_path+line) &&
  					fs.statSync(prj_path+line).isFile() ?
  						combineCMD(line) :
  						err_log.push('MOKJS-401: '+file+' 依赖的模块 '+
  							line.slice(0, -3)+' 不存在！\nline '+(i+1)+': '+lines[i]);
  				}
  			}
  			
  		}
  	}
  	contents += file_content.join('\r\n');
  
  	tree_deep--;
  }
docs: 合并文件：采用CMD规范