60 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # Overview
 | ||
|  | 
 | ||
|  | [Stackblitz](https://stackblitz.com/) is an online tool for creating, collaborating and sharing ideas.  | ||
|  | In AIO we use it to share one or more runnable versions of our examples. | ||
|  | 
 | ||
|  | Stackblitz can be used both in a separate page and in an embedded form. | ||
|  | * `generateStackblitz.js` - executes each of the the StackblitzBuilder to generate a stackblitz file for each example. | ||
|  | 
 | ||
|  | ## Stackblitz generation
 | ||
|  | 
 | ||
|  | Both forms are created within `builder.js`. How is a stackblitz created? What is the process from a | ||
|  | directory with files to a link with a stackblitz. | ||
|  | 
 | ||
|  | An "executable" stackblitz is an HTML file with a `<form>` that makes a post to stackblitz on submit. It | ||
|  | contains an `<input>` element for each file we need in the stackblitz. | ||
|  | 
 | ||
|  | The form will be submitted on load, so you can either double click the HTML file or open it with an | ||
|  | anchor tag to open the stackblitz. | ||
|  | 
 | ||
|  | So the `builder.js` job is to get all the needed files from an example and build this HTML file for you. | ||
|  | 
 | ||
|  | ## Customizing the generation per example basis
 | ||
|  | 
 | ||
|  | How does this tool know what is an example and what is not? It will look for all folders containing a | ||
|  | `stackblitz.json` file. If found, all files within the folder and subfolders will be used in the stackblitz, with | ||
|  | a few generic exceptions that you can find at `builder.js`. | ||
|  | 
 | ||
|  | You can use the `stackblitz.json` to customize the stackblitz generation. For example: | ||
|  | 
 | ||
|  | ```json | ||
|  | { | ||
|  |   "description": "Tour of Heroes: Part 6", | ||
|  |   "files":[ | ||
|  |     "!**/*.d.ts", | ||
|  |     "!**/*.js", | ||
|  |     "!**/*.[1,2].*" | ||
|  |   ], | ||
|  |   "tags": ["tutorial", "tour", "heroes", "http"] | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | Here you can specify a description for the stackblitz, some tags and also a files array where you | ||
|  | can specify extra files to add or to ignore. | ||
|  | 
 | ||
|  | ## Executing the stackblitz generation
 | ||
|  | 
 | ||
|  | `generateStackblitz.js` will create a stackblitz for each `stackblitz.json` it finds. | ||
|  | 
 | ||
|  | Where? At `src/generated/live-examples/`. | ||
|  | 
 | ||
|  | Then the `<live-example>` embedded component will look at this folder to get the stackblitz it needs for the | ||
|  | example. | ||
|  | 
 | ||
|  | ## Appendix: Why not generating stackblitz at runtime?
 | ||
|  | 
 | ||
|  | At AngularJS, all the plunker examples were generated a runtime. The downside was that all the example code had to be  | ||
|  | deployed as well and would no longer be useful after the plunker was generated.  | ||
|  | 
 | ||
|  | This `StackblitzBuilder` tool takes a few seconds to run, and the end result is only 3mb~. |