I used to dislike webpack’s loader design, but over time I’ve come to appreciate just how much it gets right:
• Easy to parallelize: Loaders are standalone modules, so they can run in workers with little effort. I saw Rspack’s parallel loader feature cut babel-loader time by 80% in one large project
• Composable: Loaders can be combined and ordered as needed to build flexible transformation pipelines
• Cacheable: Loaders are usually stateless, making their results easy to cache and reuse
• Portable: The same loader can run on webpack, Turbopack, and Rspack