webpack has a rich plugin interface. Most of the features within webpack itself use this plugin interface. This makes webpack flexible.

Name Description
BannerPlugin Add a banner to the top of each generated chunk
CommonsChunkPlugin Extract common modules shared between chunks
CompressionWebpackPlugin Prepare compressed versions of assets to serve them with Content-Encoding
ContextReplacementPlugin Override the inferred context of a require expression
CopyWebpackPlugin Copies individual files or entire directories to the build directory
DefinePlugin Allow global constants configured at compile time
DllPlugin Split bundles in order to drastically improve build time
EnvironmentPlugin Shorthand for using the DefinePlugin on process.env keys
EslintWebpackPlugin A ESLint plugin for webpack
HotModuleReplacementPlugin Enable Hot Module Replacement (HMR)
HtmlWebpackPlugin Easily create HTML files to serve your bundles
IgnorePlugin Exclude certain modules from bundles
LimitChunkCountPlugin Set min/max limits for chunking to better control chunking
MinChunkSizePlugin Keep chunk size above the specified limit
MiniCssExtractPlugin creates a CSS file per JS file which requires CSS
NoEmitOnErrorsPlugin Skip the emitting phase when there are compilation errors
NormalModuleReplacementPlugin Replace resource(s) that matches a regexp
NpmInstallWebpackPlugin Auto-install missing dependencies during development
ProgressPlugin Report compilation progress
ProvidePlugin Use modules without having to use import/require
SourceMapDevToolPlugin Enables a more fine grained control of source maps
EvalSourceMapDevToolPlugin Enables a more fine grained control of eval source maps
TerserPlugin Uses Terser to minify the JS in your project

For more third-party plugins, see the list from awesome-webpack.