Skip to content

Commit 769e045

Browse files
authored
fix: optimize CSS runtime requirements logic (#12529)
- Refactor runtime requirements check to be more granular - Only add CSS loading runtime module when HAS_CSS_MODULES is required - Only add PUBLIC_PATH and GET_CHUNK_CSS_FILENAME when needed - Fix test cases to match expected behavior
1 parent efed455 commit 769e045

File tree

26 files changed

+51
-42
lines changed

26 files changed

+51
-42
lines changed

crates/rspack_plugin_css/src/plugin/impl_plugin_for_css_plugin.rs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -319,22 +319,36 @@ async fn runtime_requirements_in_tree(
319319
compilation,
320320
);
321321

322-
if (runtime_requirements.contains(RuntimeGlobals::HAS_CSS_MODULES)
322+
if !is_enabled_for_chunk {
323+
return Ok(None);
324+
}
325+
326+
if runtime_requirements.contains(RuntimeGlobals::HAS_CSS_MODULES)
323327
|| runtime_requirements.contains(RuntimeGlobals::ENSURE_CHUNK_HANDLERS)
324-
|| runtime_requirements.contains(RuntimeGlobals::HMR_DOWNLOAD_UPDATE_HANDLERS))
325-
&& is_enabled_for_chunk
328+
|| runtime_requirements.contains(RuntimeGlobals::HMR_DOWNLOAD_UPDATE_HANDLERS)
326329
{
327-
runtime_requirements_mut.insert(RuntimeGlobals::PUBLIC_PATH);
328-
runtime_requirements_mut.insert(RuntimeGlobals::GET_CHUNK_CSS_FILENAME);
329-
runtime_requirements_mut.insert(RuntimeGlobals::HAS_OWN_PROPERTY);
330330
runtime_requirements_mut.insert(RuntimeGlobals::MODULE_FACTORIES_ADD_ONLY);
331331
runtime_requirements_mut.insert(RuntimeGlobals::MAKE_NAMESPACE_OBJECT);
332+
}
333+
334+
if runtime_requirements.contains(RuntimeGlobals::HAS_CSS_MODULES) {
332335
compilation.add_runtime_module(
333336
chunk_ukey,
334337
CssLoadingRuntimeModule::new(&compilation.runtime_template).boxed(),
335338
)?;
336339
}
337340

341+
if runtime_requirements.contains(RuntimeGlobals::ENSURE_CHUNK_HANDLERS) {
342+
runtime_requirements_mut.insert(RuntimeGlobals::PUBLIC_PATH);
343+
runtime_requirements_mut.insert(RuntimeGlobals::GET_CHUNK_CSS_FILENAME);
344+
runtime_requirements_mut.insert(RuntimeGlobals::HAS_OWN_PROPERTY);
345+
}
346+
347+
if runtime_requirements.contains(RuntimeGlobals::HMR_DOWNLOAD_UPDATE_HANDLERS) {
348+
runtime_requirements_mut.insert(RuntimeGlobals::PUBLIC_PATH);
349+
runtime_requirements_mut.insert(RuntimeGlobals::GET_CHUNK_CSS_FILENAME);
350+
}
351+
338352
Ok(None)
339353
}
340354

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
```html title=output.html
2-
<!doctype html><html><head><meta charset="UTF-8"><title>Rspack App</title><script crossorigin integrity="sha512-YXG9TdCv5c+hzETohiLZ2SxJ8/XqLuMx4jREXi5oWY3vd7zuH/nXAiKx83KVF3C5+H6Bqve0ZSC9nrpNrb5G4A==" src="/runtime.js"></script><script crossorigin integrity="sha512-Suo2rxdzKWBwd8QCzEYzbPxiEFqbi+tK1D9wIhKVSSj2w27IeZ97mKVFTeqHcgvDoAREm2wNE6YqasvTKx3b0Q==" src="/index.js"></script><link crossorigin href="/index.css" integrity="sha512-vjhejkvTX8D8jzzC5Lc9ToCtcEDb0/NqtYmEHOid+ycq64hvW+JTG7Dw/ACFP6rApgiYwVMbEt6Zfb8j4EoZTA==" rel="stylesheet"></head><body></body></html>
2+
<!doctype html><html><head><meta charset="UTF-8"><title>Rspack App</title><script crossorigin integrity="sha512-Orikz3SNSn+AZ/83dHOamnEgt4/EwAPs7GkTrri81j23hMb7mU0Ql5E/88CAHP2fZSRCSRuEZIwfjE+1mhb00w==" src="/runtime.js"></script><script crossorigin integrity="sha512-Suo2rxdzKWBwd8QCzEYzbPxiEFqbi+tK1D9wIhKVSSj2w27IeZ97mKVFTeqHcgvDoAREm2wNE6YqasvTKx3b0Q==" src="/index.js"></script><link crossorigin href="/index.css" integrity="sha512-vjhejkvTX8D8jzzC5Lc9ToCtcEDb0/NqtYmEHOid+ycq64hvW+JTG7Dw/ACFP6rApgiYwVMbEt6Zfb8j4EoZTA==" rel="stylesheet"></head><body></body></html>
33
```

