├── .gitignore ├── .prettierrc ├── README.md ├── package-lock.json ├── package.json ├── public ├── favicon.ico ├── index.html └── manifest.json └── src ├── deps-included ├── dep.js └── index.js ├── group ├── one.js └── two.js ├── index.js ├── prefetched.js └── preloaded.js /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | 6 | # testing 7 | /coverage 8 | 9 | # production 10 | /build 11 | 12 | # misc 13 | .DS_Store 14 | .env.local 15 | .env.development.local 16 | .env.test.local 17 | .env.production.local 18 | 19 | npm-debug.log* 20 | yarn-debug.log* 21 | yarn-error.log* 22 | .docz -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "avoid", 3 | "bracketSpacing": false, 4 | "endOfLine": "lf", 5 | "htmlWhitespaceSensitivity": "css", 6 | "insertPragma": false, 7 | "jsxBracketSameLine": false, 8 | "jsxSingleQuote": false, 9 | "printWidth": 80, 10 | "proseWrap": "always", 11 | "quoteProps": "as-needed", 12 | "requirePragma": false, 13 | "semi": false, 14 | "singleQuote": true, 15 | "tabWidth": 2, 16 | "trailingComma": "all", 17 | "useTabs": false 18 | } 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | A demo for my blog post: 2 | [Optimize Code Splitting with Webpack](https://kentcdodds.com/blog/optimize-code-splitting-with-webpack) 3 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "code-splitting-demo", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "react": "16.12.0", 7 | "react-dom": "16.12.0", 8 | "react-scripts": "3.2.0" 9 | }, 10 | "scripts": { 11 | "start": "react-scripts start", 12 | "build": "react-scripts build", 13 | "test": "react-scripts test" 14 | }, 15 | "eslintConfig": { 16 | "extends": "react-app" 17 | }, 18 | "browserslist": [ 19 | ">0.2%", 20 | "not dead", 21 | "not ie <= 11", 22 | "not op_mini all" 23 | ], 24 | "keywords": [], 25 | "description": "" 26 | } 27 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kentcdodds/code-splitting-demo/6f864bbc13b969731b1f53844c80bcf377ec54ce/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 13 | 14 | 23 | React App 24 | 25 | 26 | 27 | 30 |
31 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": ".", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } -------------------------------------------------------------------------------- /src/deps-included/dep.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default () =>
Hello from a dependency!
4 | -------------------------------------------------------------------------------- /src/deps-included/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Dep from './dep' 3 | 4 | export default () => 5 | -------------------------------------------------------------------------------- /src/group/one.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default () =>
One
4 | -------------------------------------------------------------------------------- /src/group/two.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default () =>
Two
4 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom' 3 | 4 | const DepsIncluded = React.lazy(() => 5 | import(/* webpackChunkName: "deps" */ './deps-included'), 6 | ) 7 | const One = React.lazy(() => 8 | import(/* webpackChunkName: "group" */ './group/one'), 9 | ) 10 | const Two = React.lazy(() => 11 | import(/* webpackChunkName: "group" */ './group/two'), 12 | ) 13 | 14 | const Prefetched = React.lazy(() => 15 | import( 16 | /* webpackPrefetch: true */ 17 | /* webpackChunkName: "prefetched" */ 18 | './prefetched' 19 | ), 20 | ) 21 | const Preloaded = React.lazy(() => 22 | import( 23 | /* webpackPreload: true */ 24 | /* webpackChunkName: "preload" */ 25 | './preloaded' 26 | ), 27 | ) 28 | 29 | function App() { 30 | const [show, setShow] = React.useState(false) 31 | return ( 32 | 33 | 34 | {show ? ( 35 |
36 | 37 | 38 | 39 | 40 | 41 |
42 | ) : null} 43 |
44 | ) 45 | } 46 | 47 | ReactDOM.render(, document.getElementById('root')) 48 | -------------------------------------------------------------------------------- /src/prefetched.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default () =>
Prefetched module
4 | -------------------------------------------------------------------------------- /src/preloaded.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default () =>
Preloaded module
4 | --------------------------------------------------------------------------------