什么是plugin 🤔️
plugin(插件)是webpack的支柱功能,解决loader无法实现的事情。通常用于对现有的架构进行扩展,比如打包优化,文件压缩等等。
常用的一些插件
- MiniCssExtractPlugin
没有提取之前css是打包到js里面的,先加载js文件,然后创建css样式,这样会出现闪屏现象用户体验不好,
解决以上问题方案:
将 CSS 提取到单独的文件中,通过link标签加载性能才好,并且支持 CSS 和 SourceMaps 的按需加载。
把style-loader改为MiniCssExtractPlugin.loader
修改前后打包输出的结果 👇
- CssMinimizerWebpackPlugin
通过使用 cssnano 优化和压缩 CSS。
- HtmlWebpackPlugin
HtmlWebpackPlugin简化了 HTML 文件的创建,把当前存在的html复制一份到打包文件中
新的文件特点:
- 结构和原来的一样,
- 自动引入打包输出的资源
- 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'],
},
},
}
]
}
- EslintWebpackPlugin
该插件使用
eslint来查找和修复 JavaScript 代码中的问题。
- TerserWebpackPlugin
该插件使用 terser 来压缩 JavaScript以及开启多进程打包。
parallel类型:Boolean|Number默认值:true使用多进程并发运行以提高构建速度。 并发运行的默认数量:
os.cpus().length - 1。
- CompressionWebpackPlugin
将文件压缩成 gzip
- webpack-bundle-analyzer
可视化webpack输出的各业务组件和依赖的第三方模块文件的体积,方便做包的优化 github.com/jantimon/ht…
- IgnorePlugin
忽略部分不必要的依赖
例如忽略没有用到的国际化语言(只留当前用到的语言)
- ImageMinimizerWebpackPlugin(压缩图片)
如果图片是放到本地的需要配置,如果是放到CDN上面的则不需要
- copy-webpack-plugin(从一个文件拷贝资源到目标文件)
- workbox-webpack-plugin (离线模式)
解决没有网络页面崩溃问题