Webpack 常用的Plugin

564 阅读2分钟

什么是plugin 🤔️

plugin(插件)是webpack的支柱功能,解决loader无法实现的事情。通常用于对现有的架构进行扩展,比如打包优化,文件压缩等等。

常用的一些插件

  • MiniCssExtractPlugin

没有提取之前css是打包到js里面的,先加载js文件,然后创建css样式,这样会出现闪屏现象用户体验不好,

解决以上问题方案:

将 CSS 提取到单独的文件中,通过link标签加载性能才好,并且支持 CSS 和 SourceMaps 的按需加载。

把style-loader改为MiniCssExtractPlugin.loader

image.png

修改前后打包输出的结果 👇

image.png

  • CssMinimizerWebpackPlugin

通过使用 cssnano 优化和压缩 CSS。

image.png

  • HtmlWebpackPlugin

HtmlWebpackPlugin 简化了 HTML 文件的创建,把当前存在的html复制一份到打包文件中

新的文件特点:

  1. 结构和原来的一样,
  2. 自动引入打包输出的资源

image.png

  • HotModuleReplacementPlugin

模块热替换(HMR)功能会在应用程序运行过程中,替换、添加或删除 模块,而无需重新加载整个页面。主要是通过以下几种方式,来显著加快开发速度:

  • 保留在完全重新加载页面期间丢失的应用程序状态。
  • 只更新变更内容,以节省宝贵的开发时间。
  • 在源代码中 CSS/JS 产生修改时,会立刻在浏览器中进行更新,这几乎相当于在浏览器 devtools 直接更改样式。
  • @pmmmwh/react-refresh-webpack-plugin (react中的HMR)
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); 

module:{
    rules:[
       {
         test: /\.(jsx|js)$/,
         exclude: /(node_modules)/,  //排除node_modules
         use: {
           loader: 'babel-loader',
           options: {
             plugins: ['react-refresh/babel'],
            },
         },     
      }
    ]
}

image.png

  • EslintWebpackPlugin

该插件使用 eslint 来查找和修复 JavaScript 代码中的问题。

image.png

  • TerserWebpackPlugin

该插件使用 terser 来压缩 JavaScript以及开启多进程打包。

parallel 类型: Boolean|Number 默认值: true

使用多进程并发运行以提高构建速度。 并发运行的默认数量: os.cpus().length - 1 。

image.png

  • CompressionWebpackPlugin

将文件压缩成 gzip

image.png

  • webpack-bundle-analyzer

可视化webpack输出的各业务组件和依赖的第三方模块文件的体积,方便做包的优化 github.com/jantimon/ht…

image.png

image.png

  • IgnorePlugin

忽略部分不必要的依赖

例如忽略没有用到的国际化语言(只留当前用到的语言)

image.png

  • ImageMinimizerWebpackPlugin(压缩图片)

如果图片是放到本地的需要配置,如果是放到CDN上面的则不需要

image.png

  • copy-webpack-plugin(从一个文件拷贝资源到目标文件)

image.png

  • workbox-webpack-plugin (离线模式)

解决没有网络页面崩溃问题