Вычисление размера ресурса из размеров модуля в файле статистики веб-пакета
stats.json
Файл, созданный Webpack, уложен так, что один или modules
составить chunk
и один или несколько кусков составляют asset
,
Я пытаюсь вычислить размер актива, суммируя размеры модулей, которые (составляют части), которые составляют актив. В приведенном ниже фрагменте вы можете предположить, что jsonContents
весь файл webpack stats.json, chunkToModulesDict
это словарь, который говорит, что модули, которые составляют чанк, и moduleSizeDict
словарь имен модулей с соответствующими им размерами
function createAssetSizeDictWithoutDuplicates(jsonContents, chunkToModulesDict, moduleSizeDict){
var assets = jsonContents.assets;
var assetsSize = [];
for(i = 0;i<assets.length;i++){
var asset = assets[i];
var size = 0;
var modulesUsedByAsset = [];
var chunksUsedByAsset = asset.chunks;
for(j=0;j<chunksUsedByAsset.length;j++){
var chunkId = chunksUsedByAsset[j];
for(k=0;k<chunkToModulesDict[chunkId].length;k++){
if(modulesUsedByAsset.indexOf(chunkToModulesDict[chunkId][k]) < 0){
modulesUsedByAsset.push(chunkToModulesDict[chunkId][k]);
size += moduleSizeDict[chunkToModulesDict[chunkId][k]];
}
}
}
assetsSize[i] = size;
}
return assetsSize;
}
Я заметил, что размер актива, указанный в файле статистики, не соответствует размеру актива, рассчитанному, как указано выше. Однако при построении расчетных размеров активов относительно размеров активов, указанных в файле stats.json, я вижу, что графики имеют похожую форму.
Я подтвердил свою гипотезу о том, что вычисленные и сообщенные значения сильно коррелированы.
У меня вопрос: как я могу более точно вычислить размеры активов из модулей, чтобы численно рассчитанные размеры соответствовали размеру, указанному в файле статистики. Я пытаюсь сравнить два файла статистики и понять, какие активы изменились по размеру и какие модули внесли вклад в эти изменения. (webpack-bundle-analyzer
это отличный инструмент, однако я хочу создать краткий отчет об изменениях и не тратить время на анализ пользовательского интерфейса)