Skip to content

Commit 6991b7b

Browse files
authored
fix: sort css by sourceorder, esm import comes first (#12778)
* fix(core): correct dependency sorting by source_order Ensure dependencies with None source_order are placed after Some, preserving their relative order. * test: add test case for css source order with mixed import and require
1 parent 4c5b962 commit 6991b7b

File tree

6 files changed

+21
-2
lines changed

6 files changed

+21
-2
lines changed

crates/rspack_core/src/compilation/build_chunk_graph/code_splitter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2046,7 +2046,7 @@ Or do you want to use the entrypoints '{name}' and '{runtime}' independently on
20462046
})
20472047
.filter(|dep| !matches!(dep.as_module_dependency().map(|d| d.weak()), Some(true)))
20482048
.collect::<Vec<_>>();
2049-
deps.sort_by_key(|a| a.source_order());
2049+
deps.sort_by_key(|a| (a.source_order().is_none(), a.source_order()));
20502050

20512051
for dep in deps {
20522052
let dep_id = dep.id();
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
.dependency3::before { content: "dependency3";}.dependency::before { content: "dependency";}.dependency2::before { content: "dependency2";}
1+
.dependency::before { content: "dependency";}.dependency2::before { content: "dependency2";}.dependency3::before { content: "dependency3";}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import "./style1.css"; // red
2+
require("./style2.css"); // blue
3+
4+
it("should place style2 before style1", () => {
5+
const style = getComputedStyle(document.body);
6+
// should be blue
7+
expect(style.getPropertyValue("color")).toBe("rgb(0, 0, 255)");
8+
});
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/** @type {import("@rspack/core").Configuration} */
2+
module.exports = {
3+
mode: "development",
4+
entry: "./index.js",
5+
experiments: {
6+
css: true
7+
},
8+
target: "web"
9+
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
body { color: red; }
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
body { color: blue; }

0 commit comments

Comments
 (0)