resolve

与模块解析相关的选项。

resolve.aliasStrategy resolve.aliasStrategyresolve.aliasStrategy

控制 tsconfig.json 中的 paths 选项与 Rsbuild 中的 resolve.alias 选项的优先级。

resolve.alias resolve.aliasresolve.alias

设置文件引用的别名,对应 Rspack 的 resolve.alias 配置。

值得注意的是,在 bundle 模式下,resolve.aliasoutput.externals 都可以用于设置别名,但它们在以下方面有所不同:

  • resolve.alias 用于将目标模块替换为另一个模块,该模块会被打包到产物中。

    例如,如果你想在打包一个 package 时将 lodash 替换为 lodash-es,可以这样配置:

    rslib.config.ts
    export default {
      // ...
      resolve: {
        alias: {
          lodash: 'lodash-es',
        },
      },
    };

    此时,所有在源代码中导入的 lodash 模块将被映射为 lodash-es,并被打包到产物中。

  • output.externals 用于处理外部化模块的别名映射。外部化模块不会被打包到产物中,而是在运行时从外部源导入。

    例如,如果你想将产物中的外部化模块 reactreact-dom 替换为 preact/compat,可以这样配置:

    rslib.config.ts
    export default {
      // ...
      output: {
        externals: {
          react: 'preact/compat',
          'react-dom': 'preact/compat',
        },
      },
    };

    此时,代码 import { useState } from 'react' 将被替换为 import { useState } from 'preact/compat'

NOTE

在 bundleless 模式下,由于并没有打包这个概念,所有模块都会被外部化,因此 Rslib 会自动将 resolve.alias 中解析的模块通过 output.externals 外部化。

resolve.dedupe resolve.deduperesolve.dedupe

强制 Rsbuild 从项目根目录解析指定的包,这可以用于移除重复包和减少包大小。

resolve.extensions resolve.extensionsresolve.extensions

自动添加导入文件的扩展名。这意味着你可以导入文件,而不需要显式地写它们的扩展名。