从 Vite 2.9 起,manualChunks 默认情况下不再被更改怎么办?看这里↓

一、事情起因 1.1 自己0-1搭建的项目是 Vue3 + Vite(4.4.11) + pinia(2.1.7) + echarts(5.4.3) , 项目打包后控制台提示了一个小警告,强迫症患者这谁受得了啊?必须盘他! 1.2 仔细一看...

这篇文章已从掘金同步到个人博客,原始发布地址为 掘金原文

前端领秀.png

一、事情起因

2.png

二、什么是拆包/分包?

manualChunks: {  
    lodash: ['lodash']  
}  
function manualChunks(id) {  
    if (id.includes('node_modules')) {  
        return 'vendor';  
    }  
}  
import { visualizer } from "rollup-plugin-visualizer";  
module.exports = {  
    plugins: [  
        visualizer({  
            open: true, // 注意这里要设置为true,否则无效  
            gzipSize: true, // 分析图生成的文件名  
            brotliSize: true, // 收集 brotli 大小并将其显示  
            filename: "stats.html", // 分析图生成的文件名  
        }),  
    ],  
};  

三、Vite如何拆包/分包?

build: {  
    assetsDir: "",  
    chunkSizeWarningLimit: 1500,  
    emptyOutDir: true,  
    rollupOptions: {  
        output: {  
        dir: "dist/",  
        format: "es", // es iife  
        inlineDynamicImports: false,  
        // 配置方式一:  
        // manualChunks: {  
            // echarts: ['echarts', 'echarts-wordcloud'],  
            // // echartsWordcloud: ['echarts-wordcloud'],  
            // antDesignVue: ['ant-design-vue'],  
            // vue: ['vue', 'vue-router'],  
            // axios: ['axios'],  
            // dayjs: ['dayjs'],  
            // pinia: ['pinia'],  
            // xlsx: ['xlsx', 'xlsx-js-style']  
        // },  
        // 配置方式二:  
        manualChunks(id) {  
            // 判断是否为第三方依赖,将其拆分到 vendor 中  
            if (id.includes('node_modules')) {  
                // 这里代码可以优化一下,但是我懒,我相信你一定可以的!
                if (id.includes('ant-design-vue')){  
                    return 'ant-design-vue';  
                } else if (id.includes('echarts') || id.includes('echarts-wordcloud')){  
                    return 'echarts';  
                } else if (id.includes('dayjs')){  
                    return 'dayjs';  
                } else if (id.includes('lodash-es')){  
                    return 'lodash-es';  
                } else if (id.includes('zrender')){  
                    return 'zrender';  
                } else if (id.includes('xlsx') || id.includes('xlsx-js-style')){  
                    return 'xlsx';  
                } else {  
                    return 'vendor';  
                }  
            } else {  
                return 'index';  
            } 
        },  
    },  
    plugins: [  
        cleaner({  
            targets: [  
                'dist/'  
            ]  
        }),  
    ]  
    },  
    cssCodeSplit: false,  
}  

image.png