source.entry

  • 类型:
type Entry = Record<string, string | string[] | EntryDescription> | Function;
  • 默认值:
const defaultEntry = {
  // 默认支持其他后缀,如 ts、tsx、jsx、mjs、cjs
  index: 'src/index.js',
};

用于设置构建的入口模块。

source.entry 的用法与 Rspack 的 entry 选项类似,它们的主要区别在于,Rsbuild 会为 source.entry 中的每一个入口注册 html-webpack-plugin,从而生成对应的 HTML 文件。

  • 示例:
rsbuild.config.ts
export default {
  source: {
    entry: {
      foo: './src/pages/foo/index.ts',
      bar: './src/pages/bar/index.ts',
    },
  },
};

生成的目录结构如下:

.
├── foo.html
├── bar.html
└── static
    ├── css
    │   ├── foo.css
    │   └── bar.css
    └── js
        ├── foo.js
        └── bar.js

如果你不需要生成 HTML 文件,可以将 tools.htmlPlugin 设置为 false 来禁用这一行为。

描述对象

source.entry 同样支持 Rspack 的 entry 描述对象写法,比如:

rsbuild.config.ts
export default {
  source: {
    entry: {
      foo: {
        import: './src/foo.js',
        runtime: 'foo',
      },
      bar: {
        import: './src/bar.js',
        runtime: 'bar',
      },
    },
  },
};

关于描述对象的完整用法,请参考 Rspack - 入口描述对象

函数用法

source.entry 支持设置为一个函数,这通常用于为不同的构建产物类型设置不同的 entry 对象。

比如分别为 web 产物和 node 产物设置 entry:

rsbuild.config.ts
export default {
  source: {
    entry({ target }) {
      if (target === 'web') {
        return {
          index: './src/index.client.js',
        };
      }
      if (target === 'node') {
        return {
          index: './src/index.server.js',
        };
      }
    },
  },
  output: {
    targets: ['web', 'node'],
  },
};