Skip to content

Commit 1b7ae17

Browse files
authored
Merge pull request webpack#4219 from webpack/test/move-to-parent
updated move to parent example and add test case
2 parents 4fff1f5 + c49bfdf commit 1b7ae17

11 files changed

Lines changed: 291 additions & 150 deletions

File tree

examples/move-to-parent/README.md

Lines changed: 222 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@ With `minChunks = 3`:
2323
* chunk: c
2424
* chunk: c, d
2525

26-
It's also possible to provide a function instead of a number for `minChunks`. The function is called for each module to decide if the module should be moved or not (see pageC and pageD).
26+
It's also possible to provide a function instead of a number for `minChunks`. The function is called for each module to decide if the module should be moved or not (see pageC and pageD):
27+
28+
* pageC: a, c, d
29+
* chunk: b
2730

2831
# page.js
2932

@@ -39,167 +42,256 @@ require(["./a", "./b", "./c", "./d"]);
3942
``` javascript
4043
var path = require("path");
4144
var CommonsChunkPlugin = require("../../lib/optimize/CommonsChunkPlugin");
42-
module.exports = {
45+
var outputOptions = {
46+
path: path.join(__dirname, "js"),
47+
filename: "[name].bundle.js",
48+
chunkFilename: "[id].chunk.js"
49+
};
50+
module.exports = [{
51+
name: "page",
4352
entry: {
44-
pageA: "./page?A",
45-
pageB: "./page?B",
46-
pageC: "./page?C",
47-
pageD: "./page?D"
53+
page: "./page"
4854
},
49-
output: {
50-
path: path.join(__dirname, "js"),
51-
filename: "[name].bundle.js",
52-
chunkFilename: "[id].chunk.js"
55+
output: outputOptions
56+
}, {
57+
name: "pageA",
58+
entry: {
59+
pageA: "./page"
5360
},
61+
output: outputOptions,
5462
plugins: [
55-
// check for common modules in children of pageA and move them to the parent
63+
//check for common modules in children of pageA and move them to the parent
5664
new CommonsChunkPlugin({
5765
name: "pageA",
5866
children: true
5967
}),
60-
68+
]
69+
}, {
70+
name: "pageB",
71+
entry: {
72+
pageB: "./page"
73+
},
74+
output: outputOptions,
75+
plugins: [
6176
// the same for pageB but move them if at least 3 children share the module
6277
new CommonsChunkPlugin({
6378
name: "pageB",
6479
children: true,
6580
minChunks: 3
6681
}),
67-
82+
]
83+
}, {
84+
name: "pageC",
85+
entry: {
86+
pageC: "./page"
87+
},
88+
output: outputOptions,
89+
plugins: [
6890
// the same for pageC and pageD but with a custom logic for moving
6991
new CommonsChunkPlugin({
70-
names: ["pageC", "pageD"],
92+
name: "pageC",
7193
children: true,
7294
minChunks: function(module, count) {
7395
// move only module "b"
74-
return /b\.js$/.test(module.identifier());
96+
return !/b\.js/.test(module.identifier());
7597
}
7698
})
7799
]
78-
}
100+
}];
79101
```
80102

81103
# Info
82104

83105
## Uncompressed
84106

