close
logologo
指南
配置
插件
API
社区
版本
更新日志
Rsbuild 0.x 文档
English
简体中文
指南
配置
插件
API
社区
更新日志
Rsbuild 0.x 文档
English
简体中文
logologo
Overview
root
mode
plugins
logLevel
environments

dev

dev.assetPrefix
dev.browserLogs
dev.cliShortcuts
dev.client
dev.hmr
dev.lazyCompilation
dev.liveReload
dev.progressBar
dev.setupMiddlewares
dev.watchFiles
dev.writeToDisk

resolve

resolve.aliasStrategy
resolve.alias
resolve.conditionNames
resolve.dedupe
resolve.extensions
resolve.mainFields

source

source.assetsInclude
source.decorators
source.define
source.entry
source.exclude
source.include
source.preEntry
source.transformImport
source.tsconfigPath

output

output.assetPrefix
output.charset
output.cleanDistPath
output.copy
output.cssModules
output.dataUriLimit
output.distPath
output.emitAssets
output.emitCss
output.externals
output.filenameHash
output.filename
output.injectStyles
output.inlineScripts
output.inlineStyles
output.legalComments
output.manifest
output.minify
output.module
output.overrideBrowserslist
output.polyfill
output.sourceMap
output.target

html

html.appIcon
html.crossorigin
html.favicon
html.inject
html.meta
html.mountId
html.outputStructure
html.scriptLoading
html.tags
html.templateParameters
html.template
html.title

server

server.base
server.compress
server.cors
server.headers
server.historyApiFallback
server.host
server.htmlFallback
server.https
server.middlewareMode
server.open
server.port
server.printUrls
server.proxy
server.publicDir
server.strictPort

security

security.nonce
security.sri

tools

tools.bundlerChain
tools.cssExtract
tools.cssLoader
tools.htmlPlugin
tools.lightningcssLoader
tools.postcss
tools.rspack
tools.styleLoader
tools.swc

performance

performance.buildCache
performance.bundleAnalyze
performance.chunkSplit
performance.dnsPrefetch
performance.preconnect
performance.prefetch
performance.preload
performance.printFileSize
performance.profile
performance.removeConsole
performance.removeMomentLocale

moduleFederation

moduleFederation.options
📝 在 GitHub 上编辑此页
上一页tools.postcss
下一页tools.styleLoader

#tools.rspack

  • 类型: Rspack.Configuration | Function | undefined
  • 默认值: undefined

tools.rspack 选项用于修改 Rspack 的配置项。

TIP

Rsbuild 内置的 Rspack 配置会随着迭代而发生变化,这些变化不会反映在 semver 中,因此在升级 Rsbuild 时,你的自定义配置可能会失效。

#Object 类型

tools.rspack 可以配置为一个对象,这个对象将会和内置的 Rspack 配置通过 webpack-merge 进行深层合并。

比如添加 resolve.alias 配置:

rsbuild.config.ts
export default {
  tools: {
    rspack: {
      resolve: {
        alias: {
          '@util': 'src/util',
        },
      },
    },
  },
};

在合并配置时,webpack-merge 会自动合并数组,比如 plugins、module.rules、resolve.extensions 等配置。

rsbuild.config.ts
export default {
  tools: {
    rspack: {
      resolve: {
        // 与内置的 resolve.extensions 合并
        extensions: ['.foo'],
      },
    },
  },
};

如果你需要覆盖某个配置项,而不是与默认值合并,可以使用 tools.rspack 的函数类型。

#Function 类型

tools.rspack 也可以配置为一个函数,这个函数接收一个参数,即内置的 Rspack 配置对象,你可以对这个对象进行修改,然后返回一份新的配置。比如:

rsbuild.config.ts
export default {
  tools: {
    rspack: (config) => {
      config.resolve.alias ||= {};
      config.resolve.alias['@util'] = 'src/util';
      return config;
    },
  },
};
TIP

tools.rspack 函数返回的对象会直接作为最终使用的 Rspack 配置,不会再与内置的 Rspack 配置进行合并。

tools.rspack 还可以是一个异步函数:

rsbuild.config.ts
export default {
  tools: {
    rspack: async (config) => {
      const { default: ESLintPlugin } = await import('eslint-webpack-plugin');
      config.plugins.push(new ESLintPlugin());
      return config;
    },
  },
};

#工具对象

这个函数的第二个参数是一个对象,包含了一些工具函数和属性,详情如下:

#env

  • 类型: 'development' | 'production' | 'test'

通过 env 参数可以判断当前环境为 development、production 还是 test。比如:

rsbuild.config.ts
export default {
  tools: {
    rspack: (config, { env }) => {
      if (env === 'development') {
        config.devtool = 'cheap-module-eval-source-map';
      }
      return config;
    },
  },
};

#isDev

  • 类型: boolean

一个布尔值,表示当前是否为开发模式构建,当 mode 为 development 时,值为 true。

rsbuild.config.ts
export default {
  tools: {
    rspack: (config, { isDev }) => {
      if (isDev) {
        config.devtool = 'eval-cheap-source-map';
      }
      return config;
    },
  },
};

#isProd

  • 类型: boolean

一个布尔值,表示当前是否为生产模式构建,当 mode 为 production 时,值为 true。

