/** * Created by jackyanjiaqi on 16/7/4. */ //import xml = require("./xml/index") import CONFIG = require("./config"); import path = require("path"); //全局配置项目根目录 CONFIG.setDir(path.resolve(__dirname,"../")); import xml = require("./eui/parser/index"); import file = require("./file"); // import euiParser = require("./parser"); import * as exml_service from "./exml-service/componentScanner"; import * as themeParser from "./themeParser"; import exmlParser = require("./eui/parser/EXMLParser"); import crcFilter = require("./crcFilter"); import {ITheme} from "./themeParser"; import {release} from "os"; var parser = new exmlParser.EXMLParser(); export async function run(){ // console.log(__dirname); //解析参数 let args:string[] = process.argv.slice(2); if("clean" === args[0]){ CONFIG.isClean = true; args = args.slice(1); } if("-i" === args[0]){ CONFIG.isIncrementalCompile = true; args = args.slice(1); } //配置egret项目目录 let projectDir = path.resolve(args[0]); if(!file.exists(projectDir)){ projectDir = path.resolve(CONFIG.getDir(),args[0]); } CONFIG.setProjectDir(projectDir); args = args.slice(1); //配置游戏发布目录 let releaseDir = args[0]; if(!file.exists((releaseDir = path.join(CONFIG.getProjectDir(),releaseDir)))){ releaseDir = path.resolve(args[0]); } CONFIG.setReleaseDir(releaseDir); args = args.slice(1); //配置输出目录(可选) if("-out"==args[0]){ CONFIG.isOutDirSet = true; args = args.slice(1); if(args[0]){ let outDir = path.resolve(args[0]); CONFIG.setOutDir(outDir); args = args.slice(1); } } //是否使用同一份配置 if("--fixedConfig"==args[0]){ CONFIG.isFixedConfig = true; args = args.slice(1); } //自定义配置 if("-cfg"==args[0]){ args = args.slice(1); if(args[0]){ CONFIG.setConfigDir(args[0]); } } //配置config(或动态解析) if(!CONFIG.isClean && !CONFIG.get()){ let fixedConfigPath = path.join(CONFIG.getProjectDir(),".euiboostercfg"); if(CONFIG.isFixedConfig){ //指定了自定义配置 if(CONFIG.getConfigDir()){ CONFIG.set(CONFIG.getConfigDir()); }else{ //未指定自定义配置 if(file.exists(fixedConfigPath)){ CONFIG.set(fixedConfigPath); }else{ let config:Object = await exml_service.run(CONFIG.getProjectDir()); console.log(`config generated!`); CONFIG.set(config); config['lasttime'] = new Date().toLocaleString(); file.save(fixedConfigPath,JSON.stringify(config,null,4)); } } }else{ //指定了自定义配置 if(CONFIG.getConfigDir()){ CONFIG.set(CONFIG.getConfigDir()); }else{ if(file.exists(fixedConfigPath)){ file.remove(fixedConfigPath); } let config:Object = await exml_service.run(CONFIG.getProjectDir()); console.log(`config generated!`); //测试用 // let date:Date = new Date(); // configFilePath = path.resolve(CONFIG.getDir(),`test/config_gen_${date.toDateString()}.json`); // file.save(configFilePath,JSON.stringify(config,null,4)); // console.log(`Config file generated!Save to ${configFilePath}`); CONFIG.set(config); config['lasttime'] = new Date().toLocaleString(); file.save(fixedConfigPath,JSON.stringify(config,null,4)); } } } // let content = file.read(inputFilePath); // var returnObj = xml.parse(content); let themes:ITheme[] = themeParser.read(); if(themes && themes.length>0){ let ishandled = false; themes.forEach(theme=>{ //判断类型 支持将开发目录和发布目录设置为相同的情况(定制化需求) if(typeof theme.exmls[0] == "string"){ theme.exmls = theme.exmls.map(exmlItemPath=>{ return { path:exmlItemPath, content:file.read(path.resolve(CONFIG.getProjectDir(),exmlItemPath)) } }) } theme.exmls.forEach((exmlItem)=>{ // let exmlItem = theme.exmls[i]; // var xmlString = file.read(exmlItem.content); //增量编译 if(CONFIG.isIncrementalCompile && !crcFilter.crcSyncFilter(exmlItem)){ return; } if(CONFIG.isClean){ delete exmlItem.gjs; delete exmlItem.className; //恢复exmlItem.content if(!exmlItem.content){ exmlItem.content = file.read(path.resolve(CONFIG.getProjectDir(),exmlItem.path)); } ishandled = true; }else{ console.log("parsing:",exmlItem.path); if(!exmlItem.content){ exmlItem.content = file.read(path.resolve(CONFIG.getProjectDir(),exmlItem.path)); } exmlItem.gjs = parser.parse(exmlItem.content); //测试用 // if( // // exmlItem.path.indexOf("TPanel.exml")!==-1 || // exmlItem.path.indexOf("SendToDesktopAlertSkin.exml")!==-1 // ){ // console.log(exmlItem.gjs); // } exmlItem.className = parser.className; delete exmlItem.content; ishandled = true; } }); // for(let i=0;iconsole.log(error));