parse.js
1.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/**
* @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;