UNPKG

cocos2d-html5-packager

Version:

cocos2d-html5 项目js列表混淆、合并、压缩

166 lines (159 loc) 5.3 kB
#!/usr/bin/env node "use strict"; var pkg = require('../package.json'); var config = require("../config.json"); var commander = require("commander"); var fs = require("fs"); var path = require("path"); initSetting(); commander .version(pkg.version); commander .command('set <name> [content]') .description('路径前缀配置:set prefix engine(默认值) ') .action(function(name,content){ if(typeof name === "undefined"){ console.error("配置名称不能为空"); }else if(name && typeof content !== "undefined"){ updateConfig(name,content); } }); commander .command('pro') .description('生产环境') .action(function(options){ setting.env = "pro"; startGulp() }); commander .command('dvp') .description('开发环境') .action(function(options){ setting.env = "dvp"; startGulp() }); commander.parse(process.argv); function initSetting() { global.setting = {}; var pjConfig = path.resolve("./build.json"); if(fs.existsSync(pjConfig)){ var customCon = require(pjConfig); if(typeof customCon.prefix !== "undefined"){ setting.prefix = customCon.prefix; } if(typeof customCon.dist !== "undefined"){ setting.dist = customCon.dist; } if(typeof customCon.outputName !== "undefined"){ setting.outputName = customCon.outputName; } }else { setting.prefix = config.prefix; } setting.projectPath = path.join(".",setting.prefix); setting.frameWorksPath = path.join(setting.projectPath,"frameworks/cocos2d-html5/"); setting.frameWorksPathModuleJson = path.join(setting.frameWorksPath,"moduleConfig.json"); setting.frameWorksPathBoot = path.join(setting.frameWorksPath,"CCBoot.js"); setting.res = path.join(setting.projectPath,"res"); setting.mainPath = path.join(setting.projectPath,"main.js"); setting.projectJson = path.join(setting.projectPath,"project.json"); setting.dist = setting.dist||"dist"; setting.outputName = setting.outputName||"game.pkg.js"; setting.indexHtmlPath = path.join(setting.projectPath,"index.html") } if(typeof process.argv[2] === "undefined"){ setting.env = "pro"; startGulp() } //更新配置文件 function updateConfig(name,val){ var settingPath = path.resolve(_dirname,"../config.json"); if(typeof name === "undefined"){ return; } config[name] = val; fs.writeFileSync(settingPath,JSON.stringify(config,null,1)); } //获取js压缩列表 function getJsList() { var finalModuleJsList = {}; var finalProjectJsList = {}; //读取项目project.json if(fs.existsSync(setting.projectJson)){ var projectJson = JSON.parse(fs.readFileSync(setting.projectJson)); }else{ console.error("\n找不到project.json"); process.exit(0) } //读取框架模块配置 if(fs.existsSync(setting.frameWorksPathModuleJson)){ var moduleJson = JSON.parse(fs.readFileSync(setting.frameWorksPathModuleJson)); }else{ console.error("\n找不到框架模块配置文件moduleConfig.json"); process.exit(0) } var projectModulesList = projectJson["modules"]; var moduleModulesList = moduleJson["module"]; //根据模块名递归解析模块配置文件,并保存在obj中 function parseModule(name,obj) { var subModuleList = moduleModulesList[name]; if(typeof subModuleList === "undefined"){ return ; } subModuleList.forEach(function (t) { if(/.*\.js$/.test(t)){ obj[t] = 1; }else{ parseModule(t,obj) } }) } //查找项目列表依赖,解析模块依赖并保存 projectModulesList.forEach(function (t) { parseModule(t,finalModuleJsList); }); projectJson.jsList.forEach(function (t) { finalProjectJsList[t] = 1; }); if(setting.pjConfig&&setting.pjConfig.apppendList&&Array.isArray(setting.pjConfig.apppendList)){ setting.pjConfig.apppendList.forEach(function (t) { finalProjectJsList[t] = 1; }); } return { finalProjectJsList:Object.keys(finalProjectJsList) .map(function (item) { return path.resolve(combineJsPath(setting.prefix,path.relative("/",item))); }), finalModuleJsList:[ setting.frameWorksPathBoot, ...Object.keys(finalModuleJsList) .map(function (item) { return path.resolve(setting.frameWorksPath,item); })] } } function combineJsPath(path1,path2){ var obj = {}; path1 = path.normalize(path1).split(path.sep); path2 = path.normalize(path2).split(path.sep); path1.forEach(function(item){ obj[item]=1; }) path2.forEach(function(item){ obj[item]=1; }); return Object.keys(obj).join(path.sep); } //运行task function startGulp(){ var gulp = require("../lib/logEventsGulp"); setting.jsList = getJsList(); setting.dist= setting.dist||"dist"; if(setting.env === "dvp"){ require("../task/dvp.js"); }else{ require("../task/build.js"); } gulp.start("default"); }