feng xiaohan

分包策略-性能优化

原因

由于浏览器的缓存策略,在请求静态资源时只要静态资源的名称不变就不会重新请求。所以使用 vite 打包后的文件带有哈希值,只要有一点代码的变动文件的哈希值就会变换,以此来保证每次请求获取的都是最新代码。

但是有很多包是不需要经常更新的(第三方资源包,例如 lodash 等),每次重新请求对浏览器来说就是浪费资源,我们可以将这部分的包单独进行打包处理。

output.manualChunks

利用 rollup 本身的配置来实现。当该选项值为函数形式时,每个被解析的模块都会经过该函数处理。如果函数返回字符串,那么该模块及其所有依赖将被添加到以返回字符串命名的自定义 chunk 中。

export default defineConfig({
  // ...
  build: {
    rollupOptions: {
      output: {
        manualChunks: (id) => {
          console.log("id----", id); // id 对象所有需要打包的文件路径
          // 路径包含 node_modules 的包,一般为第三方包,不会变动的
          if (id.includes("node_modules")) {
            return "vendor"; // 会分出一个前缀为 vender的包
          }
        },
      },
    },
  },
});