tests/rspack-test/configCases/css/no-extra-js-exports-output/test.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ it("should work", () => {
1313
// and it still output two runtime module:
1414
// 'webpack/runtime/make namespace object'
1515
// 'webpack/runtime/css loading'
16-
// DIFF: rspack generate extra js modules for css modules
17-
// expect(stats.modules.length).toBe(4);
18-
expect(stats.modules.length).toBe(8);
16+
expect(stats.modules.length).toBe(4);
1917
} else if (__STATS_I__ === 1) {
2018
stats.modules
2119
.filter(module => module.moduleType === "css/auto")

tests/rspack-test/configCases/hooks/rspack-issue-5571/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import "./index.css";
12
const fs = __non_webpack_require__("fs");
23
const path = __non_webpack_require__("path");
34

tests/rspack-test/configCases/source-map/verify-css-js-mix/index.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@ it("verify importing css js source map", async () => {
1414
expect(map.sources.sort()).toEqual([
1515
"webpack:///./a.js",
1616
"webpack:///./index.js",
17-
"webpack:///webpack/runtime/auto_public_path",
18-
"webpack:///webpack/runtime/get css chunk filename",
19-
"webpack:///webpack/runtime/global",
20-
"webpack:///webpack/runtime/has_own_property",
2117
"webpack:///webpack/runtime/make_namespace_object",
2218
]);
2319
expect(map.file).toEqual("bundle0.js");

tests/rspack-test/statsOutputCases/css-concat/__snapshots__/stats.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
asset main.js xx KiB [emitted] (name: main)
1+
asset main.js xx bytes [emitted] (name: main)
22
asset main.css xx bytes [emitted] (name: main)
3-
Entrypoint main xx KiB = main.js xx KiB main.css xx bytes
4-
runtime modules xx KiB 6 modules
3+
Entrypoint main xx bytes = main.js xx bytes main.css xx bytes
4+
runtime modules xx bytes 2 modules
55
cacheable modules xx bytes (javascript) xx bytes (css)
66
./index.js xx bytes [built] [code generated]
77
./foo.css xx bytes [built] [code generated]

tests/rspack-test/statsOutputCases/dynamic-import/__snapshots__/stats.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ asset pages/home.js xx KiB [emitted] (name: pages/home)
44
asset runtime.js xx KiB [emitted] (name: runtime)
55
asset main.js xx KiB [emitted] (name: main)
66
Entrypoint main 1.12 MiB = runtime.js xx KiB common.js 1.11 MiB main.js xx KiB
7-
runtime modules xx KiB 14 modules
7+
runtime modules xx KiB 13 modules
88
cacheable modules 1.12 MiB
99
modules by path ../../../../node_modules/.pnpm/ 1.1 MiB
1010
modules by path ../../../../node_modules/<PNPM_INNER>/react/ xx KiB 4 modules

tests/rspack-test/statsOutputCases/filename/__snapshots__/stats.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
asset 889.xxxx.js xx KiB [emitted] (name: main)
22
asset 769.xxxx.js xx bytes [emitted]
3-
runtime modules xx KiB 11 modules
3+
runtime modules xx KiB 10 modules
44
cacheable modules xx bytes
55
./index.js xx bytes [built] [code generated]
66
./dynamic.js xx bytes [built] [code generated]
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
asset main.js xx KiB [emitted] (name: main)
2-
runtime modules xx KiB 12 modules
2+
runtime modules xx KiB 11 modules
33
./index.js xx bytes [built] [code generated]
44
Rspack x.x.x compiled successfully in X s
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
asset 1513c0e99cf8dddc.js xx KiB [emitted] [immutable] (name: main)
1+
asset 6954a74052160253.js xx KiB [emitted] [immutable] (name: main)
22
asset ce122906ee13f376.js xx bytes [emitted] [immutable]

0 commit comments

Comments
 (0)