2017-07-15 11:38:10 -04:00
|
|
|
# Overview
|
|
|
|
|
2017-09-21 06:16:27 -04: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 13:00:56 -04:00
|
|
|
|
|
|
|
## Example zipper
|
|
|
|
|
2017-11-03 13:08:28 -04: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 13:00:56 -04: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 07:34:22 -04:00
|
|
|
## Three kinds of examples
|
2017-07-19 13:00:56 -04:00
|
|
|
|
2017-09-21 06:16:27 -04:00
|
|
|
The majority of examples in AIO use `System.js` but there are also `CLI` and `Webpack` projects. This
|
|
|
|
tool is able to differentiate between them.
|
2017-07-19 13:00:56 -04:00
|
|
|
|
2017-09-21 06:16:27 -04: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 13:00:56 -04:00
|
|
|
|
2017-09-21 06:16:27 -04: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 13:00:56 -04: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
|
|
|
|
* **webpack.json** - Extra scripts and packages for Webpack
|
2017-11-02 17:22:09 -04:00
|
|
|
* **universal.json** - Extra scripts and packages for universal
|
|
|
|
* **i18n.json** - Extra scripts and packages for i18n
|
2017-09-21 06:16:27 -04: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 13:00:56 -04:00
|
|
|
|
2017-09-21 06:16:27 -04:00
|
|
|
The tool will also give some standard names to the scripts.
|
2017-07-19 13:00:56 -04:00
|
|
|
|
|
|
|
## The zipper.json
|
|
|
|
|
2017-11-03 13:08:28 -04: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 13:00:56 -04:00
|
|
|
|
2017-09-21 06:16:27 -04:00
|
|
|
In those cases, you can create a `zipper.json` file with the same syntax. It will be ignored by the
|
2017-11-03 13:08:28 -04:00
|
|
|
stackblitz tool.
|
2017-07-19 13:00:56 -04:00
|
|
|
|
|
|
|
## Choosing the zip "type"
|
|
|
|
|
2017-11-03 13:08:28 -04:00
|
|
|
In both `stackblitz.json` and `zipper.json` you can use two extra properties for the zipper configuration:
|
2017-07-19 13:00:56 -04:00
|
|
|
|
|
|
|
```
|
|
|
|
{
|
|
|
|
...
|
|
|
|
"removeSystemJsConfig": true,
|
|
|
|
"type": "webpack"
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2017-09-21 06:16:27 -04:00
|
|
|
This would generate a zip for a webpack application and it will also remove everything related with
|
|
|
|
SystemJS.
|
2017-07-19 13:00:56 -04:00
|
|
|
|
|
|
|
## Executing the zip generation
|
|
|
|
|
2017-11-03 13:08:28 -04:00
|
|
|
`generateZips.js` will create a zip for each `stackblitz.json` or `zipper.json` it finds.
|
2017-07-19 13:00:56 -04:00
|
|
|
|
2017-07-31 07:34:22 -04:00
|
|
|
Where? At `src/generated/zips/`.
|
2017-07-19 13:00:56 -04:00
|
|
|
|
2017-09-21 06:16:27 -04:00
|
|
|
Then the `<live-example>` embedded component will look at this folder to get the zip it needs for
|
|
|
|
the example.
|