85107
```
86-
Hash: cc02f492e44f68d8c237
87-
Version: webpack 2.2.0-rc.2
88-
Asset Size Chunks Chunk Names
89-
0.chunk.js 779 bytes 0, 1, 2, 3 [emitted]
90-
1.chunk.js 589 bytes 1, 2, 3 [emitted]
91-
2.chunk.js 399 bytes 2, 3 [emitted]
92-
3.chunk.js 209 bytes 3 [emitted]
93-
pageD.bundle.js 6.44 kB 4 [emitted] pageD
94-
pageC.bundle.js 6.44 kB 5 [emitted] pageC
95-
pageB.bundle.js 6.44 kB 6 [emitted] pageB
96-
pageA.bundle.js 6.38 kB 7 [emitted] pageA
97-
Entrypoint pageA = pageA.bundle.js
98-
Entrypoint pageB = pageB.bundle.js
99-
Entrypoint pageC = pageC.bundle.js
100-
Entrypoint pageD = pageD.bundle.js
101-
chunk {0} 0.chunk.js 84 bytes {4} {5} {6} {7} [rendered]
102-
> duplicate [4] ./page.js?A 4:0-37
103-
> duplicate [5] ./page.js?B 4:0-37
104-
> duplicate [6] ./page.js?C 4:0-37
105-
> duplicate [7] ./page.js?D 4:0-37
106-
[0] ./a.js 21 bytes {0} {1} {2} {3} [built]
107-
[1] ./b.js 21 bytes {0} {1} {2} [built]
108-
[2] ./c.js 21 bytes {0} {1} [built]
109-
[3] ./d.js 21 bytes {0} [built]
110-
chunk {1} 1.chunk.js 63 bytes {4} {5} {6} {7} [rendered]
111-
> duplicate [4] ./page.js?A 3:0-30
112-
> duplicate [5] ./page.js?B 3:0-30
113-
> duplicate [6] ./page.js?C 3:0-30
114-
> duplicate [7] ./page.js?D 3:0-30
115-
[0] ./a.js 21 bytes {0} {1} {2} {3} [built]
116-
[1] ./b.js 21 bytes {0} {1} {2} [built]
117-
[2] ./c.js 21 bytes {0} {1} [built]
118-
chunk {2} 2.chunk.js 42 bytes {4} {5} {6} {7} [rendered]
119-
> duplicate [4] ./page.js?A 2:0-23
120-
> duplicate [5] ./page.js?B 2:0-23
121-
> duplicate [6] ./page.js?C 2:0-23
122-
> duplicate [7] ./page.js?D 2:0-23
123-
[0] ./a.js 21 bytes {0} {1} {2} {3} [built]
124-
[1] ./b.js 21 bytes {0} {1} {2} [built]
125-
chunk {3} 3.chunk.js 21 bytes {4} {5} {6} {7} [rendered]
126-
> duplicate [4] ./page.js?A 1:0-16
127-
> duplicate [5] ./page.js?B 1:0-16
128-
> duplicate [6] ./page.js?C 1:0-16
129-
> duplicate [7] ./page.js?D 1:0-16
130-
[0] ./a.js 21 bytes {0} {1} {2} {3} [built]
131-
chunk {4} pageD.bundle.js (pageD) 118 bytes [entry] [rendered]
132-
> pageD [7] ./page.js?D
133-
[7] ./page.js?D 118 bytes {4} [built]
134-
chunk {5} pageC.bundle.js (pageC) 118 bytes [entry] [rendered]
135-
> pageC [6] ./page.js?C
136-
[6] ./page.js?C 118 bytes {5} [built]
137-
chunk {6} pageB.bundle.js (pageB) 118 bytes [entry] [rendered]
138-
> pageB [5] ./page.js?B
139-
[5] ./page.js?B 118 bytes {6} [built]
140-
chunk {7} pageA.bundle.js (pageA) 118 bytes [entry] [rendered]
141-
> pageA [4] ./page.js?A
142-
[4] ./page.js?A 118 bytes {7} [built]
108+
Hash: 92649f18837fbb021129ea807ff9294488030e7d297a4b5e23527060dcf866a6fc0a7d0ef06171d3
109+
Version: webpack 2.2.1
110+
Child page:
111+
Hash: 92649f18837fbb021129
112+
Asset Size Chunks Chunk Names
113+
0.chunk.js 787 bytes 0, 1, 2, 3 [emitted]
114+
1.chunk.js 595 bytes 1, 2, 3 [emitted]
115+
2.chunk.js 403 bytes 2, 3 [emitted]
116+
3.chunk.js 211 bytes 3 [emitted]
117+
page.bundle.js 6.37 kB 4 [emitted] page
118+
Entrypoint page = page.bundle.js
119+
chunk {0} 0.chunk.js 84 bytes {4} [rendered]
120+
> [4] ./page.js 4:0-37
121+
[0] ./a.js 21 bytes {0} {1} {2} {3} [built]
122+
[1] ./b.js 21 bytes {0} {1} {2} [built]
123+
[2] ./c.js 21 bytes {0} {1} [built]
124+
[3] ./d.js 21 bytes {0} [built]
125+
chunk {1} 1.chunk.js 63 bytes {4} [rendered]
126+
> [4] ./page.js 3:0-30
127+
[0] ./a.js 21 bytes {0} {1} {2} {3} [built]
128+
[1] ./b.js 21 bytes {0} {1} {2} [built]
129+
[2] ./c.js 21 bytes {0} {1} [built]
130+
chunk {2} 2.chunk.js 42 bytes {4} [rendered]
131+
> [4] ./page.js 2:0-23
132+
[0] ./a.js 21 bytes {0} {1} {2} {3} [built]
133+
[1] ./b.js 21 bytes {0} {1} {2} [built]
134+
chunk {3} 3.chunk.js 21 bytes {4} [rendered]
135+
> [4] ./page.js 1:0-16
136+
[0] ./a.js 21 bytes {0} {1} {2} {3} [built]
137+
chunk {4} page.bundle.js (page) 118 bytes [entry] [rendered]
138+
> page [4] ./page.js
139+
[4] ./page.js 118 bytes {4} [built]
140+
Child pageA:
141+
Hash: ea807ff9294488030e7d
142+
Asset Size Chunks Chunk Names
143+
0.chunk.js 604 bytes 0, 1, 2 [emitted]
144+
1.chunk.js 412 bytes 1, 2 [emitted]
145+
2.chunk.js 220 bytes 2 [emitted]
146+
pageA.bundle.js 6.57 kB 3 [emitted] pageA
147+
Entrypoint pageA = pageA.bundle.js
148+
chunk {0} 0.chunk.js 63 bytes {3} [rendered]
149+
> [4] ./page.js 4:0-37
150+
[1] ./b.js 21 bytes {0} {1} {2} [built]
151+
[2] ./c.js 21 bytes {0} {1} [built]
152+
[3] ./d.js 21 bytes {0} [built]
153+
chunk {1} 1.chunk.js 42 bytes {3} [rendered]
154+
> [4] ./page.js 3:0-30
155+
[1] ./b.js 21 bytes {0} {1} {2} [built]
156+
[2] ./c.js 21 bytes {0} {1} [built]
157+
chunk {2} 2.chunk.js 21 bytes {3} [rendered]
158+
> [4] ./page.js 2:0-23
159+
[1] ./b.js 21 bytes {0} {1} {2} [built]
160+
chunk {3} pageA.bundle.js (pageA) 139 bytes [entry] [rendered]
161+
> pageA [4] ./page.js
162+
[0] ./a.js 21 bytes {3} [built]
163+
[4] ./page.js 118 bytes {3} [built]
164+
Child pageB:
165+
Hash: 297a4b5e23527060dcf8
166+
Asset Size Chunks Chunk Names
167+
0.chunk.js 421 bytes 0, 1 [emitted]
168+
1.chunk.js 214 bytes 1 [emitted]
169+
pageB.bundle.js 6.73 kB 2 [emitted] pageB
170+
Entrypoint pageB = pageB.bundle.js
171+
chunk {0} 0.chunk.js 42 bytes {2} [rendered]
172+
> [4] ./page.js 4:0-37
173+
[2] ./c.js 21 bytes {0} {1} [built]
174+
[3] ./d.js 21 bytes {0} [built]
175+
chunk {1} 1.chunk.js 21 bytes {2} [rendered]
176+
> [4] ./page.js 3:0-30
177+
[2] ./c.js 21 bytes {0} {1} [built]
178+
chunk {2} pageB.bundle.js (pageB) 160 bytes [entry] [rendered]
179+
> pageB [4] ./page.js
180+
[0] ./a.js 21 bytes {2} [built]
181+
[1] ./b.js 21 bytes {2} [built]
182+
[4] ./page.js 118 bytes {2} [built]
183+
Child pageC:
184+
Hash: 66a6fc0a7d0ef06171d3
185+
Asset Size Chunks Chunk Names
186+
0.chunk.js 220 bytes 0 [emitted]
187+
pageC.bundle.js 6.96 kB 1 [emitted] pageC
188+
Entrypoint pageC = pageC.bundle.js
189+
chunk {0} 0.chunk.js 21 bytes {1} [rendered]
190+
> duplicate [4] ./page.js 2:0-23
191+
> duplicate [4] ./page.js 3:0-30
192+
> duplicate [4] ./page.js 4:0-37
193+
[1] ./b.js 21 bytes {0} [built]
194+
chunk {1} pageC.bundle.js (pageC) 181 bytes [entry] [rendered]
195+
> pageC [4] ./page.js
196+
[0] ./a.js 21 bytes {1} [built]
197+
[2] ./c.js 21 bytes {1} [built]
198+
[3] ./d.js 21 bytes {1} [built]
199+
[4] ./page.js 118 bytes {1} [built]
143200
```
144201

