UNPKG

codekart

Version:

Web application framework for Node.js

128 lines (102 loc) 3.62 kB
var fs = require('fs'); var UglifyJS = load.lib("!uglify-js"); var file = load.tool('!file'); var json = load.tool('!json'); var util = load.tool('!util'); var config = load.config(); var define = load.config('define'); var cpath = load.config('!path'); //js库依赖关系 var cjd = define.client_js_depend; /*js缓存文件是否存在的缓存*/ var jsFileNameCache = {}; /** * 合并js模块,生成js缓存文件 * @param stuff * @param callback */ exports.ready = function(stuff,callback){ var jsFileName = cpath.static+stuff.client_name_js; //log(jsFileName); if(jsFileNameCache[jsFileName] && !config.compiled){ //log('js文件缓存'); return callback(null, true); /*检查读取缓存*/ } fs.exists(jsFileName,function(have){ if(config.compiled || !have){ //总是编译文件 merger(stuff.js,function(err,js){ if(err){ if(config.debug) log(err); return callback(err); } mergerTpl(stuff,function(err,pretpl){ //log('js文件缓存'+pretpl); if(err){ if(config.debug) log(err); return callback(err); } fs.writeFile(jsFileName,pretpl+js, function (err) { //创建缓存文件 if(err){ //文件写入错误 if(config.debug) log(err); return callback(err); } jsFileNameCache[jsFileName] = true; //缓存 callback(null,js+'');//处理完毕 }); }); }); }else{ jsFileNameCache[jsFileName] = true; //缓存 return callback(null, true);//处理完毕 } }); }; /** * 读取tpl备用文件并合并 */ function mergerTpl(stuff,callback){ var pre_tpl = {}; for(var k in stuff.tplpre){ //文件名数组 var one = stuff.tplpre[k]; for(var x in one){ var path = 'tpl/'+one[x]+'.tpl' , tpl = read.resource(path); if(tpl===null){ return callback("can't read resource : "+path) } pre_tpl[x] = compress(''+tpl); } } var tplname = define.client_tpl_var || 'Tpls' , tplstr = 'window.'+tplname+'='+json.stringify(pre_tpl)+';'; //前端js全局变量tpls callback(null,tplstr); } //压缩tpl function compress(tpl){ return tpl.replace(/\s+|\n/g, " ") //压缩空格和换行 .replace(/\s*<\s*/g, "<") //去掉< >// 括号两旁的空格 .replace(/\s*>\s*/g, ">") //去掉< >// 括号两旁的空格 .replace(/<\!--(\n|.)*?-->/g, ""); //去掉<!--- --->注释; } /** * 读取js文件并合并 */ function merger(jsary,callback){ //获取 ck 库文件依赖关系 var deps = define.client_js_depend || {} , jslist = util.sortDependence(deps,jsary) , leg = jslist.length , filecontent = ''; for(var i=0;i<leg;i++){ //文件名数组 filecontent += read.resource('js/'+jslist[i]+'.js'); } if(config.compress.js){ try{ filecontent = UglifyJS(filecontent); //压缩js }catch(e){ if(config.debug) log(e); return callback(e); //压缩错误 } } callback(null,filecontent); }