I have an app structure like this:
├── /dashboard
│ ├── dashboard.css
│ ├── dashboard.html
│ ├── dashboard.component.ts
│ ├── dashboard.service.ts
│ ├── index.ts
├── /users
│ ├── users.css
│ ├── users.html
│ ├── users.component.ts
│ ├── users.service.ts
│ ├── index.ts
├── /login
│ ├── login.css
│ ├── login.html
│ ├── login.component.ts
│ ├── login.service.ts
│ ├── index.ts
├── app.component.ts
├── app.module.ts
├── app.routes.ts
├── app.styles.css
And I want to code split my app into something like this:
├── dashboard.js
├── users.js
├── login.js
├── app.js
I cannot seem to find an example of how I can do this with webpack. So 2 questions. Can this be done? And, How can this be done?
Any leads or help would be appreciated. I have been researching this all morning.
Angular documentation suggests it here, but no examples or tutorials that I can find. So it's possible, yet no one know how to do it?.
you can find the webpack configuration here
There are three general approaches to code splitting available: Entry Points: Manually split code using entry configuration. Prevent Duplication: Use Entry dependencies or SplitChunksPlugin to dedupe and split chunks. Dynamic Imports: Split code via inline function calls within modules.
Code splitting is achieved in Angular by creating lazy-loaded modules. In order to ensure that a module is lazy loaded and split into its own chunk of JavaScript, you must first create a lazy-loaded route. The following code demonstrates a lazy-loaded route in Angular.
Webpack injects some code into main. js which takes care of lazy loading async chunks and stops from loading same chunks again and again. When a route changes, React router calls a Webpack function to load a chunk file and Webpack after done loading runs it, which chunk then would internally ask React to do something.
Webpack is probably the most widely used bundler for large Angular applications today. It is also currently the backing bundler for the Angular CLI.
You will have to put each one of them as an entry point
entry: {
'dashboard': './src/dashboard/index.ts',
'users': './src/users/index.ts',
'login': './src/login/index.ts',
'app': './src/app.module.ts'
}
and then to make sure no code is duplicate across the different entry points set them in the commons chunk plugin. The order is important code encountered in app and subsequently also important in dashboard or users will only show up in the last one it is present/required in.
plugins: [
new webpack.optimize.CommonsChunkPlugin({
name: ['app', 'dashboard', 'login', 'users']
})
]
you can also get some inspiration from here: https://angular.io/docs/ts/latest/guide/webpack.html#!#common-configuration
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With