Webpack

This section introduces how to migrate a project using webpack to Rsbuild.

Installing Dependencies

First, you need to replace the npm dependencies of webpack with Rsbuild's dependencies.

  • Remove webpack dependencies:
npm
yarn
pnpm
bun
npm remove webpack webpack-cli webpack-dev-server
  • Install Rsbuild dependencies:
npm
yarn
pnpm
bun
npm add @rsbuild/core -D

Updating npm scripts

Next, you need to update the npm scripts in your package.json to use Rsbuild's CLI commands.

package.json
{
  "scripts": {
-   "serve": "webpack serve -c webpack.config.js",
-   "build": "webpack build -c webpack.config.js",
+   "dev": "rsbuild dev",
+   "build": "rsbuild build"
  }
}

Create Configuration File

Create a Rsbuild configuration file rsbuild.config.ts in the same directory as package.json, and add the following content:

rsbuild.config.ts
import { defineConfig } from '@rsbuild/core';

export default defineConfig({
  plugins: [],
});

Configuration Migration

In a webpack project, there might be some complex webpack.config.js configuration files.

After migrating to Rsbuild, most webpack configurations are built-in and do not require manual configuration, such as output, resolve, module.rules, etc.

For the few webpack configurations that need to be migrated, you can choose the following options:

  • Use the tools.rspack option (Rspack and webpack configurations are basically equivalent).
rsbuild.config.ts
export default {
  tools: {
    rspack: {
      plugins: [new SomeWebpackPlugin()],
    },
  },
};
  • Use encapsulated configs in Rsbuild, for example, options for css-loader can be set through tools.cssLoader.

Build Entry

webpack uses the entry field to set the build entry. In Rsbuild, you can use source.entry to set it.

rsbuild.config.ts
export default {
  source: {
    entry: {
      foo: './src/pages/foo/index.ts',
      bar: './src/pages/bar/index.ts',
    },
  },
};

Cleaning Up Config

Since Rsbuild has built-in some common loaders and plugins, you can remove the following dependencies, which will significantly improve the dependency installation speed of the project:

  • css-loader
  • babel-loader
  • style-loader
  • postcss-loader
  • html-webpack-plugin
  • mini-css-extract-plugin
  • autoprefixer
  • @babel/core
  • @babel/preset-env
  • @babel/preset-typescript
  • @babel/runtime
  • ...
TIP

The above only lists some of the common dependencies that can be removed. In actual webpack projects, there may be many other dependencies, please handle them as appropriate.

Using Plugins

Rsbuild offers a rich set of plugins that provide out-of-the-box support for common scenarios. You can refer to the Plugin List documentation to learn about these plugins.

Taking a React project as an example, let's see how to integrate Rsbuild plugins. First, you can remove some React-related build dependencies that are already built into the Rsbuild React plugin, such as:

  • react-refresh
  • @babel/preset-react
  • @pmmmwh/react-refresh-webpack-plugin

Then see the React Plugin documentation, register it and use it as follows:

import { defineConfig } from '@rsbuild/core';
+import { pluginReact } from '@rsbuild/plugin-react';

export default {
+  plugins: [pluginReact()],
};

Most of the common webpack loaders and plugins can still be used in Rsbuild, but we recommend prioritizing the plugins provided by Rsbuild. This can further simplify your configuration. Below is their mapping relationship:

webpack Rsbuild
@babel/preset-react React Plugin
vue-loader Vue Plugin or Vue 2 Plugin
svelte-loader Svelte Plugin
babel-preset-solid Solid Plugin
babel-loader Babel Plugin
sass-loader Sass Plugin
less-loader Less Plugin
stylus-loader Stylus Plugin
mdx-loader MDX Plugin
pug-loader Pug Plugin
yaml-loader Yaml Plugin
toml-loader Toml Plugin
@svgr/webpack SVGR Plugin
fork-ts-checker-webpack-plugin Type Check Plugin
node-polyfill-webpack-plugin Node Polyfill Plugin
@vue/babel-plugin-jsx Vue JSX Plugin
@vue/babel-preset-jsx Vue 2 JSX Plugin
eslint-webpack-plugin ESLint Plugin
lightningcss-loader Lightning CSS Plugin
babel-plugin-styled-components Styled Components Plugin

Configure Dev Server

Rsbuild does not support the use of Rspack's devServer config. Please refer to Rspack Dev Server for replacement.

Validating Results

After completing the above steps, you have completed the basic migration from webpack to Rsbuild. You can now run the npm run dev command to try starting the dev server.

If you encounter any issues during the build process, please debug according to the error log, or check the webpack configuration to see if there are any necessary configurations that have not been migrated to Rsbuild.

Contents Supplement

The current document only covers part of the migration process. If you find suitable content to add, feel free to contribute to the documentation via pull request 🤝.

The documentation for rsbuild can be found in the rsbuild/website directory.