amis/scripts/sdk-size.js

72 lines
1.8 KiB
JavaScript
Raw Normal View History

/**
* 用于简单计算 sdk 各个模块的大小
*/
const readline = require('readline');
const fs = require('fs');
const readInterface = readline.createInterface({
input: fs.createReadStream(process.argv[2]),
console: false
});
let currentModule = '';
let moduleSizeMap = {};
readInterface
.on('line', line => {
if (line.startsWith(`;/*`)) {
currentModule = line.trim();
}
if (currentModule in moduleSizeMap) {
moduleSizeMap[currentModule] += line.length;
} else {
moduleSizeMap[currentModule] = line.length;
}
})
.on('close', () => {
const moduleSize2Map = {};
let sizeArray = [];
for (let module in moduleSizeMap) {
sizeArray.push([module, moduleSizeMap[module]]);
const parts = module.substring(4, module.length - 2).split('/');
while (parts.length > 1 && parts[parts.length - 2] !== 'node_modules') {
if (
parts[parts.length - 3] === 'node_modules' &&
parts[parts.length - 2][0] === '@'
) {
break;
}
parts.pop();
}
if (parts[0] === 'node_modules') {
parts.shift();
}
const moduleName = parts.join('/');
moduleSize2Map[moduleName] = moduleSize2Map[moduleName] || 0;
moduleSize2Map[moduleName] += moduleSizeMap[module];
}
sizeArray.sort(function (a, b) {
return a[1] - b[1];
});
for (size of sizeArray) {
console.log(size[0], size[1]);
}
console.log('\n\n\npackages\n\n');
const sizeArray2 = [];
for (let module in moduleSize2Map) {
sizeArray2.push([module, moduleSize2Map[module]]);
}
sizeArray2.sort(function (a, b) {
return a[1] - b[1];
});
for (size of sizeArray2) {
console.log(size[0], size[1]);
}
});