Вычисление размера ресурса из размеров модуля в файле статистики веб-пакета - PullRequest
0 голосов
/ 11 января 2019

Файл stats.json, созданный Webpack, расположен таким образом, что один или modules составляют chunk, а один или несколько кусков составляют asset.

enter image description here

Я пытаюсь вычислить размер актива, суммируя размеры модулей, которые (составляют куски) составляют актив. В приведенном ниже фрагменте вы можете предположить, что jsonContents - это весь файл statpack.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, я вижу, что графики имеют похожую форму.

enter image description here

Я подтвердил свою гипотезу о том, что вычисленные и сообщенные значения сильно коррелированы.

enter image description here

У меня вопрос Как я могу с большей точностью вычислить размеры активов из модулей, чтобы числовые размеры соответствовали размеру, указанному в файле статистики. Я пытаюсь сравнить два файла статистики и понять, какие активы изменились по размеру, и какие модули внесли вклад в эти изменения. (webpack-bundle-analyzer - отличный инструмент, однако я хочу создать короткий отчет изменений и не нужно тратить время на анализ пользовательского интерфейса)

...