145202
## Minimized (uglify-js, no zip)
146203

147204
```
148-
Hash: cc02f492e44f68d8c237
149-
Version: webpack 2.2.0-rc.2
150-
Asset Size Chunks Chunk Names
151-
0.chunk.js 142 bytes 0, 1, 2, 3 [emitted]
152-
1.chunk.js 111 bytes 1, 2, 3 [emitted]
153-
2.chunk.js 80 bytes 2, 3 [emitted]
154-
3.chunk.js 49 bytes 3 [emitted]
155-
pageD.bundle.js 1.57 kB 4 [emitted] pageD
156-
pageC.bundle.js 1.57 kB 5 [emitted] pageC
157-
pageB.bundle.js 1.57 kB 6 [emitted] pageB
158-
pageA.bundle.js 1.57 kB 7 [emitted] pageA
159-
Entrypoint pageA = pageA.bundle.js
160-
Entrypoint pageB = pageB.bundle.js
161-
Entrypoint pageC = pageC.bundle.js
162-
Entrypoint pageD = pageD.bundle.js
163-
chunk {0} 0.chunk.js 84 bytes {4} {5} {6} {7} [rendered]
164-
> duplicate [4] ./page.js?A 4:0-37
165-
> duplicate [5] ./page.js?B 4:0-37
166-
> duplicate [6] ./page.js?C 4:0-37
167-
> duplicate [7] ./page.js?D 4:0-37
168-
[0] ./a.js 21 bytes {0} {1} {2} {3} [built]
169-
[1] ./b.js 21 bytes {0} {1} {2} [built]
170-
[2] ./c.js 21 bytes {0} {1} [built]
171-
[3] ./d.js 21 bytes {0} [built]
172-
chunk {1} 1.chunk.js 63 bytes {4} {5} {6} {7} [rendered]
173-
> duplicate [4] ./page.js?A 3:0-30
174-
> duplicate [5] ./page.js?B 3:0-30
175-
> duplicate [6] ./page.js?C 3:0-30
176-
> duplicate [7] ./page.js?D 3:0-30
177-
[0] ./a.js 21 bytes {0} {1} {2} {3} [built]
178-
[1] ./b.js 21 bytes {0} {1} {2} [built]
179-
[2] ./c.js 21 bytes {0} {1} [built]
180-
chunk {2} 2.chunk.js 42 bytes {4} {5} {6} {7} [rendered]
181-
> duplicate [4] ./page.js?A 2:0-23
182-
> duplicate [5] ./page.js?B 2:0-23
183-
> duplicate [6] ./page.js?C 2:0-23
184-
> duplicate [7] ./page.js?D 2:0-23
185-
[0] ./a.js 21 bytes {0} {1} {2} {3} [built]
186-
[1] ./b.js 21 bytes {0} {1} {2} [built]
187-
chunk {3} 3.chunk.js 21 bytes {4} {5} {6} {7} [rendered]
188-
> duplicate [4] ./page.js?A 1:0-16
189-
> duplicate [5] ./page.js?B 1:0-16
190-
> duplicate [6] ./page.js?C 1:0-16
191-
> duplicate [7] ./page.js?D 1:0-16
192-
[0] ./a.js 21 bytes {0} {1} {2} {3} [built]
193-
chunk {4} pageD.bundle.js (pageD) 118 bytes [entry] [rendered]
194-
> pageD [7] ./page.js?D
195-
[7] ./page.js?D 118 bytes {4} [built]
196-
chunk {5} pageC.bundle.js (pageC) 118 bytes [entry] [rendered]
197-
> pageC [6] ./page.js?C
198-
[6] ./page.js?C 118 bytes {5} [built]
199-
chunk {6} pageB.bundle.js (pageB) 118 bytes [entry] [rendered]
200-
> pageB [5] ./page.js?B
201-
[5] ./page.js?B 118 bytes {6} [built]
202-
chunk {7} pageA.bundle.js (pageA) 118 bytes [entry] [rendered]
203-
> pageA [4] ./page.js?A
204-
[4] ./page.js?A 118 bytes {7} [built]
205+
Hash: 92649f18837fbb021129ea807ff9294488030e7d297a4b5e23527060dcf866a6fc0a7d0ef06171d3
206+
Version: webpack 2.2.1
207+
Child page:
208+
Hash: 92649f18837fbb021129
209+
Asset Size Chunks Chunk Names
210+
0.chunk.js 142 bytes 0, 1, 2, 3 [emitted]
211+
1.chunk.js 111 bytes 1, 2, 3 [emitted]
212+
2.chunk.js 80 bytes 2, 3 [emitted]
213+
3.chunk.js 49 bytes 3 [emitted]
214+
page.bundle.js 1.57 kB 4 [emitted] page
215+
Entrypoint page = page.bundle.js
216+
chunk {0} 0.chunk.js 84 bytes {4} [rendered]
217+
> [4] ./page.js 4:0-37
218+
[0] ./a.js 21 bytes {0} {1} {2} {3} [built]
219+
[1] ./b.js 21 bytes {0} {1} {2} [built]
220+
[2] ./c.js 21 bytes {0} {1} [built]
221+
[3] ./d.js 21 bytes {0} [built]
222+
chunk {1} 1.chunk.js 63 bytes {4} [rendered]
223+
> [4] ./page.js 3:0-30
224+
[0] ./a.js 21 bytes {0} {1} {2} {3} [built]
225+
[1] ./b.js 21 bytes {0} {1} {2} [built]
226+
[2] ./c.js 21 bytes {0} {1} [built]
227+
chunk {2} 2.chunk.js 42 bytes {4} [rendered]
228+
> [4] ./page.js 2:0-23
229+
[0] ./a.js 21 bytes {0} {1} {2} {3} [built]
230+
[1] ./b.js 21 bytes {0} {1} {2} [built]
231+
chunk {3} 3.chunk.js 21 bytes {4} [rendered]
232+
> [4] ./page.js 1:0-16
233+
[0] ./a.js 21 bytes {0} {1} {2} {3} [built]
234+
chunk {4} page.bundle.js (page) 118 bytes [entry] [rendered]
235+
> page [4] ./page.js
236+
[4] ./page.js 118 bytes {4} [built]
237+
Child pageA:
238+
Hash: ea807ff9294488030e7d
239+
Asset Size Chunks Chunk Names
240+
0.chunk.js 112 bytes 0, 1, 2 [emitted]
241+
1.chunk.js 81 bytes 1, 2 [emitted]
242+
2.chunk.js 50 bytes 2 [emitted]
243+
pageA.bundle.js 1.61 kB 3 [emitted] pageA
244+
Entrypoint pageA = pageA.bundle.js
245+
chunk {0} 0.chunk.js 63 bytes {3} [rendered]
246+
> [4] ./page.js 4:0-37
247+
[1] ./b.js 21 bytes {0} {1} {2} [built]
248+
[2] ./c.js 21 bytes {0} {1} [built]
249+
[3] ./d.js 21 bytes {0} [built]
250+
chunk {1} 1.chunk.js 42 bytes {3} [rendered]
251+
> [4] ./page.js 3:0-30
252+
[1] ./b.js 21 bytes {0} {1} {2} [built]
253+
[2] ./c.js 21 bytes {0} {1} [built]
254+
chunk {2} 2.chunk.js 21 bytes {3} [rendered]
255+
> [4] ./page.js 2:0-23
256+
[1] ./b.js 21 bytes {0} {1} {2} [built]
257+
chunk {3} pageA.bundle.js (pageA) 139 bytes [entry] [rendered]
258+
> pageA [4] ./page.js
259+
[0] ./a.js 21 bytes {3} [built]
260+
[4] ./page.js 118 bytes {3} [built]
261+
Child pageB:
262+
Hash: 297a4b5e23527060dcf8
263+
Asset Size Chunks Chunk Names
264+
0.chunk.js 82 bytes 0, 1 [emitted]
265+
1.chunk.js 51 bytes 1 [emitted]
266+
pageB.bundle.js 1.65 kB 2 [emitted] pageB
267+
Entrypoint pageB = pageB.bundle.js
268+
chunk {0} 0.chunk.js 42 bytes {2} [rendered]
269+
> [4] ./page.js 4:0-37
270+
[2] ./c.js 21 bytes {0} {1} [built]
271+
[3] ./d.js 21 bytes {0} [built]
272+
chunk {1} 1.chunk.js 21 bytes {2} [rendered]
273+
> [4] ./page.js 3:0-30
274+
[2] ./c.js 21 bytes {0} {1} [built]
275+
chunk {2} pageB.bundle.js (pageB) 160 bytes [entry] [rendered]
276+
> pageB [4] ./page.js
277+
[0] ./a.js 21 bytes {2} [built]
278+
[1] ./b.js 21 bytes {2} [built]
279+
[4] ./page.js 118 bytes {2} [built]
280+
Child pageC:
281+
Hash: 66a6fc0a7d0ef06171d3
282+
Asset Size Chunks Chunk Names
283+
0.chunk.js 50 bytes 0 [emitted]
284+
pageC.bundle.js 1.66 kB 1 [emitted] pageC
285+
Entrypoint pageC = pageC.bundle.js
286+
chunk {0} 0.chunk.js 21 bytes {1} [rendered]
287+
> duplicate [4] ./page.js 2:0-23
288+
> duplicate [4] ./page.js 3:0-30
289+
> duplicate [4] ./page.js 4:0-37
290+
[1] ./b.js 21 bytes {0} [built]
291+
chunk {1} pageC.bundle.js (pageC) 181 bytes [entry] [rendered]
292+
> pageC [4] ./page.js
293+
[0] ./a.js 21 bytes {1} [built]
294+
[2] ./c.js 21 bytes {1} [built]
295+
[3] ./d.js 21 bytes {1} [built]
296+
[4] ./page.js 118 bytes {1} [built]
205297
```

0 commit comments

Comments
 (0)