close
  • 简体中文
  • resolve.aliasStrategy

    • 类型: 'prefer-tsconfig' | 'prefer-alias'
    • 默认值: 'prefer-tsconfig'
    • 版本: >=1.1.7

    设置路径别名解析的策略,用于控制 tsconfig.json 中的 paths 选项与 Rsbuild 的 resolve.alias 选项之间的优先级关系。

    Tip

    参考 路径别名 了解 tsconfig.jsonpaths 选项与 resolve.alias 选项的区别。

    prefer-tsconfig

    resolve.aliasStrategy 默认为 'prefer-tsconfig',此时 tsconfig.json 中的 paths 选项和打包工具的 alias 选项都会生效,但 tsconfig paths 选项的优先级更高。

    比如同时配置以下内容:

    • tsconfig paths:
    tsconfig.json
    {
      "compilerOptions": {
        "paths": {
          "@common/*": ["./src/common-1/*"]
        }
      }
    }
    • resolve.alias:
    rsbuild.config.ts
    export default {
      resolve: {
        alias: {
          '@common': './src/common-2',
          '@utils': './src/utils',
        },
      },
    };

    由于 tsconfig paths 的优先级更高,所以:

    • @common 会使用 tsconfig paths 定义的值,指向 ./src/common-1
    • @utils 会使用 resolve.alias 定义的值,指向 ./src/utils

    prefer-alias

    resolve.aliasStrategy 的值为 prefer-alias 时,tsconfig.json 中的 paths 选项只用于提供 TypeScript 类型定义,而不会对打包结果产生任何影响。此时,构建工具只会读取 alias 选项作为路径别名。

    rsbuild.config.ts
    export default {
      resolve: {
        aliasStrategy: 'prefer-alias',
      },
    };

    比如同时配置以下内容:

    • tsconfig paths:
    tsconfig.json
    {
      "compilerOptions": {
        "paths": {
          "@common/*": ["./src/common-1/*"],
          "@utils/*": ["./src/utils/*"]
        }
      }
    }
    • resolve.alias:
    rsbuild.config.ts
    export default {
      resolve: {
        alias: {
          '@common': './src/common-2',
        },
      },
    };

    由于 tsconfig paths 只用于提供类型,所以最终只有 @common 别名生效,并指向 ./src/common-2 目录。

    大部分情况下你不需要使用 prefer-alias,但当你需要动态生成一些别名配置时,可以考虑使用它。比如,基于环境变量来生成 alias 选项:

    rsbuild.config.ts
    export default {
      resolve: {
        alias: {
          '@common': process.env.NODE_ENV === 'production' ? './src/common-prod' : './src/common-dev',
        },
      },
    };