This is not the case. I love esbuild and hope to see it go far, but Webpack does out of the box most of what esbuild (today) does as well, with the notable exception of TypeScript /jsx transpilation. For more advanced scenarios, like dealing with css modules, you do need plugins -- but esbuild doesn't support most of these scenarios today at all.
It's like saying VS Code does nothing: you probably want extensions to help you out and let you do more complex things more easily, but it doesn't "do nothing" out of the box.
https://bundlers.tooling.report/
webpack: 43.5/48
rollup: 40.5/48
parcel: 31.5/48
Let's be concrete. How do I do dynamic imports in Webpack?
> Webpack was one of the first bundlers to use Dynamic Imports as a signal for creating code-splitting boundaries.
> Unlike multiple entries, split points created using Dynamic Imports consistently result in a separate bundle being created without customizing optimization.splitChunks.
Okay, but what does that mean? How do I make it work? What are the actual configuration settings? The site gives you no clues.
All right, let's go to https://webpack.js.org/guides/code-splitting/#dynamic-import... and read the docs.
Haha, okay, yes "Webpack" can totally do dynamic imports. All you have to do is read 50 pages of confusing docs first and craft a perfect config file. If you're familiar with Webpack, it shouldn't take more than 1 or 2 hours (my serious, no joking estimate).
Or you could use a bundler tool instead of a bundler tool tool.
I would quibble with the word "solves". Webpack is a tool building tool. With Webpack, you can build a tool to solve your edge case problem, as long as you're willing to spend a lot of time and dig through random Github issues for your dependencies. Webpack itself however does basically nothing.