日更挑战-Webpack打包拆包流程

2021-05-31  本文已影响0人  愿你我皆是黑马

越不懂的越爱装
大家都同等:IT世界没有难不难,只有是否了解过

挑战目录

什么是Webpack

是一个将各种资源(包括浏览器不能直接识别的),打包成浏览器能识别的模块化打包工具。


如何打包

  1. 从配置文件和命令行中合并参数
  2. 用上面的参数创建Compiler对象,加载所有配置的插件
  3. 执行Compiler的run方法开始构建
  4. 通过配置文件配置的入口文件,串行开始,递归搜索所有依赖的文件(一切文件都看做模块)。
  5. 每找到一种后缀的文件时,将文件传入通过rules配置的loader处理后生成处理过的数据。
  6. 根据上述处理出的文件数据,和依赖关系。组装成一个个chunk,然后将chunk转成一个个文件。加入到输出列表
  7. 根据配置将文件输出到输出目录
  8. 在上述过程中广播各种事件通知响应的插件进行处理。获得最终的处理文件。

什么是 module、chunk和bundle


通过splitChunks拆分代码


如何优化输出结果,提高构建速度

  1. UglifyJSPlugin优化项

    • 压缩js,删除日志和debugger,使用uglifyjs插件压缩js代码
    • 使用多进程并行运行来提高构建速度
    • 启用文件缓存来提高构建速度
    configureWebpack: config => {
     if (process.env.NODE_ENV === "production") {
       const plugins = [];
       plugins.push(
         new UglifyJSPlugin({
           uglifyOptions: {
             //删除注释
             output: {comments: false},
             //删除console 和 debugger  删除警告
             compress: {
               warnings: false,
               drop_debugger: true,
               drop_console: true
             }
           },
           cache: true, // 启用文件缓存
           parallel: true // 使用多进程并行运行来提高构建速度
         })
       );
       config.plugins = [...config.plugins, ...plugins];
     }
     },
    
  2. 提取公共代码:

    • 抽取公共模块(文件)代码
    • 抽取公共依赖(第三方模块)
    1. 通过前面的splitChunks配置
    2. 通过commons-chunk-plugin插件
    3. 通过externals配置来提取常用库
    
  3. 压缩css:使用cssnano插件压缩css代码

    • 在配置loader是追加参数css-loader?minimize
  4. cdn加速:

    • 将引用的静态文件设置为cdn上的路径
  5. 删除死代码:在启动webpack时追加参数

    • 启动webpack时追加参数--optimize-minimize,自动识别不会走到的代码并删除。
  6. 预编译资源模块:

    • 通过 DllPlugin对不会修改的npm包来进行预编译
    • 通过DllReferencePlugin将预编译的模块加载进来
  7. 多线程加载编译:使用happypack

  8. 提高uglify的速度:使用webpack-uglify-parllel多核并行压缩

  9. 剔除多余代码:使用tree shocking和scope

  10. 剔除组件库中的多余组件:使用官方的插件


什么是loader


什么是plugin

扩展功能:或者webpack的功能。要知道这里的作用需要发挥想象力。


常用的loader


常用的plugin

上一篇 下一篇

猜你喜欢

热点阅读