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 上编辑此页
上一页resolve.aliasStrategy
下一页resolve.conditionNames

#resolve.alias

  • 类型:
type Alias = Record<string, string | false | (string | false)[]> | Function;
  • 默认值:
const defaultAlias = {
  '@swc/helpers': path.dirname(require.resolve('@swc/helpers/package.json')),
};
  • 版本: >=1.1.7

设置模块路径的别名,用于简化导入路径或重定向模块引用。

对于 TypeScript 项目,你只需要在 tsconfig.json 中配置 compilerOptions.paths 即可,Rsbuild 会自动识别它,不需要额外配置 resolve.alias 字段,详见 「路径别名」。

TIP

在 Rsbuild 1.1.7 之前的版本,你可以使用 source.alias 来设置 alias,但该字段将在下一个大版本中被移除。

#基本用法

resolve.alias 的值可以传入一个对象,对象的 key 是源代码中需要被替换的模块路径,value 是模块实际映射到的目标路径。

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

添加以上配置后,当你在代码中引用 @common/Foo.tsx 时,会映射到 <project-root>/src/common/Foo.tsx 路径上。

#Function 用法

resolve.alias 的值定义为函数时,可以接受预设的 alias 对象,并对其进行修改。

rsbuild.config.ts
export default {
  resolve: {
    alias: (alias) => {
      alias['@common'] = './src/common';
    },
  },
};

如果你需要移除 Rsbuild 内置的 @swc/helpers 别名,可以在函数中删除它:

rsbuild.config.ts
export default {
  resolve: {
    alias: (alias) => {
      delete alias['@swc/helpers'];
    },
  },
};

你也可以在函数中返回一个新对象作为最终结果,新对象会覆盖预设的 alias 对象。

rsbuild.config.ts
export default {
  resolve: {
    alias: (alias) => {
      return {
        '@common': './src/common',
      };
    },
  },
};

#与 Rspack 配置的差异

Rsbuild 的 resolve.alias 与 Rspack 的 resolve.alias 配置的用法基本一致,它们的差异是:

  • 如果 resolve.alias 的值是一个相对路径,Rsbuild 会自动将其转换为绝对路径,以保证路径是相对于项目根目录的。
rsbuild.config.ts
export default {
  resolve: {
    alias: {
      // 将被转换为 `<project-root>/src/common`
      '@common': './src/common',
    },
  },
};
  • Rsbuild 额外支持了函数类型的用法。

#基于 environment 设置

当你面向多个 environments 构建时,可以为每个 environment 设置不同的 alias:

比如为 web 和 node 环境设置不同的 alias:

rsbuild.config.ts
export default {
  environments: {
    web: {
      resolve: {
        alias: {
          '@common': './src/web/common',
        },
      },
      output: {
        target: 'web',
      },
    },
    node: {
      resolve: {
        alias: {
          '@common': './src/node/common',
        },
      },
      output: {
        target: 'node',
      },
    },
  },
};

#精确匹配

默认情况,resolve.alias 会自动匹配子路径,比如以下配置:

rsbuild.config.ts
import path from 'node:path';

export default {
  resolve: {
    alias: {
      '@common': './src/common',
    },
  },
};

它的匹配结果如下:

import a from '@common'; // 解析为 `./src/common`
import b from '@common/util'; // 解析为 `./src/common/util`

你可以添加 $ 符号来开启精确匹配,开启后将不会自动匹配子路径。

rsbuild.config.ts
import path from 'node:path';

export default {
  resolve: {
    alias: {
      '@common$': './src/common',
    },
  },
};

它的匹配结果如下:

import a from '@common'; // 解析为 `./src/common`
import b from '@common/util'; // 保持 `@common/util` 不变

#处理 npm 包

你可以使用 alias 将某个 npm 包指向统一的目录。

比如项目中安装了多份 react,你可以将 react 统一指向根目录的 node_modules 中安装的版本,避免出现打包多份 React 代码的问题。

rsbuild.config.ts
import path from 'node:path';

export default {
  resolve: {
    alias: {
      react: path.resolve(__dirname, './node_modules/react'),
    },
  },
};

当你在使用 alias 处理 npm 包时,请留意项目中是否使用了这个包不同的 major 版本。

比如你的项目中某个模块或 npm 依赖使用了 React 19 的 API,如果你将 React alias 到 17 版本,就会导致该模块无法引用到 React 19 的 API,导致代码异常。

#处理 Loader

resolve.alias 不支持为 loader 设置别名。如果你需要为 loader 设置别名,可以使用 Rspack 的 resolveLoader 配置项。

rsbuild.config.ts
export default {
  tools: {
    rspack: {
      resolveLoader: {
        alias: {
          'amazing-loader': require.resolve('path-to-your-amazing-loader'),
        },
      },
    },
  },
};