60 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								# App shell
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								App shell is a way to render a portion of your application via a route at build time.
							 | 
						||
| 
								 | 
							
								It can improve the user experience by quickly launching a static rendered page (a skeleton common to all pages) while the browser downloads the full client version and switches to it automatically after the code loads.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This gives users a meaningful first paint of your application that appears quickly because the browser can simply render the HTML and CSS without the need to initialize any JavaScript.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Learn more in [The App Shell Model](https://developers.google.com/web/fundamentals/architecture/app-shell).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Step 1: Prepare the application
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can do this with the following CLI command:
							 | 
						||
| 
								 | 
							
								<code-example format="." language="bash" linenums="false">
							 | 
						||
| 
								 | 
							
								ng new my-app --routing
							 | 
						||
| 
								 | 
							
								</code-example>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For an existing application, you have to manually add the `RouterModule` and defining a `<router-outlet>` within your application.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Step 2: Create the app shell
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Use the CLI to automatically create the app shell.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<code-example format="." language="bash" linenums="false">
							 | 
						||
| 
								 | 
							
								ng generate app-shell --client-project my-app --universal-project server-app
							 | 
						||
| 
								 | 
							
								</code-example>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* `my-app` takes the name of your client application.
							 | 
						||
| 
								 | 
							
								* `server-app` takes the name of the Universal (or server) application.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								After running this command you will notice that the `angular.json` configuration file has been updated to add two new targets, with a few other changes.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<code-example format="." language="none" linenums="false">
							 | 
						||
| 
								 | 
							
								"server": {
							 | 
						||
| 
								 | 
							
								  "builder": "@angular-devkit/build-angular:server",
							 | 
						||
| 
								 | 
							
								  "options": {
							 | 
						||
| 
								 | 
							
								    "outputPath": "dist/my-app-server",
							 | 
						||
| 
								 | 
							
								    "main": "src/main.server.ts",
							 | 
						||
| 
								 | 
							
								    "tsConfig": "tsconfig.server.json"
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								},
							 | 
						||
| 
								 | 
							
								"app-shell": {
							 | 
						||
| 
								 | 
							
								  "builder": "@angular-devkit/build-angular:app-shell",
							 | 
						||
| 
								 | 
							
								  "options": {
							 | 
						||
| 
								 | 
							
								    "browserTarget": "my-app:build",
							 | 
						||
| 
								 | 
							
								    "serverTarget": "my-app:server",
							 | 
						||
| 
								 | 
							
								    "route": "shell"
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								</code-example>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Step 3: Verify the app is built with the shell content
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Use the CLI to build the `app-shell` target.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<code-example format="." language="bash" linenums="false">
							 | 
						||
| 
								 | 
							
								ng run my-app:app-shell
							 | 
						||
| 
								 | 
							
								</code-example>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To verify the build output, open `dist/my-app/index.html`. Look for default text `app-shell works!` to show that the app shell route was rendered as part of the output.
							 |