webpack学习日记——分包webpack.DllPlugin和DllRefrencePlugin

1,631 阅读1分钟

应用场景

用来提高编译速度、加载速度。

原理

当有几个项目都依赖同一个或几个固定依赖的时候,可以把它们单独分离出来打包成基础框架代码,如vue、vue-router、vuex等,这样也可以把业务代码和基础依赖代码分离开来,大幅提高编译速度,由于基础依赖代码更新的频率非常低,所以只要浏览器访问一次,就会缓存下来这个文件,下次访问引用了这个依赖的项目就会直接读取本地缓存,从而达到加快加载速度的目的。

实践

分包插件

分包需要单独写一个webpack配置文件,分包主要用到的就是一个webpack的内置插件——DllPlugin

const webpack = require('webpack')
const path = require('path')
module.exports = {
  entry: {
    library: [
      'vue',
      'vue-router',
      'vuex',
    ]
  },
  output: {
    filename: '[name].dll.js',
    path: path.join(__dirname, 'build/library'),
    library: '[name]',
  },
  plugins: [
    new webpack.DllPlugin({
      name: '[name]',
      context: __dirname,
      path: path.join(__dirname, 'build/library/[name].json')
    })
  ],
  mode: 'production'
}

引用分包的插件

引用分包的插件主要用webpack内置插件——DllRefrencePlugin

module.exports = {
    // ...基础配置省略
    plugins: [
        new webpack.DllReferencePlugin({
          manifest: require('./build/library/library.json')
        }),
    ]
}

需要注意的一点:引入分出来的基础library.js需要手动在index.html用script标签引入,如果有更好的方法,请私信我,谢谢。