Code Splitting is one of the attractive features of webpack. This feature allows you to split your code into different packages, split the same code or library into a separate file. It can be used to separate smaller packages and control resource load priority which, if used properly, can have a big impact on a website’s load time.
1. Prepare the file
Add lodash library to create a common library, the files need to be called
1 2 | npm install lodash |
Code file webpack.config.js
1 2 3 4 5 6 7 8 9 10 11 12 13 | <span class="token keyword">const</span> path <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'path'</span> <span class="token punctuation">)</span> module <span class="token punctuation">.</span> exports <span class="token operator">=</span> <span class="token punctuation">{</span> entry <span class="token operator">:</span> <span class="token punctuation">{</span> home <span class="token operator">:</span> <span class="token string">'./src/home.js'</span> <span class="token punctuation">,</span> about <span class="token operator">:</span> <span class="token string">'./src/about.js'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> output <span class="token operator">:</span> <span class="token punctuation">{</span> filename <span class="token operator">:</span> <span class="token string">'[name].js'</span> <span class="token punctuation">,</span> path <span class="token operator">:</span> path <span class="token punctuation">.</span> <span class="token function">resolve</span> <span class="token punctuation">(</span> __dirname <span class="token punctuation">,</span> <span class="token string">'dist'</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Code file src/home.js
1 2 3 4 | <span class="token keyword">import</span> _ <span class="token keyword">from</span> <span class="token string">'lodash'</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'home.js'</span> <span class="token punctuation">)</span> |
Code file about.js
1 2 3 4 | <span class="token keyword">import</span> _ <span class="token keyword">from</span> <span class="token string">'lodash'</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'about.js'</span> <span class="token punctuation">)</span> |
We see that both the file home.js
and about.js
above call the lodash library to create duplication.
2. Webpack Code Splitting
With the above setup and configuration without Code Splitting when we run npm run dev
, the parameters are as follows:
1 2 3 4 5 6 7 8 | ... Asset Size Chunks Chunk Names about.js 72 KiB 0 [emitted] about home.js 72 KiB 1 [emitted] home Entrypoint home = home.js Entrypoint about = about.js ... |
We have two output files, about.js
and home.js
of 72KiB capacity
Now we add Code Splitting into the webpack.config.js
file to separate the code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <span class="token keyword">const</span> path <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'path'</span> <span class="token punctuation">)</span> module <span class="token punctuation">.</span> exports <span class="token operator">=</span> <span class="token punctuation">{</span> entry <span class="token operator">:</span> <span class="token punctuation">{</span> home <span class="token operator">:</span> <span class="token string">'./src/home.js'</span> <span class="token punctuation">,</span> about <span class="token operator">:</span> <span class="token string">'./src/about.js'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> output <span class="token operator">:</span> <span class="token punctuation">{</span> filename <span class="token operator">:</span> <span class="token string">'[name].js'</span> <span class="token punctuation">,</span> path <span class="token operator">:</span> path <span class="token punctuation">.</span> <span class="token function">resolve</span> <span class="token punctuation">(</span> __dirname <span class="token punctuation">,</span> <span class="token string">'dist'</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> optimization <span class="token operator">:</span> <span class="token punctuation">{</span> splitChunks <span class="token operator">:</span> <span class="token punctuation">{</span> chunks <span class="token operator">:</span> <span class="token string">'all'</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Rerun npm run dev
and see the difference
1 2 3 4 5 6 7 8 9 | ... Asset Size Chunks Chunk Names about.js 1.54 KiB 1 [emitted] about home.js 1.53 KiB 2 [emitted] home vendors~about~home.js 71.1 KiB 0 [emitted] vendors~about~home Entrypoint home = vendors~about~home.js home.js Entrypoint about = vendors~about~home.js about.js ... |
At this point we can see that there are three output files, home.js
about.js
and vendors~about~home.js
The two output files: about and home previously had a capacity of 72KiB now only about 1.5KiB
The output file vendors~about~home.js
that this means that webpack has optimized the source code, cleaned up the same libraries (lodash itself), the name is remixed between vendor (vendor) with two file names.
Note that when running through Code Splitting, the code has been split into different files. In the dist/index.html
file that you want to run, you must call both files from vendors.
1 2 3 | <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> script</span> <span class="token attr-name">src</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> vendors~about~home.js <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> script</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> script</span> <span class="token attr-name">src</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> home.js <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> script</span> <span class="token punctuation">></span></span> |
This article is over, hopefully with this article you have added a lot of useful knowledge. See you in the next article!
- See more about Code Splitting at: https://webpack.js.org/guides/code-splitting/
- Source code github: https://github.com/kentrung/webpack-tutorial