rsbuild.config.ts
export default {
  tools: {
    rspack: (chain, { isProd }) => {
      if (isProd) {
        chain.devtool('source-map');
      }
    },
  },
};

#target

  • 类型: 'web' | 'node' | 'web-worker'

当前 构建目标。

你可以为不同的构建目标设置不同的 Rspack 配置,比如:

rsbuild.config.ts
export default {
  tools: {
    rspack: (config, { target }) => {
      if (target === 'node') {
        // ...
        config.plugins.push(new SomePluginForNode());
        return config;
      }
      return config;
    },
  },
};

#isServer

  • 类型: boolean

一个布尔值,表示当前 构建目标 是否为 node,等价于 target === 'node'。

rsbuild.config.ts
export default {
  tools: {
    rspack: (config, { isServer }) => {
      if (isServer) {
        // ...
      }
      return config;
    },
  },
};

#isWebWorker

  • 类型: boolean

一个布尔值,表示当前 构建目标 是否为 web-worker,等价于 target === 'web-worker'。

rsbuild.config.ts
export default {
  tools: {
    rspack: (config, { isWebWorker }) => {
      if (isWebWorker) {
        // ...
      }
      return config;
    },
  },
};

#rspack

  • 类型: Rspack

Rspack 实例,等价于 import { rspack } from '@rsbuild/core'。

rsbuild.config.ts
export default {
  tools: {
    rspack: (config, { rspack }) => {
      config.plugins.push(new rspack.BannerPlugin());
      return config;
    },
  },
};

#environment

  • 类型: EnvironmentContext

和当前环境有关的上下文信息。

rsbuild.config.ts
export default {
  tools: {
    rspack: (config, { environment }) => {
      console.log(environment);
    },
  },
};

#HtmlPlugin

  • 类型: typeof import('html-rspack-plugin')

对应 html-rspack-plugin 插件的默认导出。

rsbuild.config.ts
export default {
  tools: {
    rspack: (config, { HtmlPlugin }) => {
      console.log(HtmlPlugin);
    },
  },
};

#addRules

  • 类型: (rules: RuleSetRule | RuleSetRule[]) => void

添加额外的 Rspack rules 到 Rspack rules 列表的最前面。

需要注意的是,Rspack loaders 会按照从右到左的顺序执行,如果你希望你添加的 loader(Normal Phase)先于其他 loader 执行,应使用 appendRules 将该规则添加到最后面。

示例:

rsbuild.config.ts
export default {
  tools: {
    rspack: (config, { addRules }) => {
      // 添加单条规则
      addRules({
        test: /\.foo/,
        loader: require.resolve('foo-loader'),
      });

      // 以数组形式添加多条规则
      addRules([
        {
          test: /\.foo/,
          loader: require.resolve('foo-loader'),
        },
        {
          test: /\.bar/,
          loader: require.resolve('bar-loader'),
        },
      ]);
    },
  },
};

#appendRules

  • 类型: (rules: RuleSetRule | RuleSetRule[]) => void

添加额外的 Rspack rules 到 Rspack rules 列表的最后面。

示例:

rsbuild.config.ts
export default {
  tools: {
    rspack: (config, { appendRules }) => {
      // 追加单条规则
      appendRules({
        test: /\.foo/,
        loader: require.resolve('foo-loader'),
      });

      // 以数组形式追加多条规则
      appendRules([
        {
          test: /\.foo/,
          loader: require.resolve('foo-loader'),
        },
        {
          test: /\.bar/,
          loader: require.resolve('bar-loader'),
        },
      ]);
    },
  },
};

#prependPlugins

  • 类型: (plugins: BundlerPluginInstance | BundlerPluginInstance[]) => void

在内部 Rspack 插件数组头部添加额外的插件,数组头部的插件会优先执行。

rsbuild.config.ts
export default {
  tools: {
    rspack: (config, { prependPlugins }) => {
      // 添加单个插件
      prependPlugins(new PluginA());

      // 以数组形式添加多个插件
      prependPlugins([new PluginA(), new PluginB()]);
    },
  },
};

#appendPlugins

  • 类型: (plugins: BundlerPluginInstance | BundlerPluginInstance[]) => void

在内部 Rspack 插件数组尾部添加额外的插件,数组尾部的插件会在最后执行。

rsbuild.config.ts
export default {
  tools: {
    rspack: (config, { appendPlugins }) => {
      // 添加单个插件
      appendPlugins([new PluginA()]);

      // 以数组形式添加多个插件
      appendPlugins([new PluginA(), new PluginB()]);
    },
  },
};

#removePlugin

  • 类型: (name: string) => void

删除内部的 Rspack 插件,参数为该插件的 constructor.name。

例如,删除内部的 webpack-bundle-analyzer:

rsbuild.config.ts
export default {
  tools: {
    rspack: (config, { removePlugin }) => {
      removePlugin('BundleAnalyzerPlugin');
    },
  },
};

#mergeConfig

  • 类型: (...configs:Rspack.Configuration[]) =>Rspack.Configuration

用于合并多份 Rspack 配置,等价于 webpack-merge。

rsbuild.config.ts
export default {
  tools: {
    rspack: (config, { mergeConfig }) => {
      return mergeConfig(config, {
        devtool: 'eval',
      });
    },
  },
};
TIP

mergeConfig 方法会创建一个新的 config 对象,不会修改原始 config 对象,因此你需要 return mergeConfig 的执行结果。