Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions crates/rspack_core/src/chunk_graph/chunk_graph_chunk.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use indexmap::IndexSet;
use itertools::Itertools;
use rspack_cacheable::cacheable;
use rspack_collections::{DatabaseItem, IdentifierLinkedMap, IdentifierMap, IdentifierSet};
use rspack_util::fx_hash::FxIndexSet;
use rustc_hash::{FxHashMap as HashMap, FxHashSet};
use serde::{Serialize, Serializer};

Expand Down Expand Up @@ -916,8 +917,16 @@ impl ChunkGraph {

// true, if a is always a parent of b
let is_available_chunk = |a: &Chunk, b: &Chunk| {
let mut queue = b.groups().clone().into_iter().collect::<Vec<_>>();
while let Some(chunk_group_ukey) = queue.pop() {
let mut queue = b
.groups()
.clone()
.into_iter()
.collect::<FxIndexSet<ChunkGroupUkey>>();
let mut index: usize = 0;
while index < queue.len() {
let chunk_group_ukey = queue[index];
index += 1;

if a.is_in_group(&chunk_group_ukey) {
continue;
}
Expand All @@ -926,7 +935,7 @@ impl ChunkGraph {
return false;
}
for parent in chunk_group.parents_iterable() {
queue.push(*parent);
queue.insert(*parent);
}
}
true
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
asset main.js xx KiB [emitted] (name: main)
chunk (runtime: main) main.js (main) xx bytes (javascript) xx KiB (runtime) <{889}> >{889}< [entry] [rendered]
./a.js xx bytes [dependent] [built] [code generated]
./b.js xx bytes [dependent] [built] [code generated]
./index.js xx bytes [built] [code generated]
./main.js xx bytes [dependent] [built] [code generated]
Rspack x.x.x compiled successfully in X s
5 changes: 5 additions & 0 deletions tests/rspack-test/statsOutputCases/issue-12572/a.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export function a() {
import('./b').then(({ b }) => {
b();
});
}
3 changes: 3 additions & 0 deletions tests/rspack-test/statsOutputCases/issue-12572/b.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export const b = () => {
import('./main');
}
9 changes: 9 additions & 0 deletions tests/rspack-test/statsOutputCases/issue-12572/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import('./main');

import('./a').then(({ a }) => {
a();
});

import('./b').then(({ b }) => {
b();
});
7 changes: 7 additions & 0 deletions tests/rspack-test/statsOutputCases/issue-12572/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import('./a').then(({ a }) => {
a();
});

import('./b').then(({ b }) => {
b();
});
19 changes: 19 additions & 0 deletions tests/rspack-test/statsOutputCases/issue-12572/rspack.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
var webpack = require("@rspack/core");
/** @type {import("@rspack/core").Configuration} */
module.exports = {
mode: "production",
entry: "./index",
plugins: [
new webpack.optimize.LimitChunkCountPlugin({
maxChunks: 1
})
],
stats: {
assets: true,
chunkModules: true,
dependentModules: true,
chunkRelations: true,
modules: false,
chunks: true
}
};

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,47 +1,96 @@
1 chunks:
asset bundle1.js xx KiB [emitted] (name: main)
chunk (runtime: main) bundle1.js (main) xx bytes (javascript) xx KiB (runtime) <{889}> >{889}< [entry] [rendered]
dependent modules xx bytes [dependent] 4 modules
./index.js xx bytes [built] [code generated]
1 chunks (Rspack x.x.x) compiled successfully in X s
./.|sync xx bytes [dependent] [built] [code generated]
./a.js xx bytes [dependent] [built] [code generated]
./c.js xx bytes [dependent] [built] [code generated]
./d.js xx bytes [dependent] [built] [code generated]
./e.js xx bytes [dependent] [built] [code generated]
./index.js xx bytes [built] [code generated] [1 warning]

WARNING in ./index.js 2:1-17
⚠ Critical dependency: the request of a dependency is an expression
╭─[2:8]
1 │ require.ensure(["./a"], function() {});
2 │ require(["./b"]);
· ───────
3 │ import(/* webpackChunkName: "c" */ "./c");
╰────

1 chunks (Rspack x.x.x) compiled with 1 warning in X s

2 chunks:
asset bundle2.js xx KiB [emitted] (name: main)
asset 907.bundle2.js xx bytes [emitted] (name: c)
chunk (runtime: main) bundle2.js (main) xx bytes (javascript) xx KiB (runtime) >{907}< [entry] [rendered]
dependent modules xx bytes [dependent] 1 module
./index.js xx bytes [built] [code generated]
./.|sync xx bytes [dependent] [built] [code generated]
./index.js xx bytes [built] [code generated] [1 warning]
chunk (runtime: main) 907.bundle2.js (c) xx bytes <{889}> <{907}> >{907}< [rendered]
dependent modules xx bytes [dependent] 2 modules
dependent modules xx bytes [dependent]
./d.js xx bytes [dependent] [built] [code generated]
./e.js xx bytes [dependent] [built] [code generated]
./a.js xx bytes [built] [code generated]
./c.js xx bytes [built] [code generated]
2 chunks (Rspack x.x.x) compiled successfully in X s

WARNING in ./index.js 2:1-17
⚠ Critical dependency: the request of a dependency is an expression
╭─[2:8]
1 │ require.ensure(["./a"], function() {});
2 │ require(["./b"]);
· ───────
3 │ import(/* webpackChunkName: "c" */ "./c");
╰────

2 chunks (Rspack x.x.x) compiled with 1 warning in X s

3 chunks:
asset bundle3.js xx KiB [emitted] (name: main)
asset 907.bundle3.js xx bytes [emitted] (name: c)
asset 719.bundle3.js xx bytes [emitted]
chunk (runtime: main) 719.bundle3.js xx bytes <{907}> [rendered]
asset 874.bundle3.js xx bytes [emitted]
chunk (runtime: main) 874.bundle3.js xx bytes <{889}> <{907}> [rendered]
./a.js xx bytes [built] [code generated]
./d.js xx bytes [built] [code generated]
./e.js xx bytes [built] [code generated]
chunk (runtime: main) bundle3.js (main) xx bytes (javascript) xx KiB (runtime) >{907}< [entry] [rendered]
dependent modules xx bytes [dependent] 1 module
./index.js xx bytes [built] [code generated]
chunk (runtime: main) 907.bundle3.js (c) xx bytes <{889}> >{719}< [rendered]
chunk (runtime: main) bundle3.js (main) xx bytes (javascript) xx KiB (runtime) >{874}< >{907}< [entry] [rendered]
./.|sync xx bytes [dependent] [built] [code generated]
./index.js xx bytes [built] [code generated] [1 warning]
chunk (runtime: main) 907.bundle3.js (c) xx bytes <{889}> >{874}< [rendered]
./c.js xx bytes [built] [code generated]
3 chunks (Rspack x.x.x) compiled successfully in X s

WARNING in ./index.js 2:1-17
⚠ Critical dependency: the request of a dependency is an expression
╭─[2:8]
1 │ require.ensure(["./a"], function() {});
2 │ require(["./b"]);
· ───────
3 │ import(/* webpackChunkName: "c" */ "./c");
╰────

3 chunks (Rspack x.x.x) compiled with 1 warning in X s

4 chunks:
asset bundle4.js xx KiB [emitted] (name: main)
asset 907.bundle4.js xx bytes [emitted] (name: c)
asset 266.bundle4.js xx bytes [emitted]
asset 327.bundle4.js xx bytes [emitted]
chunk (runtime: main) 266.bundle4.js xx bytes <{907}> [rendered]
asset 719.bundle4.js xx bytes [emitted]
asset 267.bundle4.js xx bytes [emitted]
chunk (runtime: main) 267.bundle4.js xx bytes <{889}> [rendered]
./a.js xx bytes [built] [code generated]
chunk (runtime: main) 719.bundle4.js xx bytes <{907}> [rendered]
./d.js xx bytes [built] [code generated]
chunk (runtime: main) 327.bundle4.js xx bytes <{907}> [rendered]
./e.js xx bytes [built] [code generated]
chunk (runtime: main) bundle4.js (main) xx bytes (javascript) xx KiB (runtime) >{907}< [entry] [rendered]
dependent modules xx bytes [dependent] 1 module
./index.js xx bytes [built] [code generated]
chunk (runtime: main) 907.bundle4.js (c) xx bytes <{889}> >{266}< >{327}< [rendered]
chunk (runtime: main) bundle4.js (main) xx bytes (javascript) xx KiB (runtime) >{267}< >{907}< [entry] [rendered]
./.|sync xx bytes [dependent] [built] [code generated]
./index.js xx bytes [built] [code generated] [1 warning]
chunk (runtime: main) 907.bundle4.js (c) xx bytes <{889}> >{719}< [rendered]
./c.js xx bytes [built] [code generated]
4 chunks (Rspack x.x.x) compiled successfully in X s

WARNING in ./index.js 2:1-17
⚠ Critical dependency: the request of a dependency is an expression
╭─[2:8]
1 │ require.ensure(["./a"], function() {});
2 │ require(["./b"]);
· ───────
3 │ import(/* webpackChunkName: "c" */ "./c");
╰────

4 chunks (Rspack x.x.x) compiled with 1 warning in X s
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
// require.ensure(["./a"], function() {});
// require(["./b"]);
require("./b");
require.ensure(["./a"], function() {});
require(["./b"]);
import(/* webpackChunkName: "c" */ "./c");
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
// TODO: In the future, when rspack supports `require.ensure`, this test case needs to be changed.

var webpack = require("@rspack/core");
/** @type {import("@rspack/core").Configuration[]} */
module.exports = [1, 2, 3, 4].map(n => ({
Expand All @@ -17,7 +15,7 @@ module.exports = [1, 2, 3, 4].map(n => ({
stats: {
assets: true,
chunkModules: true,
// dependentModules: true,
dependentModules: true,
chunkRelations: true,
modules: false,
chunks: true
Expand Down
Loading