1 | import fs = require("fs");
|
2 | import path = require("path");
|
3 | import crc32 = require("crc32");
|
4 | import { FileUtil } from "./tool/FileUtil";
|
5 | class FileCrc32 {
|
6 | constructor(baseUrl:string){
|
7 | var self = this;
|
8 | var xmUrl = self.getXMUrl(baseUrl);
|
9 | var relUrl = path.join(xmUrl,'bin-release');
|
10 | FileUtil.rmdirSync(path.join(relUrl,'resource'));
|
11 | var defaultUrl = path.join(xmUrl,'resource','default.res.json');
|
12 | var defData = JSON.parse(fs.readFileSync(defaultUrl,'utf-8'));
|
13 | var resources = defData.resources;
|
14 | var res:any;
|
15 | for(var i = 0, len = resources.length; i < len; i++)
|
16 | {
|
17 | res = resources[i];
|
18 | var resHash = '';
|
19 | var itemUrl = path.join(xmUrl,'resource',res.url);
|
20 | if(res.type == 'sheet')
|
21 | {
|
22 | var filename = FileUtil.filename(itemUrl);
|
23 | var sheetJson = JSON.parse(fs.readFileSync(itemUrl,'utf-8'));
|
24 | var pngNameArr = sheetJson.file.split('.');
|
25 | var hash = self.hashItem(path.join(path.dirname(itemUrl),sheetJson.file));
|
26 | sheetJson.file = pngNameArr[0] + '_' + hash + '.' + pngNameArr[1];
|
27 | resHash = self.hashItem(itemUrl,new Buffer(JSON.stringify(sheetJson)));
|
28 | }
|
29 | else
|
30 | {
|
31 | resHash = self.hashItem(itemUrl);
|
32 | }
|
33 | var resUrlArr = res.url.split('.');
|
34 | var ext = resUrlArr.pop();
|
35 | res.url = resUrlArr.join('.') + '_' + resHash + '.' + ext;
|
36 | }
|
37 | fs.writeFileSync(defaultUrl.replace(xmUrl,relUrl), new Buffer(JSON.stringify(defData, null, '\t')))
|
38 | }
|
39 |
|
40 | private hashItem(itemUrl:string,contents?:Buffer):string
|
41 | {
|
42 | var self = this;
|
43 | if(!contents) {
|
44 | contents = fs.readFileSync(itemUrl);
|
45 | }
|
46 | var xmUrl = self.getXMUrl(itemUrl);
|
47 | var relUrl = path.join(xmUrl,'bin-release');
|
48 | var hash = crc32(contents);
|
49 | var filename = FileUtil.filename(itemUrl);
|
50 | var toUrl = filename.replace(xmUrl,relUrl) + '_' + hash + path.extname(itemUrl);
|
51 | FileUtil.mkdirSync(path.dirname(toUrl));
|
52 | fs.writeFileSync(toUrl,contents);
|
53 | return hash;
|
54 | }
|
55 |
|
56 | private getXMUrl(url:string):string
|
57 | {
|
58 | return '';
|
59 | }
|
60 | }
|
61 |
|
62 | export function run(baseUrl:string):void{
|
63 | new FileCrc32(baseUrl);
|
64 | } |
\ | No newline at end of file |