Skip to content

Commit 34339d5

Browse files
9aoychenjiahan
andauthored
feat: add appendRules util to tools.rspack config (#3755)
Co-authored-by: neverland <[email protected]>
1 parent 454d046 commit 34339d5

File tree

7 files changed

+95
-9
lines changed

7 files changed

+95
-9
lines changed

packages/core/src/provider/rspackConfig.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,17 @@ export async function getConfigUtils(
6363
config.module.rules.unshift(...ruleArr);
6464
},
6565

66+
appendRules(rules) {
67+
const ruleArr = castArray(rules);
68+
if (!config.module) {
69+
config.module = {};
70+
}
71+
if (!config.module.rules) {
72+
config.module.rules = [];
73+
}
74+
config.module.rules.push(...ruleArr);
75+
},
76+
6677
prependPlugins(plugins) {
6778
const pluginArr = castArray(plugins);
6879
if (!config.plugins) {

packages/core/src/types/config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ export type ToolsHtmlPluginConfig = ConfigChainWithContext<
7676

7777
export type ModifyRspackConfigUtils = ModifyChainUtils & {
7878
addRules: (rules: RspackRule | RspackRule[]) => void;
79+
appendRules: (rules: RspackRule | RspackRule[]) => void;
7980
prependPlugins: (
8081
plugins: BundlerPluginInstance | BundlerPluginInstance[],
8182
) => void;

packages/core/src/types/plugin.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ export type ModifyWebpackChainUtils = ModifyChainUtils & {
9090

9191
export type ModifyWebpackConfigUtils = ModifyWebpackChainUtils & {
9292
addRules: (rules: RuleSetRule | RuleSetRule[]) => void;
93+
appendRules: (rules: RuleSetRule | RuleSetRule[]) => void;
9394
prependPlugins: (
9495
plugins: WebpackPluginInstance | WebpackPluginInstance[],
9596
) => void;

packages/core/tests/__snapshots__/default.test.ts.snap

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1440,6 +1440,10 @@ exports[`tools.rspack > should match snapshot 1`] = `
14401440
"test": /\\\\\\.wasm\\$/,
14411441
"type": "asset/resource",
14421442
},
1443+
{
1444+
"loader": "foo-loader",
1445+
"test": /\\\\\\.foo/,
1446+
},
14431447
],
14441448
},
14451449
"name": "web",

packages/core/tests/default.test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ describe('tools.rspack', () => {
5858
const rsbuild = await createStubRsbuild({
5959
rsbuildConfig: {
6060
tools: {
61-
rspack: (_config, { addRules, prependPlugins }) => {
61+
rspack: (_config, { addRules, prependPlugins, appendRules }) => {
6262
addRules({
6363
test: /\.test$/,
6464
use: [
@@ -67,6 +67,11 @@ describe('tools.rspack', () => {
6767
},
6868
],
6969
});
70+
appendRules({
71+
test: /\.foo/,
72+
loader: 'foo-loader',
73+
});
74+
7075
prependPlugins([new TestPlugin()]);
7176
},
7277
},

website/docs/en/config/tools/rspack.mdx

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,9 @@ export default {
235235
236236
- **Type:** `(rules: RuleSetRule | RuleSetRule[]) => void`
237237
238-
Add additional [Rspack rules](https://rspack.dev/config/module#modulerules).
238+
Add additional [Rspack rules](https://rspack.dev/config/module#modulerules) to the head of the internal Rspack module rules array.
239+
240+
It should be noted that Rspack loaders will be executed in right-to-left order. If you want the loader you added to be executed before other loaders (Normal Phase), you should use [appendRules](#appendrules) to add the rule to the end.
239241
240242
For example:
241243
@@ -265,9 +267,39 @@ export default {
265267
};
266268
```
267269
268-
:::tip
269-
The `addRules(...)` method will prepend rules to Rspack rule list. To append rules, use `config.module.rules.push(...)` instead.
270-
:::
270+
### appendRules
271+
272+
- **Type:** `(rules: RuleSetRule | RuleSetRule[]) => void`
273+
274+
Add additional [Rspack rules](https://rspack.dev/config/module#modulerules) to the end of the internal Rspack module rules array.
275+
276+
For example:
277+
278+
```ts
279+
export default {
280+
tools: {
281+
rspack: (config, { appendRules }) => {
282+
// add a single rule
283+
appendRules({
284+
test: /\.foo/,
285+
loader: require.resolve('foo-loader'),
286+
});
287+
288+
// Add multiple rules as an array
289+
appendRules([
290+
{
291+
test: /\.foo/,
292+
loader: require.resolve('foo-loader'),
293+
},
294+
{
295+
test: /\.bar/,
296+
loader: require.resolve('bar-loader'),
297+
},
298+
]);
299+
},
300+
},
301+
};
302+
```
271303
272304
### prependPlugins
273305

website/docs/zh/config/tools/rspack.mdx

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,9 @@ export default {
235235
236236
- **类型:** `(rules: RuleSetRule | RuleSetRule[]) => void`
237237
238-
添加额外的 [Rspack rules](https://rspack.dev/config/module#modulerules)。
238+
添加额外的 [Rspack rules](https://rspack.dev/config/module#modulerules) 到 Rspack rules 列表的最前面。
239+
240+
需要注意的是,Rspack loaders 会按照从右到左的顺序执行,如果你希望你添加的 loader(Normal Phase)先于其他 loader 执行,应使用 [appendRules](#appendrules) 将该规则添加到最后面。
239241
240242
示例:
241243
@@ -265,9 +267,39 @@ export default {
265267
};
266268
```
267269
268-
:::tip
269-
`addRules(...)` 会将新规则插入到 Rspack rules 列表的最前面。如果想要在末尾插入新规则,请改用 `config.module.rules.push(...)`
270-
:::
270+
### appendRules
271+
272+
- **类型:** `(rules: RuleSetRule | RuleSetRule[]) => void`
273+
274+
添加额外的 [Rspack rules](https://rspack.dev/config/module#modulerules) 到 Rspack rules 列表的最后面。
275+
276+
示例:
277+
278+
```ts
279+
export default {
280+
tools: {
281+
rspack: (config, { appendRules }) => {
282+
// 追加单条规则
283+
appendRules({
284+
test: /\.foo/,
285+
loader: require.resolve('foo-loader'),
286+
});
287+
288+
// 以数组形式追加多条规则
289+
appendRules([
290+
{
291+
test: /\.foo/,
292+
loader: require.resolve('foo-loader'),
293+
},
294+
{
295+
test: /\.bar/,
296+
loader: require.resolve('bar-loader'),
297+
},
298+
]);
299+
},
300+
},
301+
};
302+
```
271303
272304
### prependPlugins
273305

0 commit comments

Comments
 (0)