makefile.js
4.41 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/**
* 动态生成各游戏皮肤下对应的manifest文件。分别将带上修改时间戳的第三方库、业务逻辑js、
* sdk基本样式、指定皮肤样式、皮肤资源文件的路径添加到manifes文件中
* 并将修改时间更新到html文档的资源引用中
* 配置文件:config.js
* 生成文件:skin/xxxx/sdk.manifest
* 运行方法:node makefile.js
**/
var fs = require('fs'),
PATH = require('path'),
config = require('./config.js');
var target = config.target;
var concat_with_mtime = config.concat_with_mtime;
var base_js = config.base_js;
var base_img = config.images;
var htmls = config.htmls;
//读取三个html文件的内容,以便后面更新引用信息
var html_content = [];
for (i = 0, l = htmls.length; i < l; i++) {
html_content.push(fs.readFileSync(htmls[i], 'utf-8'));
}
function formatTime(mtime) {
var date = '';
date += mtime.getFullYear();
var month = mtime.getMonth() + 1;
month < 10 ? date += '0' + month : date += month;
var day = mtime.getDate();
day < 10 ? date += '0' + day : date += day;
var hour = mtime.getHours();
hour < 10 ? date += '0' + hour : date += hour;
var minute = mtime.getMinutes();
minute < 10 ? date += '0' + minute : date += minute;
return date;
}
var content = [];
var path, mtime, jsPath, reg;
content.push('CACHE MANIFEST');
content.push('');
var now = new Date();
content.push('#version=' + formatTime(now));
for(var i=0, l= htmls.length; i<l; i++){
path = htmls[i];
if(PATH.existsSync(path)){
// mtime = formatTime(fs.statSync(path).mtime);
content.push('/static/sdk/' + path);// + '?' + mtime);
}
}
for (i = 0, l = base_js.length; i < l; i++) {
path = base_js[i];
if (PATH.existsSync(path)) {
mtime = formatTime(fs.statSync(path).mtime);
content.push('/static/sdk/' + path + '?' + mtime);
//更新login.html, center.html, pay.html的引用信息的版本号
for (var j = 0, k = html_content.length; j < k; j++) {
reg = new RegExp(path.replace('/', '\\/') + '\\?\\d+')
html_content[j] = html_content[j].replace(reg, path + '?' + mtime);
}
} else {
console.error('指定文件不存在:' + base_js[i]);
}
}
for (i = 0, l = concat_with_mtime.length; i < l; i++) {
path = concat_with_mtime[i];
if (PATH.existsSync(path)) {
mtime = formatTime(fs.statSync(path).mtime);
content.push('/static/sdk/' + path + '?' + mtime);
//更新login.html, center.html, pay.html的引用信息的版本号
for (j = 0, k = html_content.length; j < k; j++) {
reg = new RegExp(path.replace('/', '\\/') + '\\?\\d+')
html_content[j] = html_content[j].replace(reg, path + '?' + mtime);
}
} else {
console.error('指定文件不存在:' + path);
}
}
// 添加sdk基本图片资源
/*
var base_img_files = fs.readdirSync(base_img);
for(i=0,l=base_img_files.length; i<l; i++){
if(base_img_files[i].indexOf('.') == 0) continue;
path = base_img + '/' + base_img_files[i];
content.push('/static/sdk/' + path);
}
*/
//获取皮肤的最大mtime
/*
var skin_mtime = 0;
for(i=0, l= target.length; i<l; i++){
path = 'skin/' + target[i] + '/skin.css';
mtime = parseInt(formatTime(fs.statSync(path).mtime));
if(mtime > skin_mtime) skin_mtime = mtime;
}
*/
//在基础文件上添加对应皮肤的样式和所需要的图片
var skin_content;
for (i = 0, l = target.length; i < l; i++) {
path = 'skin/' + target[i];
skin_content = content.concat();
/*
skin_content.push('/static/sdk/' + path + '/skin.css' + '?' + skin_mtime);
*/
//更新login.html, center.html, pay.html的引用信息的版本号
for (j = 0, k = html_content.length; j < k; j++) {
reg = new RegExp('data-v="\\d+"');
html_content[j] = html_content[j].replace(reg, 'data-v="' + skin_mtime + '"');
}
//push the img fiels if exists
/*
var images = fs.readdirSync(path + '/img');
for (var j = 0, k = images.length; j < k; j++) {
if(images[j].indexOf('.') == 0) continue;
var img_path = path + '/img/' + images[j];
// mtime = formatTime(fs.statSync(img_path).mtime);
skin_content.push('/static/sdk/' + path + '/img/' + images[j]) //+ '?' + mtime);
}
*/
skin_content.push('NETWORK:');
skin_content.push('*');
skin_content = skin_content.join('\n');
fs.writeFileSync(path + '/sdk.manifest', skin_content);
}
content.push('NETWORK:');
content.push('*');
//生成基础的没有皮肤的缓存文件
fs.writeFileSync('skin/sdk.manifest', content.join('\n'));
//将对html文件引用信息的修改写回文件中
for(i=0, l=htmls.length; i<l; i++){
fs.writeFileSync(htmls[i], html_content[i]);
}