me

🎇 Vite 打包构建优化

抽离 node_modules 文件

output.manualChunks 可以将 node_modules 中的文件单独抽离出来,单独打包成一个文件,这样可以减少打包的体积,加快打包速度。

因为 node_modules 中的依赖并不是常常会变的,所以可以将其单独抽离出来,利用浏览器的缓存机制,当依赖没有发生变化时,就不会重新下载。

build: {
    rollupOptions: {
        output: {
            manualChunks: (id) => {
                if (id.includes('node_modules')) {
                    return 'vendor';
                }
            };
        }
    }
}

CDN 加载模块资源

项目中可能会出现一些第三方的模块,比如 lodashmoment 等,这些模块可能会比较大,如果每次都打包到项目中,会导致打包的体积变大,加载的时间变长。

可以通过 vite.config.ts 中的 build.rollupOptions.external 配置,将这些模块通过 CDN 的方式加载,这样可以减少打包的体积,加快打包速度。

在 Vite 有一款插件可以自动将模块转换成 CDN 的方式加载,这款插件就是 vite-plugin-cdn-import

import viteCDNPlugin from 'vite-plugin-cdn-import';

plugins: [
    viteCDNPlugin({
        modules: [
            {
                name: 'xlsx',
                // 会替换打包时全局变量引入的变量名(全局变量名)
                var: 'XLSX',
                // 会将 script 脚本帮我们插入的head中
                // 注意var的变量名要和脚本文件的导出的变量名一致(全局变量名)
                path: 'https://cdn.sheetjs.com/xlsx-0.19.3/package/dist/xlsx.full.min.js',
            },
        ],
    }),
];