Skip to content

Vite 打包构建优化

抽离 node_modules 文件

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

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

ts
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

ts
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',
      },
    ],
  }),
];

清除 console 日志输出

在开发过程中,我们可能会在代码中使用 console.log 来输出一些调试信息。但是在项目后上线后,我们并不应该将这些调试信息暴露在在控制台上。所以我们需要在打包构建时移除这些 console 的代码。

ts
import clearConsole from 'vite-plugin-clear-console';

plugins: [
  {
    ...clearConsole(),
    apply: 'build', // build environment
  },
];