Skip to content

Commit 8dca426

Browse files
fix: tree shaking transitive bailout (#4017)
* init * chore: πŸ€– update * chore: πŸ€– remove pnpmlock * chore: πŸ€– update * chore: πŸ€– update * chore: πŸ€– remove dbg * chore: πŸ€– update
1 parent c6a53ea commit 8dca426

File tree

7 files changed

+73
-1
lines changed

7 files changed

+73
-1
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export const a = 3;
2+
export const b = 3;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
const res = require("./lib.js")
2+
exports.test = function () {
3+
res
4+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
(self['webpackChunkwebpack'] = self['webpackChunkwebpack'] || []).push([["main"], {
2+
"./a.js": function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3+
'use strict';
4+
__webpack_require__.r(__webpack_exports__);
5+
__webpack_require__.d(__webpack_exports__, {
6+
'a': function() { return a; },
7+
'b': function() { return b; }
8+
});
9+
const a = 3;
10+
const b = 3;
11+
},
12+
"./answer.js": function (__unused_webpack_module, exports, __webpack_require__) {
13+
const res = __webpack_require__(/* ./lib.js */"./lib.js");
14+
exports.test = function() {
15+
res;
16+
};
17+
},
18+
"./index.js": function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
19+
'use strict';
20+
__webpack_require__.r(__webpack_exports__);
21+
/* harmony import */var _answer__WEBPACK_IMPORTED_MODULE_0_ = __webpack_require__(/* ./answer */"./answer.js");
22+
23+
_answer__WEBPACK_IMPORTED_MODULE_0_.test;
24+
},
25+
"./lib.js": function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
26+
'use strict';
27+
__webpack_require__.r(__webpack_exports__);
28+
/* harmony import */var _a_js__WEBPACK_IMPORTED_MODULE_0_ = __webpack_require__(/* ./a.js */"./a.js");
29+
__webpack_require__.es(_a_js__WEBPACK_IMPORTED_MODULE_0_, __webpack_exports__);
30+
31+
},
32+
33+
},function(__webpack_require__) {
34+
var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId) }
35+
var __webpack_exports__ = (__webpack_exec__("./index.js"));
36+
37+
}
38+
]);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import { test } from "./answer";
2+
test
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './a.js'
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"optimization": {
3+
"sideEffects": "true"
4+
},
5+
"builtins": {
6+
"treeShaking": "true",
7+
"define": {
8+
"process.env.NODE_ENV": "'development'"
9+
}
10+
}
11+
}

β€Žcrates/rspack_core/src/tree_shaking/optimizer.rsβ€Ž

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,6 @@ impl<'a> CodeSizeOptimizer<'a> {
171171
let mut traced_tuple = HashMap::default();
172172
// Marking used symbol and all reachable export symbol from the used symbol for each module
173173

174-
// dbg!(&used_symbol_ref);
175174
let mut visited_symbol_ref: HashSet<SymbolRefWithMemberChain> = HashSet::default();
176175

177176
self.mark_used_symbol_with(
@@ -1279,6 +1278,21 @@ impl<'a> CodeSizeOptimizer<'a> {
12791278
// by default webpack will not mark the `export *` as used in entry module
12801279
if matches!(entry_type, EntryLikeType::Bailout) {
12811280
let inherit_export_symbols = get_inherit_export_symbol_ref(entry_module_result);
1281+
if !inherit_export_symbols.is_empty() {
1282+
// transitive bailout
1283+
inherit_export_symbols.iter().for_each(|item| {
1284+
q.push_back((
1285+
SymbolRef::Star(StarSymbol::new(
1286+
item.src(),
1287+
Default::default(),
1288+
entry_identifier,
1289+
StarSymbolKind::ReExportAll,
1290+
DependencyId::default(),
1291+
)),
1292+
vec![],
1293+
));
1294+
});
1295+
}
12821296
q.extend(
12831297
inherit_export_symbols
12841298
.into_iter()

0 commit comments

Comments
Β (0)