| 
									
										
										
										
											2017-07-15 16:38:10 +01:00
										 |  |  | # Overview
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-21 11:16:27 +01:00
										 |  |  | In the AIO application, we offer the reader the option to download each example as a full self-contained | 
					
						
							|  |  |  | runnable project packaged as a zip file. These zip files are generated by the utility in this folder. | 
					
						
							| 
									
										
										
										
											2017-07-19 19:00:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## Example zipper
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-03 18:08:28 +01:00
										 |  |  | The `exampleZipper.js` tool is very similar to the Stackblitz's `builder.js`. The latter creates an HTML file | 
					
						
							|  |  |  | with all the examples' files and the former creates a zip file instead. They both use the `stackblitz.json` file | 
					
						
							|  |  |  | to flag an example as something to stackblitz or zip. For example: | 
					
						
							| 
									
										
										
										
											2017-07-19 19:00:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```json | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   "description": "Tour of Heroes: Part 6", | 
					
						
							|  |  |  |   "files":[ | 
					
						
							|  |  |  |     "!**/*.d.ts", | 
					
						
							|  |  |  |     "!**/*.js", | 
					
						
							|  |  |  |     "!**/*.[1,2].*" | 
					
						
							|  |  |  |   ], | 
					
						
							|  |  |  |   "tags": ["tutorial", "tour", "heroes", "http"] | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The zipper will use this information for creating new zips. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-31 13:34:22 +02:00
										 |  |  | ## Three kinds of examples
 | 
					
						
							| 
									
										
										
										
											2017-07-19 19:00:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-13 10:05:24 -05:00
										 |  |  | The majority of examples in AIO use `CLI`, with some additionally using `Webpack` and upgrade usiing `SystemJS`. This | 
					
						
							| 
									
										
										
										
											2017-09-21 11:16:27 +01:00
										 |  |  | tool is able to differentiate between them. | 
					
						
							| 
									
										
										
										
											2017-07-19 19:00:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-21 11:16:27 +01:00
										 |  |  | The boilerplate uses a `package.json` that contains packages and scripts to run any kind of example. | 
					
						
							|  |  |  | Using that `package.json` in the zips would confuse the users. | 
					
						
							| 
									
										
										
										
											2017-07-19 19:00:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-21 11:16:27 +01:00
										 |  |  | Thanks to the `package.json` customizer, we can create a new `package.json` on the fly that would | 
					
						
							|  |  |  | only contain the packages and scripts needed to run that example. | 
					
						
							| 
									
										
										
										
											2017-07-19 19:00:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | The `exampleZipper.js` won't include any `System.js` related files for `CLI` or `Webpack` projects. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### The package.json customizer
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Given a `type`, this tool will populate a `package.json` file customized for that type. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Here you find a: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * **base.json** - All the common scripts and packages | 
					
						
							|  |  |  | * **cli.json** - Extra scripts and packages for the CLI | 
					
						
							| 
									
										
										
										
											2017-11-02 22:22:09 +01:00
										 |  |  | * **universal.json** - Extra scripts and packages for universal | 
					
						
							|  |  |  | * **i18n.json** - Extra scripts and packages for i18n | 
					
						
							| 
									
										
										
										
											2017-09-21 11:16:27 +01:00
										 |  |  | * **systemjs.json** - All the System.js related packages but it also contains the remainder scripts | 
					
						
							|  |  |  |   that are not in the other files. | 
					
						
							| 
									
										
										
										
											2017-07-19 19:00:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-21 11:16:27 +01:00
										 |  |  | The tool will also give some standard names to the scripts. | 
					
						
							| 
									
										
										
										
											2017-07-19 19:00:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## The zipper.json
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-03 18:08:28 +01:00
										 |  |  | As mentioned, the tool uses the `stackblitz.json` as a flag and also a configuration file for the zipper. | 
					
						
							|  |  |  | The problem is that not all examples have a stackblitz but they could offer a zip instead. | 
					
						
							| 
									
										
										
										
											2017-07-19 19:00:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-21 11:16:27 +01:00
										 |  |  | In those cases, you can create a `zipper.json` file with the same syntax. It will be ignored by the | 
					
						
							| 
									
										
										
										
											2017-11-03 18:08:28 +01:00
										 |  |  | stackblitz tool. | 
					
						
							| 
									
										
										
										
											2017-07-19 19:00:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## Choosing the zip "type"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-03 18:08:28 +01:00
										 |  |  | In both `stackblitz.json` and `zipper.json` you can use two extra properties for the zipper configuration: | 
					
						
							| 
									
										
										
										
											2017-07-19 19:00:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   ... | 
					
						
							|  |  |  |   "removeSystemJsConfig": true, | 
					
						
							| 
									
										
										
										
											2018-06-13 10:05:24 -05:00
										 |  |  |   "type": "testing" | 
					
						
							| 
									
										
										
										
											2017-07-19 19:00:56 +02:00
										 |  |  | } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-13 10:05:24 -05:00
										 |  |  | This would generate a zip for a testing application and it will also remove everything related with | 
					
						
							| 
									
										
										
										
											2017-09-21 11:16:27 +01:00
										 |  |  | SystemJS. | 
					
						
							| 
									
										
										
										
											2017-07-19 19:00:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## Executing the zip generation
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-03 18:08:28 +01:00
										 |  |  | `generateZips.js` will create a zip for each `stackblitz.json`  or `zipper.json` it finds. | 
					
						
							| 
									
										
										
										
											2017-07-19 19:00:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-31 13:34:22 +02:00
										 |  |  | Where? At `src/generated/zips/`. | 
					
						
							| 
									
										
										
										
											2017-07-19 19:00:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-21 11:16:27 +01:00
										 |  |  | Then the `<live-example>` embedded component will look at this folder to get the zip it needs for | 
					
						
							|  |  |  | the example. |