UNPKG

buildjs-beta

Version:

buildjs =======

266 lines (218 loc) 8.44 kB
/* * buildjs cli */ var FS = require('fs'); var PATH = require('path'); var EXEC = require('child_process').exec; var mkdir = require('util-mkdir'); var buildjs = {}; // ================================================================================================= // 相关帮助 // // /** * @description print help information */ buildjs.help = function() { var output = "Usage: buildjs [options] [arguments] \n\nOptions:\n"; output += buildjs.help.cmds.join('\n'); console.log(output); } // commands buildjs.help.cmds = [ 'init [src] 初始化,[src]可指定项目源文件夹,不指定则以当前所在文件夹下的front为源文件夹', 'wstart [src] [conf] 启动实时文件监听,[src]可指定项目源文件夹,[conf]可指定配置文件路径', 'wstop [src] 停止实时文件监听, [src]可指定项目源文件夹', 'xgettext [lang] [conf] 提取待翻译词条, [lang]可指定语言,如:en,用\',\'隔开,默认值为en;[conf]指定配置文件路径', 'gettext [lang] [conf] 翻译标记的词条, [lang]可指定语言,如:en,用\',\'隔开,默认值为en;[conf]指定配置文件路径', 'release init [lang] 初始化编译配置文件功能,若[lang]未指定,则默认初始化为src_min目标文件夹', 'release [lang] 编译功能,[lang]为指定编译生成的目标文件夹(从src编译到[lang]),未指定则默认为src_min', '-v buildjs版本', ]; // ================================================================================================= // 初始化 // // /** * @param {string} src 指定初始化的项目源文件夹,若为空,则以当前执行脚本的文件夹所在路径为src * @return {null} null */ buildjs.init = function(src) { // 监听的项目源文件夹 src ? null : src = process.cwd(); var frontSrc = PATH.join(src, '__src/'); // 默认seajs配置文件路径 var seajsConf = PATH.join(src, 'conf'); // 创建放置配置文件及监听pid的文件夹 var buildDir = PATH.join(src, '__buildjs'); mkdir(buildDir); // 生成实时监听及htpl2js的配置文件 var monitorConfig = { "SRC": frontSrc, "CONFSRC": PATH.join(seajsConf, '__conf.js'), "CONFDEST": PATH.join(seajsConf, 'conf.js'), "JSALIAS": PATH.join(seajsConf, '__jsalias.json'), "CSSALIAS": PATH.join(seajsConf, '__cssalias.json'), "SYNCHROEXCLUDESRC": frontSrc, "SYNCHROEXCLUDEDEST": PATH.join(src, 'src'), "SYNCHROONLYSRC": PATH.join(frontSrc, 'page'), "SYNCHROONLYDEST": PATH.join(PATH.dirname(src), 'views/src'), "VERSION": "" } var monitorConfigPath = PATH.join(buildDir, 'CONFIG.json'); FS.writeFileSync(monitorConfigPath, JSON.stringify(monitorConfig), 'utf8'); // i18n配置文件 var i18nDir = PATH.join(buildDir, 'i18n'); var xgettextConfig = { "SRC": frontSrc, "DESTDIR": i18nDir, "DESTFILE": PATH.join(i18nDir, 'i18n.{lang}.po'), "EXIST": PATH.join(i18nDir, 'i18n.{lang}.po'), "TYPE": "po", "MERGE": true } FS.writeFileSync(PATH.join(buildDir, 'XGETTEXT_CONFIG.json'), JSON.stringify(xgettextConfig), 'utf8'); var gettextConfig = { "I18N": PATH.join(i18nDir, 'i18n.{lang}.po'), "FRONTSRC": PATH.join(src, 'src'), "FRONTDEST": PATH.join(src, '{lang}'), "VIEWSRC": PATH.join(PATH.dirname(monitorConfig.SYNCHROONLYDEST), 'src'), "VIEWDEST": PATH.join(PATH.dirname(monitorConfig.SYNCHROONLYDEST), '{lang}'), "REPSTR": "" } FS.writeFileSync(PATH.join(buildDir, 'GETTEXT_CONFIG.json'), JSON.stringify(gettextConfig), 'utf8'); // 执行初始化脚本 require('./buildjs-task/task-monitor/monitor-init.js')(monitorConfigPath, function(){ // 执行监听 buildjs.startMonitor(); }); } // ================================================================================================= // 监听机制 // // /** * @param {string} src 指定需要监听的文件夹,默认是init中src下的__src文件夹 * @param {string} conf 指定相关配置文件,默认为init中src下新建的__buildjs文件夹下的CONFIG.json文件 * @return {null} null */ buildjs.startMonitor = function(src, conf){ src ? null : src = PATH.join(process.cwd(), '__src/'); conf ? null : conf = PATH.join(process.cwd(), '__buildjs', 'CONFIG.json'); var mstart = require('./buildjs-task/task-monitor/monitor-start.js'); var execRoot = PATH.join(__dirname, 'buildjs-task', 'task-monitor'); // 先停止监听 buildjs.stopMonitor(src); // alias-conf mstart(PATH.join(PATH.dirname(src), 'conf'), PATH.join(execRoot, 'run-mconf.js'), conf, PATH.join(process.cwd(), '__buildjs', 'mconf.log')); // rsync mstart(src, PATH.join(execRoot, 'run-mrsync.js'), conf, PATH.join(process.cwd(), '__buildjs', 'mrsync.log')); } /** * @param {string} src 默认为当前执行脚本的文件夹下的__buildjs文件夹 * @return {null} null */ buildjs.stopMonitor = function(src){ src ? null : src = PATH.join(process.cwd(), '__buildjs'); require('./buildjs-task/task-monitor/monitor-stop.js')(src); } // ================================================================================================= // 国际化 // // buildjs.xgettext = function(lang, conf){ lang ? null : lang = 'en'; conf ? null : conf = PATH.join(process.cwd(), '__buildjs', 'XGETTEXT_CONFIG.json'); require('./buildjs-task/task-i18n/i18n-xgettext.js')(lang, conf); } buildjs.gettext = function(lang, conf){ lang ? null : lang = 'en'; conf ? null : conf = PATH.join(process.cwd(), '__buildjs', 'GETTEXT_CONFIG.json'); require('./buildjs-task/task-i18n/i18n-gettext.js')(lang, conf); } // ================================================================================================= // 编译 // // buildjs.release = function(arg1, arg2){ var src = process.cwd(); if(arg1 === 'init'){ arg2 ? null : arg2 = 'src_min'; var tmpPath = PATH.join(src, 'src_tmp'); var destPath = PATH.join(src, arg2); var config = { "CSSMINSRC": PATH.join(src, 'src'), "CSSMINDEST": tmpPath, "CSSMINBASE": '/front/' + arg2, "TRANSPORTSRC": tmpPath, "TRANSPORTDEST":destPath, "UGLIFYSRC": [PATH.join(destPath, 'page'), PATH.join(destPath, 'widget')], "UGLIFYBASE": destPath, "ALIAS": PATH.join(src, 'conf', '__jsalias.json'), "IGNORE": PATH.join(src, 'conf', '__ignore.json'), "GRUNTJS": PATH.join(__dirname, 'node_modules', 'gruntjs') }; FS.writeFileSync(PATH.join(src, '__buildjs', 'RELEASE_CONFIG_' + arg2 + '.json'), JSON.stringify(config), 'utf8'); }else{ arg1 ? null : arg1 = 'src_min'; var conf = PATH.join(src, '__buildjs', 'RELEASE_CONFIG_' + arg1 + '.json'); // 不存在配置文件则新建 if(!FS.existsSync(conf)){ buildjs.release('init', arg1); } // 先国际化,再构建 arg1 !== 'src_min' ? require('./buildjs-task/task-i18n/i18n-gettext.js')(arg1, PATH.join(src, '__buildjs', 'GETTEXT_CONFIG.json')) : null; require('./buildjs-task/task-release/build-release.js')(conf); } } // ================================================================================================= // 版本号 // // buildjs.version = function(){ var json = require('./package.json'); console.log('Version: ' + json.version); } // ================================================================================================= // 运行时 // // /** * @param {array} argv 传入的参数 */ buildjs.run = function(argv) { if (argv.length < 3) { console.log('try buildjs -h to get help for buildjs.'); return; } switch (argv[2]) { case 'init': buildjs.init(argv[3]); break; case 'wstart': buildjs.startMonitor(argv[3], argv[4]); break; case 'wstop': buildjs.stopMonitor(argv[3]); break; case 'xgettext': buildjs.xgettext(argv[3], argv[4]); break; case 'gettext': buildjs.gettext(argv[3], argv[4]); break; case 'release': buildjs.release(argv[3], argv[4]) break; case '-v': buildjs.version(); break; case '-h': buildjs.help(); break; default: console.log('try buildjs -h to get help for buildjs.'); break; } } module.exports = buildjs;