close
logologo
Guide
Config
Plugin
API
Community
Version
Changelog
Rsbuild 0.x Doc
English
简体中文
Guide
Config
Plugin
API
Community
Changelog
Rsbuild 0.x Doc
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
📝 Edit this page on GitHub
Previous Pagesource.preEntry
Next Pagesource.tsconfigPath

#source.transformImport

  • Type:
type TransformImport =
  | Array<{
      libraryName: string;
      libraryDirectory?: string;
      style?: string | boolean;
      styleLibraryDirectory?: string;
      camelToDashComponentName?: boolean;
      transformToDefaultImport?: boolean;
      customName?: string;
      customStyleName?: string;
    }>
  | Function;
  • Default: undefined

Transform the import path to modularly import subpaths of third-party packages. The functionality is similar to babel-plugin-import.

#Example

#Import antd on demand

When using the antd component library (versions below v5), you can import components on demand with this config:

export default {
  source: {
    transformImport: [
      {
        libraryName: 'antd',
        libraryDirectory: 'es',
        style: 'css',
      },
    ],
  },
};

The source code is:

import { Button } from 'antd';

Will be transformed into:

import Button from 'antd/es/button';
import 'antd/es/button/style';

#Import lodash on demand

When using lodash, you can automatically refer to the subpath through transformImport to reduce bundle size.

export default {
  source: {
    transformImport: [
      {
        libraryName: 'lodash',
        customName: 'lodash/{{ member }}',
      },
    ],
  },
};

The source code is:

import { get } from 'lodash';

Will be transformed to:

import get from 'lodash/get';

Please avoid the following usage, otherwise all of lodash's code will be imported:

import _ from 'lodash';
import lodash from 'lodash';

#Scope

transformImport is only applicable to modules compiled by Rsbuild. Note that Rsbuild does not compile JavaScript files in the node_modules by default. This means that the code in the node_modules directory will not be processed by transformImport.

If you want to process the code in node_modules through transformImport, please add the relevant modules to the source.include config.

export default {
  source: {
    include: [/node_modules[\\/]some-package[\\/]/],
  },
};

#Options

#libraryName

  • Type: string

The original import path that needs to be transformed.

#libraryDirectory

  • Type: string
  • Default: 'lib'

Constructs the transformed path by concatenating ${libraryName}/${libraryDirectory}/${member}, where member is the imported member.

Example:

import { Button } from 'foo';

Out:

import Button from 'foo/lib/button';

#style

  • Type: boolean
  • Default: undefined

Determines whether to import related styles. If it is true, the path ${libraryName}/${libraryDirectory}/${member}/style will be imported. If it is false or undefined, the style will not be imported.

When it is set to true:

import { Button } from 'foo';

Out:

import Button from 'foo/lib/button';
import 'foo/lib/button/style';

#styleLibraryDirectory

  • Type: string
  • Default: undefined

Constructs the import path when importing styles. If this configuration is specified, the style configuration option will be ignored. The constructed import path is ${libraryName}/${styleLibraryDirectory}/${member}.

When it is set to styles:

import { Button } from 'foo';

Out:

import Button from 'foo/lib/button';
import 'foo/styles/button';

#camelToDashComponentName

  • Type: boolean
  • Default: true

Whether to convert camelCase imports to kebab-case.

Example:

import { ButtonGroup } from 'foo';

Out:

// set to true:
import ButtonGroup from 'foo/button-group';
// set to false:
import ButtonGroup from 'foo/ButtonGroup';

#transformToDefaultImport

  • Type: boolean
  • Default: true

Whether to convert import statements to default imports.

Example:

import { Button } from 'foo';

Out:

// set to true:
import Button from 'foo/button';
// set to false:
import { Button } from 'foo/button';

#customName

  • Type: string
  • Default: undefined

Customize the transformed path.

For example, the following config will transform import { foo } from 'my-lib' into import foo from 'my-lib/foo'.

export default {
  source: {
    transformImport: [
      {
        libraryName: 'my-lib',
        customName: `my-lib/{{ member }}`,
      },
    ],
  },
};

In addition, you can also declare the format of the path after transformation, for example setting it to my-lib/{{ camelCase member }} to convert member into camel case.

The following formats are supported:

  • kebabCase: lowercase letters, words joined by hyphens. For example: my-variable-name.
  • snakeCase: lowercase letters, words joined by underscores. For example: my_variable_name.
  • camelCase: first letter lowercase, the first letter of each following word uppercase. For example: myVariableName.
  • upperCase: uppercase letters, other characters unchanged. For example: MY-VARIABLE-NAME.
  • lowerCase: lowercase letters, other characters unchanged. For example: my-variable-name.

#customStyleName

  • Type: string
  • Default: undefined

Customize the transformed style path, the usage is consistent with customName.

#Function type

The transformImport can be a function, it will accept the previous value, and you can modify it.

export default {
  source: {
    transformImport: (imports) => {
      return imports.filter((data) => data.libraryName !== 'antd');
    },
  },
};

You can also return a new value as the final result in the function, which will replace the previous value.

export default {
  source: {
    transformImport: () => {
      return [
        {
          libraryName: 'antd',
          libraryDirectory: 'es',
          style: 'css',
        },
      ];
    },
  },
};