美文网首页
webpack 优化技巧

webpack 优化技巧

作者: littleyu | 来源:发表于2021-05-08 15:24 被阅读0次

单独打包 runtime

什么是 runtime,如果我们为了让一个东西运行而提供的代码,就是 runtime 代码
我们为了让 main.js 能够在 IE 中运行,webpack 代码需要写额外的代码,那部分代码就是 runtime
如果不单独打包,当我们修改了配置,或者升级了,因为默认 runtime 代码是包含在 main.js 中的,所以build之后 main 的内容就会变化,导致用户就要重新下载新的文件,但是本次下载是完全没有必要的,因为 index.js 没有变化,我们只是升级了 runtime,所以必须单独打包
所以要单独打包 runtime,只要 index.js 内容没有变化(我们自己写的代码没有变化),用户就不需要重新下载这部分代码,节省用户的带宽

module.exports = {
  // ...
  optimzation: {
    runtimeChunk: 'single',
  }
}

node 依赖单独打包

比如 react、vue,如果被打包进 main.js,就会很慢,还有就是没必要,因为我们不太会去升级 react 或者 vue 版本,如果单独打包,那么用户就可以缓存下来

module.exports = {
  // ...
  optimization: {
    // ...
    splitChunks: {
      cacheGroups: {
        vendor: {
          minSize: 0, // 如果不写 0,由于 React 文件尺寸太小,或者直接跳过
          test: /[\\/]node_modules[\\/]/, // 为了匹配 /node_modules/ 或者 \node_modules\
          name: 'vendors', // 文件名
          chunks: 'all', // all 表示同步加载和异步加载,async 表示异步加载,initial 表示同步加载
          // 这三行的整体意思就是把两种加载方式的来自 node_modules 目录的文件大包围 vendors.xxx.js
          // 其中 vendors 是第三方的意思(行业默认,显得专业)
        }
      },
    }
  },
}

固定 moduleIds

因为一般来说 modules 会按照顺序进行命名
比如:1.js => 905
2.js => 403
3.js => 603
如果这个时候我把 2.js 删除了,那么可能会影响其他依赖的命名,导致用户的缓存失效,保证用户不重复下载没有变化,所以最好加上(但是不必须,一般没人这么整)

module.exports = {
  // ...
  optimzation: {
    moduleIds: 'deterministic'
  }
}

webpack 多页面

module.exports = {
  entry: {
    main: './src/index.js',
    admin: './src/admin.js',
  },
  plugins: [
    new HtmlWebpackPlugin({
      filename: 'index.html',
      chunks: ['main'],
    }),
    new HtmlWebpackPlugin({
      filename: 'admin.html',
      chunks: ['admin'],
    }),
  ],
}

common chunks 共有文件(如果使用了多页面就需要使用的技巧)

module.exports = {
optimization: {
    // ...
    splitChunks: {
      cacheGroups: {
        // ...
        common: {
          // priority: 5,
          minSize: 0,
          minChunks: 2, // 同时被两处地方引用
          chunks: 'all',
          name: 'common',
        },
      },
    }
  },
}

无限多页面

像上面那样手写太累
用 node 读取文件在写进配置

相关文章

网友评论

      本文标题:webpack 优化技巧

      本文链接:https://www.haomeiwen.com/subject/deuudltx.html