parse.js 1.54 KB
/**
 * @author PanZhao 
 * @date 2016年3月17日 下午12:44:06 
 */
var fs = require('fs')
	,cheerio = require('cheerio')
	,minifier = require('./minifier')
	,crypto = require("crypto");
	
var parse = {
	html: function(filePath, root){
		var data = fs.readFileSync(filePath, 'utf-8')
			,$ = cheerio.load(data)
			,scriptString = '';
		
		var script = $('script')
			,linkArray = [];
		
		for(var i = 0, s; s = script[i++];){
			//模板
			if($(s).attr('type') == 'text/html')
				continue;
			//不参与的
			if($(s).data('exclude') == 1)
				continue;
			
			//外部引用JS
			if($(s).attr('src') != null ){
				var src = $(s).attr('src');
				//独立自主第三方
				if($(s).data('autocephaly') == 1){
					var mini = minifier.mini(root + src)
						,code = md5(mini);
					
					var newPath = src.substr(0, src.lastIndexOf('/')) + '/' +code + '.js';
					//重命名文件
					fs.renameSync(root + src, root + newPath);
					write(root + newPath, mini);
					
					$(s).attr('src', newPath);
					continue;
				}else
					linkArray.push(src);
			}
			//内部JS
			else{
				scriptString = $(s).html();
			}
			
			$(s).remove();
		}
		return {jsArray: linkArray, $: $, scriptString: scriptString};
	}
}


function md5(text){
	return crypto.createHash("md5").update(text).digest("hex");
}

function write(file, text){
	fs.writeFile(file, text, function (err) {
	  if (err){
		  console.log(err.toString().red);
		  process.exit();
	  }
	  console.log(file.green); 
	});
}

module.exports = parse;