forked from canjs/canjs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild-sizes.js
123 lines (106 loc) · 2.77 KB
/
build-sizes.js
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
var stealTools = require("steal-tools");
var globalJS = require("steal-tools/lib/build/helpers/global").js;
var gzipSize = require("gzip-size");
var ignoreModuleNamesStartingWith = [
"jquery",
"kefir",
'ms-signalr-client',
'prop-types',
'fbjs',
'create-react-class'
];
var ignoreModuleNames = [
'react'
];
var baseNormalize = globalJS.normalize();
var ignoreModules = [function(name){
var foundMatch = ignoreModuleNamesStartingWith.some(function(matchName){
return name.indexOf(matchName) === 0;
})
if(foundMatch) {
return true;
}
foundMatch = ignoreModuleNames.some(function(matchName){
return name.indexOf(matchName+"@") === 0;
});
if(foundMatch) {
return true;
}
return false;
}];
var exportsMap = {
"jquery": "jQuery",
"can-util/namespace": "can",
"kefir": "Kefir",
"validate.js": "validate",
"react": "React"
};
stealTools.export({
steal: {
config: __dirname + "/package.json!npm",
main: "can/core"
},
options: {
useNormalizedDependencies: false,
verbose: true
},
outputs: {
"core": {
modules: ["can/core"],
format: "global",
dest: globalJS.dest(__dirname+"/dist/global/can-core.js"),
useNormalizedDependencies: true,
normalize: function(depName, depLoad, curName, curLoad, loader){
return baseNormalize.call(this, depName, depLoad, curName, curLoad, loader, true);
},
ignore: ignoreModules,
exports: exportsMap,
removeDevelopmentCode: true,
minify: true
}
}
}).then(function(result){
function sizeSort(m1, m2){
if(m1.size > m2.size) {
return 1;
} else {
return -1;
}
}
var results = [];
for(var moduleName in result.graph) {
if(result.graph[moduleName].activeSource) {
var code = result.graph[moduleName].activeSource.code;
results.push({moduleName: moduleName, code: code, size: gzipSize.sync(code) });
}
}
var sum = 0;
results.sort(sizeSort).forEach(function(m){
sum += m.size;
//console.log(m.size, m.moduleName);
});
var packages = {};
results.forEach(function(mod){
var packageName = mod.moduleName.split("@")[0];
if(!packages[packageName]) {
packages[packageName] = {modules: [], size: 0, name: packageName}
}
packages[packageName].modules.push(mod);
packages[packageName].size += mod.size;
});
Object.keys(packages).map(function(name){ return packages[name]; })
.sort(sizeSort).forEach(function(m){
console.log(m.size, m.name);
if(m.modules.length > 1) {
m.modules.sort(sizeSort).forEach(function(m){
console.log("\t", m.size, m.moduleName)
})
}
});
console.log("total "+sum, "count "+results.length, "ave "+(sum/ results.length));
//console.log(result.loader._traceData.parentMap);
}).catch(function(e){
setTimeout(function(){
throw e;
},1);
});