Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@ionic/app-scripts

ionic-team11.8kMIT3.2.4TypeScript support: included

Scripts for Ionic Projects

readme

npm version Circle CI

Ionic App Scripts

Helper scripts to get Ionic apps up and running quickly (minus the config overload).

To get the latest @ionic/app-scripts, please run:

npm install @ionic/app-scripts@latest --save-dev

Config Defaults

Out of the box, Ionic starters have been preconfigured with great defaults for building fast apps, including:

  • Multi-core processing tasks in parallel for faster builds
  • In-memory file transpiling and bundling
  • Transpiling source code to ES5 JavaScript
  • Ahead of Time (AoT) template compiling
  • Just in Time (JiT) template compiling
  • Template inlining for JiT builds
  • Bundling modules for faster runtime execution
  • Treeshaking unused components and dead-code removal
  • Generating CSS from bundled component Sass files
  • Autoprefixing vendor CSS prefixes
  • Minifying JavaScript files
  • Compressing CSS files
  • Copying src static assets to www
  • Linting source files
  • Watching source files for live-reloading

Just the bullet list above is a little overwhelming, and each task requires quite a bit of development time just to get started. Ionic App Script's intention is to make it easier to complete common tasks so developers can focus on building their app, rather than building build scripts.

Note that the Ionic Framework's source is made up of modules and can be packaged by any bundler or build process. However, this project's goal is provide simple scripts to make building Ionic apps easier, while also allowing developers to further configure their build process.

npm Scripts

Instead of depending on external task runners, Ionic App Scripts now prefers being executed from npm scripts. Ionic's npm scripts come preconfigured in the project's package.json file. For example, this is the default setup for npm scripts in each starter:

  "scripts": {
    "ionic:build": "ionic-app-scripts build",
    "ionic:serve": "ionic-app-scripts serve"
  },

To run the build script found in the package.json scripts property, execute:

npm run build

Environments

You can use Node style process.env.MY_VAR syntax directly in your typescript and when the application is bundled it'll be replaced with the following order of precedence:

  • If the variable exists in the process environment it will be replaced with that value.
  • If the variable is not defined in the process environment it will be read from a .env.dev file for dev builds or .env.prod file for prod builds which are located in the root of the app
  • If the variable is not defined in either place it will be undefined

In order to take advantage of this apps will need a src/declarations.d.ts file with the following declaration:

declare var process: { env: { [key: string]: string | undefined; } };

Note: This declaration may conflict if @types/node is installed in your project. See #3541.

Custom Configuration

In many cases, the defaults which Ionic provides cover most of the scenarios required by developers; however, Ionic App Scripts does provide multiple ways to configure and override the defaults for each of the various tasks. Note that Ionic will always apply its defaults for any property that was not provided by custom configuration.

Default Config Files

package.json Config

Ionic projects use the package.json file for configuration. There's a handy config property which can be used. Below is an example of setting a custom config file using the config property in a project's package.json.

  "config": {
    "ionic_cleancss": "./config/cleancss.config.js"
  },

Command-line Flags

Remember how we're actually running ionic-app-scripts from the scripts property of a project's package.json file? Well we can also add command-line flags to each script, or make new scripts with these custom flags. For example:

  "scripts": {
    "build": "ionic-app-scripts build --webpack ./config/webpack.dev.config.js",
    "minify": "ionic-app-scripts minify --cleancss ./config/cleancss.config.js",
  },

The same command-line flags can be also applied to npm run commands too, such as:

npm run build --webpack ./config/webpack.dev.config.js

Overriding Config Files

Config File package.json Config Cmd-line Flag
CleanCss ionic_cleancss --cleancss or -e
Copy ionic_copy --copy or -y
Generator ionic_generator --generator or -g
NGC ionic_ngc --ngc or -n
Sass ionic_sass --sass or -s
TSLint ionic_tslint --tslint or -i
UglifyJS ionic_uglifyjs --uglifyjs or -u
Watch ionic_watch --watch
Webpack ionic_webpack --webpack or -w

Overriding Config Values

Config Values package.json Config Cmd-line Flag Defaults Details
root directory ionic_root_dir --rootDir process.cwd() The directory path of the Ionic app
src directory ionic_src_dir --srcDir src The directory holding the Ionic src code
www directory ionic_www_dir --wwwDir www The deployable directory containing everything needed to run the app
build directory ionic_build_dir --buildDir build The build process uses this directory to store generated files, etc
temp directory ionic_tmp_dir --tmpDir .tmp Temporary directory for writing files for debugging and various build tasks
ionic-angular directory ionic_angular_dir --ionicAngularDir ionic-angular ionic-angular directory
ionic-angular entry point ionic_angular_entry_point --ionicAngularEntryPoint index.js entry point file for ionic-angular
source map type ionic_source_map_type --sourceMapType source-map Chooses the webpack devtool option. eval and source-map are supported
generate source map ionic_generate_source_map --generateSourceMap true Determines whether to generate a source map or not
tsconfig path ionic_ts_config --tsconfig {{rootDir}}/tsconfig.json absolute path to tsconfig.json
app entry point ionic_app_entry_point --appEntryPoint {{srcDir}}/app/main.ts absolute path to app's entrypoint bootstrap file
app ng module path ionic_app_ng_module_path --appNgModulePath {{srcDir}}/app/app.module.ts absolute path to app's primary NgModule
app ng module class ionic_app_ng_module_class --appNgModuleClass AppModule Exported class name for app's primary NgModule
clean before copy ionic_clean_before_copy --cleanBeforeCopy false clean out existing files before copy task runs
output js file ionic_output_js_file_name --outputJsFileName main.js name of js file generated in buildDir
output css file ionic_output_css_file_name --outputCssFileName main.css name of css file generated in buildDir
bail on lint error ionic_bail_on_lint_error --bailOnLintError null Set to true to make stand-alone lint commands fail with non-zero status code
enable type checking during lint ionic_type_check_on_lint --typeCheckOnLint null Set to true to enable type checking during lint
write AoT files to disk ionic_aot_write_to_disk --aotWriteToDisk null Set to true to write files to disk for debugging
print webpack dependency tree ionic_print_webpack_dependency_tree --printWebpackDependencyTree null Set to true to print out a dependency tree after running Webpack
parse deeplink config ionic_parse_deeplinks --parseDeepLinks true Parses and extracts data from the @IonicPage decorator
convert bundle to ES5 ionic_build_to_es5 --buildToEs5 true Convert bundle to ES5 for production deployments
default watch timeout ionic_start_watch_timeout --startWatchTimeout 3000 Milliseconds controlling the default watch timeout
choose the polyfill ionic_polyfill_name --polyfillName polyfills Change with polyfills.modern or polyfills.ng (all options)[https://github.com/driftyco/ionic/tree/master/scripts/polyfill]
enable linting ionic_enable_lint --enableLint true Set to false for skipping the linting after the build

Ionic Environment Variables

These environment variables are automatically set to Node's process.env property. These variables can be useful from within custom configuration files, such as custom webpack.config.js file.

Environment Variable Description
IONIC_ENV Value can be either prod or dev.
IONIC_ROOT_DIR The absolute path to the project's root directory.
IONIC_SRC_DIR The absolute path to the app's source directory.
IONIC_WWW_DIR The absolute path to the app's public distribution directory.
IONIC_BUILD_DIR The absolute path to the app's bundled js and css files.
IONIC_TMP_DIR Temp directory for debugging generated/optimized code and various build tasks
IONIC_NODE_MODULES_DIR The absolute path to the node_modules directory.
IONIC_ANGULAR_DIR The absolute path to the ionic-angular node_module directory.
IONIC_APP_SCRIPTS_DIR The absolute path to the @ionic/app-scripts node_module directory.
IONIC_SOURCE_MAP_TYPE The Webpack devtool setting. eval and source-map are supported.
IONIC_GENERATE_SOURCE_MAP Determines whether to generate a sourcemap or not.
IONIC_TS_CONFIG The absolute path to the project's tsconfig.json file
IONIC_APP_ENTRY_POINT The absolute path to the project's main.ts entry point file
IONIC_APP_NG_MODULE_PATH The absolute path to app's primary NgModule
IONIC_APP_NG_MODULE_CLASS The exported class name for app's primary NgModule
IONIC_GLOB_UTIL The path to Ionic's glob-util script. Used within configs.
IONIC_CLEAN_BEFORE_COPY Attempt to clean existing directories before copying files.
IONIC_CLOSURE_JAR The absolute path ot the closure compiler jar file
IONIC_OUTPUT_JS_FILE_NAME The file name of the generated javascript file
IONIC_OUTPUT_CSS_FILE_NAME The file name of the generated css file
IONIC_WEBPACK_FACTORY The absolute path to Ionic's webpack-factory script
IONIC_WEBPACK_LOADER The absolute path to Ionic's custom webpack loader
IONIC_BAIL_ON_LINT_ERROR Boolean determining whether to exit with a non-zero status code on error
IONIC_TYPE_CHECK_ON_LINT Boolean determining whether to type check code during lint or not
IONIC_AOT_WRITE_TO_DISK --aotWriteToDisk
IONIC_PRINT_WEBPACK_DEPENDENCY_TREE boolean to print out a dependency tree after running Webpack
IONIC_PARSE_DEEPLINKS boolean to enable parsing the Ionic 3.x deep links API for lazy loading
IONIC_BUILD_TO_ES5 boolean to enable converting bundle to ES5 for production deployments
IONIC_START_WATCH_TIMEOUT Milliseconds controlling the default watch timeout

The process.env.IONIC_ENV environment variable can be used to test whether it is a prod or dev build, which automatically gets set by any command. By default the build and serve tasks produce dev builds (a build that does not include Ahead of Time (AoT) compilation or minification). To force a prod build you should use the --prod command line flag.

process.env.IONIC_ENV environment variable is set to prod for --prod builds, otherwise dev for all other builds.

All Available Tasks

These tasks are available within ionic-app-scripts and can be added to npm scripts or any Node command.

Task Description
build A complete build of the application. It uses development settings by default. Use --prod to create an optimized build
clean Empty the www/build directory.
cleancss Compress the output CSS with CleanCss
copy Run the copy tasks, which by defaults copies the src/assets/ and src/index.html files to www.
lint Run the linter against the source .ts files, using the tslint.json config file at the root.
minify Minifies the output JS bundle and compresses the compiled CSS.
sass Sass compilation of used modules. Bundling must have at least ran once before Sass compilation.
watch Runs watch for dev builds.

Example NPM Script:

  "scripts": {
    "minify": "ionic-app-scripts minify"
  },

Tips

  1. The Webpack devtool setting is driven by the ionic_source_map_type variable. It defaults to source-map for the best quality source map. Developers can enable significantly faster builds by setting ionic_source_map_type to eval.
  2. By default, the lint command does not exit with a non-zero status code on error. To enable this, pass --bailOnLintError true to the command.
"scripts" : {
  ...
  "lint": "ionic-app-scripts lint"
  ...
}
npm run lint --bailOnLintError true

The Stack

Contributing

We welcome any PRs, issues, and feedback! Please be respectful and follow the Code of Conduct.

We use Node 6, and NPM 5 for contributing.

Publish a Nightly Build

  1. Run npm run build to generate the dist directory
  2. Run npm run test to validate the dist works
  3. Tick the package.json version
  4. Run npm run nightly to generate a nightly build on npm

Publish a release

Execute the following steps to publish a release:

  1. Ensure your branch has been merged into master
  2. Run npm run build to generate the dist directory
  3. Run npm run test to validate the dist works
  4. Temporarily tick the package.json version
  5. Run npm run changelog to append the latest additions to the changelog
  6. Manually verify and commit the changelog changes. Often times you'll want to manually add content/instructions
  7. Revert the package.json version to the original version
  8. Run npm version patch to tick the version and generate a git tag
  9. Run npm run github-release to create the github release entry
  10. Run npm publish to publish the package to npm
  11. git push origin master - push changes to master

changelog

3.2.4 (2019-05-24)

Bug Fixes

  • livereload: always serve latest file changes (#1521) (266a871)

3.2.3 (2019-03-01)

Bug Fixes

  • livereload: fix issue with files not reloading(8870a17)

3.2.2 (2019-01-22)

  • Added support for Node 10

3.2.1 (2018-11-26)

  • Security release for dependencies for node-sass

3.2.0 (2018-08-24)

Bug Fixes

Features

  • environments: configuration via process.env.VAR replacement (#1471) (53fc341)

3.1.11 (2018-07-12)

Bug Fixes

  • serve: fix EADDRINUSE issue with dev logger server (271a6e1)

3.1.10 (2018-06-11)

3.1.9 (2018-04-18)

Bug Fixes

  • 2889: fix build error with --prod (94e5f7c)
  • live-server: update android platform path (#1407) (1591c81)
  • serve: start listening when watch is ready (06bbd06)

3.1.8 (2018-01-18)

This release includes a bump in the version of node-sass. This adds support for node 9.

3.1.7 (2017-12-27)

Bug Fixes

3.1.6 (2017-12-18)

Bug Fixes

3.1.5 (2017-12-07)

Bug Fixes

  • dependencies: update angular build optimizer for a source map fix (a5df139)

3.1.4 (2017-11-30)

Bug Fixes

  • aot: remove template validation until we can properly handle the error message format (d7c7136)

3.1.3 (2017-11-29)

Bug Fixes

  • aot: fix error reporting with ng 5.0.1 or greater (dece391)

3.1.2 (2017-11-13)

Bug Fixes

  • webpack: revert to 3.6.0 for faster builds (2553ca6)

3.1.1 (2017-11-13)

Bug Fixes

  • AoT: properly check for ngmodule declaration errors from the AoT build (a47f120)
  • template: fix bug with using dollar sign within templates (de09048)

3.1.0 (2017-11-08)

Features

Supports Angular 5

Bug Fixes

  • aot: pass genDir to ng4 (7506764)
  • config: only read ionic-angular package json for version info in apps, not in the Ionic repo itself (700ca04)
  • deep-linking: use .ts file extension for lazy loading in dev mode, and .js in AoT mode since the AoT compiler no longer emits an ngfactory.ts file (dd99f14)
  • live-server: content.toString() crash (#1288) (07e7e05)
  • templates: escape strings in template (484d90d)

Performance Improvements

  • uglifyjs: remove unused readFileAsync during uglify (#1305) (e9217c2)

3.0.1 (2017-10-20)

Bug Fixes

  • cleancss: update to latest version of clean-css to mitigate issue with purging some css that should not be purged (564bd61)
  • deep-linking: ensure hasExistingDeepLinkConfig returns true where there is a config referenced by a variable (2e40340)
  • deep-linking: ensure the deepLinkDir ends in path.sep (496af40)
  • set context right immediately (802b329)
  • dev-server: fix for --nolivereload flag to stop reloading (#1200) (d62f5da)
  • html: limit regex to only applicable script tags for replacing content (93db0ef)
  • proxy: add a cookieRewrite option which is passed to proxy-middleware. (#1226) (771ee63)
  • source-maps: fix race condition between copying and purging source maps (f5529b5)
  • webpack: always use modules output from webpack to form default basis of where to look for sass files (c199ea4)

3.0.0 (2017-09-28)

Breaking Changes

The webpack config format changed from being a config that is exported to being a dictionary of configs. Basically, the default config now exports a dev and prod property with a config assigned to each. See an example of the change here. This change is setting the stage for adding multiple "environment" support for the next app-scripts release.

New Features

This release adds support for ngo, the Angular team's build optimizer tool. ngo is enabled by default on --prod builds. In the event that ngo is not working for your app or something goes wrong, it can be disabled by running the following build command.

ionic cordova build ios --aot --minifyjs --minifycss --optimizejs

Using the --aot flag enables the AoT Compiler. --minifyjs and --minifycss minify the outputted code.

Notes

Version 3.0.0 deprecated support for Rollup, Closure Compiler, and Babili. The support for these was poor and they were not used by many developers. uglifyjs was replaced with the newer uglifyes, which supports ES2015.

Bug Fixes

  • aot: normalize paths to fix path issues on windows (b766037)
  • build: scan deeplink dir too if different from srcDir (8929265)
  • deep-linking: convert deep linking to use TS Transform. DeepLinking now works on TypeScript src instead of on transpiled JS code (63c4c7f)
  • deep-linking: remove IonicPage import statement in transform/non-transform approachs to work better with strict TS settings (84d9ec7)
  • devapp: do not enable shake (#1215) (118189c)
  • generators: correct pipes default folder name (f0ea0da)
  • ngc: don't replace deeplink config if an existing one exists (eeed98b)
  • optimization: removing optimizations in preparation for ngo, updating to latest deps (90eb8b3)
  • postprocess: fix and add tests for the logic surrounding purging fonts (0dd1b22)
  • sass: include the platforms dir by default (0da47cb)
  • transpile: check for existing deep link config before using generated one (c51ac93)
  • webpack: when analyzing stats, factor in new shape of ModuleConcatenation info (00cf038)

2.1.4 (2017-08-16)

Bug Fixes

  • make --lab respect --nobrowser (8db3be5)
  • serve: allow multiple arguments in console.log (5c00970)
  • serve: fix --consolelogs/--serverlogs usage with Cordova console plugin (8e64407)
  • serve: fix 'launchBrowser' of undefined (8f71e35)

Features

  • sourcemaps: copy for prod and dev (a1ccc17)
  • sourcemaps: preserve prod sourcemaps out of code dir (ee3e41b)

2.1.3 (2017-07-27)

Bug Fixes

  • lab: remove es6 features from lab (41a1335)

2.1.2 (2017-07-27)

Bug Fixes

  • generators: handle old cli (6fd622c)

2.1.1 (2017-07-27)

Bug Fixes

  • generator: write file sync (b0bcb05)
  • generators: add exception for providers (db9c793)

Features

  • webpack: update to latest webpack (67907b6)

2.1.0 (2017-07-25)

Bug Fixes

  • generators: handle no ngModule in tabs (653d9f2)

Features

  • generators: refactor generators (beaf0d3)

2.0.2 (2017-07-13)

Upgrading

Make sure you follow the instructions below for upgrading from 1.x to 2.x. In the 2.0.2 release, we had to make a small change to the optimization config. If you override this config, please review the change and update your config accordingly.

Bug Fixes

  • sass: fix potential null pointer, though it really should never happen (427e556)
  • webpack: don't output deptree.js, this requires a minor tweak to the optimization config if you have it customized (785e044)
  • webpack: upgrade to webpack 3.2.0 to fix some bugs within Webpack surrounding the ModuleConcatenationPlugin (f85ade0)

2.0.1 (2017-07-11)

Upgrading from 1.x

If you're upgrading directly from 1.3.12 or earlier, make sure you review the changelog for 2.0.0 and follow the instructions here. There were some very minor updates you'll need to make to your app.

If you're customizing the build process and have a dependency that utilized `webpack@2.x, it may be best to add an explicitdevDependencyonwebpack@3.1.0to the project'spackage.jsonfile. There have been a couple reports of non-standard 3rd party dependencies causing trouble with thewebpack` version.

Bug Fixes

  • generators: no module by default (#1096) (dfcaefa)
  • http-server: revert change for path-based routing since it broke proxies (065912e)
  • sass: use webpack/rollup modules for non-optimized build, use optimization data for prod/optimized buids (0554201)
  • serve: fix cached file issue by only using the webpack module concat plugin for prod builds, make sure you update custom configs (feea7fe)
  • webpack: webpack in-memory output file system was breaking some plugins (574da39)

2.0.0 (2017-07-07)

Breaking Changes

In order to speed up the bundling process, we have separated node_modules code into a new, generated file called vendor.js. This means that on every change, ionic-angular, @angular, etc won't need to be processed by webpack :tada:

This means that src/index.html must be modified to include a new vendor script tag <script src="build/vendor.js"></script>. This new script tag must be placed above the main.js script tag. For example,

...
<body>

  <!-- Ionic's root component and where the app will load -->
  <ion-app></ion-app>

  <script src="cordova.js"></script>

  <!-- The polyfills js is generated during the build process -->
  <script src="build/polyfills.js"></script>

  <!-- all code from node_modules directory is here -->
  <script src="build/vendor.js"></script>

  <!-- The bundle js is generated during the build process -->
  <script src="build/main.js"></script>

</body>
...

Another side effect of this change is if you are overriding the webpack configuration, you will want to update your custom configuration based on the new default configuration. The main changes to the config are adding the ModuleConcatenationPlugin for scope hoisting for significantly faster apps, and adding the common chunks plugin for the vendor.js bundle.

See commits e14f819 and 141cb23 for the specifics of the webpack.config.js change.

Bug Fixes

  • config: updated polyname env variable to match convention and fix typo with it (d64fcb1)
  • lint: improve linting performance (106d82c)
  • sass: dont try to process invalid directories (8af9430)
  • sass: fix a bug when calling sass task in stand alone fashion (54bf3f6)

Features

  • dev-server: add support for path-based routing (2441591)
  • webpack: add scope hoisting to webpack, update sass to read scss files from disk (e14f819)
  • webpack: use a vendor bundle to minimize code that needs re-bundling and source map generation (141cb23)
  • webpack: webpack 3.1.0 holy speed upgrade! (a3bde4a)

1.3.12 (2017-06-29)

Bug Fixes

  • dependencies: Added reflect-metadata to the list of dependencies (e6f8481

1.3.11 (2017-06-28)

Bug Fixes

  • dependencies: Removed peerDependencies. (90cd59d)

1.3.10 (2017-06-28)

Notes

Ionic updated to npm 5 across the board, so please update to npm 5 to utilize our lock file when contributing.

Bug Fixes

  • bonjour: remove bonjour as its causing trouble for users on Windows without git (e4b5c59)

1.3.9 (2017-06-28)

Features

  • lab: first iteration of the new Ionic Lab design
  • scripts: push npm build to arbitrary tag (#1060) (4e93f60)

1.3.8 (2017-06-21)

Bug Fixes

  • sass: fixes issue with Node 8 and node-sass
  • bonjour: updates dependency + better error handling (#1040) (e2f73c7)
  • core: use lower case attrs and not dash case (0154791)
  • diagnostics: change direction to always be ltr (#1004) (6d5ef3c)
  • lab: allow params to be passed to iframes (dabfdd1)
  • sass: fix .sass files not being watched (#957) (0803eca)
  • serve: if a build error occurs, return config if non-fatal (e5a4134)

1.3.7 (2017-05-04)

Bug Fixes

  • config: create new file cache if not defined, even on existing context object (4359b3d)
  • generators: import paths correct on windows (d778857)
  • optimizations: don't ever remove menu-types since it's not a side-effect in menu, it is used just for types (d7a4d1e)
  • optimizations: fix multiple bugs (components not being purged, overlays not working from providers, etc) for manual tree shaking (4b538c7)
  • webpack: fix issue where bundles output to build dir sub directo… (#938) (aaa9d3c)

Features

  • bonjour: adds service auto-discovery (c17e6df)

1.3.6 (2017-04-27)

Bug Fixes

  • webpack: fix issue PR introduced with lazy loaded modules and webpack throwing an invalid error (fb8b69a)

Features

  • optimization: enable manual tree shaking by default (1c57ee6)

1.3.5 (2017-04-26)

Bug Fixes

  • build: fix extends in ts-config.json (#910) (0f01603)
  • deep-linking: fix issue where deep link config ends up being null when full build is triggered via a change to a template file with the identical content (68fc463)
  • serve: Fix for browser not opening on linux, fixes #425 (#909) (77edbc6)

Features

  • sass: add option to pass addition postcss plugins (#369) (be30a40)

1.3.4 (2017-04-18)

Bug Fixes

  • webpack: make ionic-angular/util dir dynamic and use the environment variable of ionic angular (d3346b3)

1.3.3 (2017-04-14)

Bug Fixes

  • optimizations: temporarily do not purge ctor params from any of angular (212146c)

1.3.2 (2017-04-12)

Bug Fixes

  • deep-linking: fix bug with null deep link config when modifying the main NgModule file (app.module.ts) (759bb4f)
  • optimization: don't purge ctorParams for angular core or angular platform browser (9562181)
  • uglifyjs: only minify files processed by webpack or rollup (30ecdd8)

1.3.1 (2017-04-06)

Bug Fixes

  • config: revert change and once again transpile bundle by default. (b558584)
  • decorators: don't remove third party transpiled (not static) decorators (3a3259a)
  • deep-linking: don't force the main bundle to be re-built unless the deep link config changed (02b8e97)
  • errors: better error msg reporting from worker threads (d9d000a)
  • uglifyjs: better error msg reporting (49c0afb)

1.3.0 (2017-04-05)

Features

  • optimization: purge decorators enabled by default (b626e00)
  • optimizations: purge transpiled decorators (ba5e0cd)

1.2.5 (2017-03-31)

Bug Fixes

  • webpack: fixes bugs where some third party libs didn't load correctly (e7559e5)

1.2.4 (2017-03-30)

Refactor

  • deep-linking: set default segment value to filename without extension(5a97ba5)

1.2.3 (2017-03-29)

Bug Fixes

  • deep-linking: Deep linking fixes for Windows and non-unix paths

  • script: linux only accepts one argument after shebang, so revert giving app-scripts more memory by default (0999f23), closes #838

1.2.2 (2017-03-27)

Bug Fixes

  • generators: use correct path and handle providers correctly (e82d5ff)
  • rollup: pass all config options to generate (3502360)

1.2.1 (2017-03-26)

Bug Fixes

  • deep-linking: only attempt to inject deep-link config if there isn't an existing config and the (507f1a8)
  • rollup: fix bug with not generating source-map correctly (3b1fd16)

1.2.0 (2017-03-24)

Bug Fixes

  • deep-linking: Fix issue with deep-linking when attempting to update a template and failing, resulting in a full build but not processing deep links (6b158d3)
  • optimization: fix out of memory errors by providing more memory by default (b4c287a)
  • optimizations: only store ionic and src files in memory (f51314f)
  • uglify: check for correct file extension (d17f2e1)
  • uglify: verify source maps are generated correctly for all bundles, tests (fc44ca6)
  • utils: assign correct type (3c3666c)
  • watch: fixed bug where options.ignore was being ignored if it's an array (7f1e54c)
  • watch: queue builds (06e4971)
  • watch: queue buildUpdates events to avoid race conditions when bundling/building (43caefa)
  • webpack: don't overwrite css files when outputting webpack files (a32649f)

Features

  • serve: change http-server to use request hostname instead of the configured hostname. (8e1e81a)
  • deep-linking: generate default NgModule when missing by default (90138fa)
  • deep-linking: parsing deeplink decorator is now enabled by default, no longer experimental (e097d4e)
  • deep-linking: upgrade script to generate NgModules for pages with @DeepLink decorator (2943188)
  • generators: generators for page, component, directive, pipe, provider (e2a45e4)
  • minification: code-split bundles will be minified (#814) (d8d9a4e)

1.1.4 (2017-02-23)

Bug Fixes

  • optimizations: comment out code instead of purge it so source-maps don't error out in some edge (1dedc53)
  • watch: make default watch fail-to-start timeout configurable so it works more reliably on slow (2e2a647), closes #772

1.1.3 (2017-02-17)

Bug Fixes

  • config: Setting readConfigJson constant wrong (#761) (64bc17f)
  • source-maps: source map must correspond to .js file name with a .map at the end (debd88b)

1.1.2 (2017-02-16)

Bug Fixes

  • deep-links: handle configs with internal arrays (a7df816)
  • deep-links: only provide deep links to webpack that contain the import used in code and the abs (fae4862)
  • optimizations: remove the js file created by the optimizations bundling pass (c0bb3f4)

1.1.1 (2017-02-15)

Bug Fixes

  • config: node_modules directory should not be configurable (users were finding it confusing) (1f58aaa)
  • copy: support overriding config entries with empty objects (5879a8b)
  • deeplinks: make deep link config parsing support 2.x and 3.x deep link config (1ac7116)
  • deeplinks: provide deep-links config to webpack as needed vs via the constructor (a735e96)
  • http-server: drive reading ionic.config.json based on config value (e2d0d83)
  • optimizations: throw error when ionic-angular index file isn't found (6437005)
  • transpile: get tsconfig.json location from config value (79b0eeb)

1.1.0 (2017-02-11)

Optimizations

We are starting to introduce optimizations to improve the size of the bundle generated by the build process.

The first set of optimizations are behind flags:

ionic_experimental_manual_treeshaking will remove Ionic components and code that are not being used from the bundle. ionic_experimental_purge_decorators helps tree shaking by removing unnecessary decorator metadata from AoT code.

Since these are experimental, we are looking for feedback on how the work. Please test them out and let us know how it goes. See the instructions here.

Features

  • fonts: remove used fonts for cordova builds (967f784)

Bug Fixes

  • build: fix test if linting should trigger on file change (#719) (e13b857)
  • lint: capture results of all linted files (eb4314e), closes #725
  • optimizations: make optimizations work on windows and mac (5fe21f3)
  • serve: assign all ports dynamically (#727) (6b4115c)
  • webpack: fix bug with using [name] for output file name (1128c9c)

1.0.1 (2017-02-07)

Breaking Changes

This release was accidentally published with a breaking change for Deep Links. If you're using Deep Links, please don't upgrade to this version. We are in the process of changing the DeepLinks API slightly.

Bug Fixes

  • angular: support angular 2.3+ ngc api (13e930a)
  • deep-linking: works when there isn't a valid deep link config (62f05fc)
  • deep-links: adjust paths for AoT (4055d73)
  • sass: output valid source maps, that chrome can parse (#306) (6589550)
  • source-maps: always generate source map, then purge them if not needed in postprocess step (d26b44c)

Features

  • createWorker: pass argv and config_argv to spawned processes (#487) (02dfff8)
  • lint: new option to have stand alone lint bail (b3bb906)

1.0.0 (2017-01-06)

Upgrade Instructions

Execute the following command from your ionic project. This installs a new peer dependency called sw-toolbox that is used to simplify implementing a service-worker.

npm install sw-toolbox --save --save-exact

Bug Fixes

  • build: check to ensure tsconfig contains sourcemaps true. (e6bcf22)
  • config: resolve any inputs that could be paths to absolute paths (50876eb)
  • copy: check for null object and src/dest (eabd125)
  • ngc: revert change to purge decorators (Angular CLI did too) (8aae85c)
  • webpack: update environment plugin for webpack 2 RC3 (be3aac1)
  • websockets: fix exception when no ws clients connected during rebuild (#616) (8685bf8)

0.0.48 (2016-12-19)

Upgrade Instructions

@ionic/app-scripts version 0.0.47 had some breaking changes so please make sure you have performed those upgrade instructions.

Bug Fixes

  • diagnostics: fix null pointers (72adc86)
  • inline-templates: check for existence of content (#557) (b68e125)
  • logging: don't log msgs about websocket state (18185fb)
  • optimization: stop removing decorators (45b0255)
  • serve: find an open port for the notification server if port is used. (d6de413)
  • copy: generate project context if it doesn't exist (26f6db8)

Features

  • sass: enable Sass indented files compilation (#565) (f632298)

0.0.47 (2016-12-12)

Upgrade Instructions

Install latest Ionic CLI

Install the latest ionic cli. sudo may be required depending upon your npm set-up.

npm install -g ionic@latest

Entry Point Changes

Delete main.dev.ts and main.prod.ts and create a main.ts file with the following content:

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

import { AppModule } from './app.module';

platformBrowserDynamic().bootstrapModule(AppModule);

Dev Builds By Default Changes

All builds are now development (non-AoT) builds by default. This allows for a better development experience when testing on a device. To get started, please follow the steps below.

Make sure the scripts section of package.json looks like this:

  "scripts": {
    "ionic:build": "ionic-app-scripts build",
    "ionic:serve": "ionic-app-scripts serve"
  }

ionic run android --prod will do a production build that utilizes AoT compiling and minifaction. ionic emulate ios --prod will do a production build that utilizes AoT compiling and minifaction. ionic run android will do a development build ionic emulate ios will do a development build

If you wish to run AoT but disable minifaction, do the following ionic run android --aot ionic emulate ios --aot

Source Map Changes

Change ionic_source_map to ionic_source_map_type in package.json if it is overridden.

Config Changes

There were significant improvements/changes to most configs. Please review the changes and make sure any custom configs are up to date.

Validate TSConfig settings

Verify that tsconfig.json is up to date with recommended settings:

{
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "declaration": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": [
      "dom",
      "es2015"
    ],
    "module": "es2015",
    "moduleResolution": "node",
    "sourceMap": true,
    "target": "es5"
  },
  "include": [
    "src/**/*.ts"
  ],
  "exclude": [
    "node_modules"
  ],
  "compileOnSave": false,
  "atom": {
    "rewriteTsconfig": false
  }
}

Breaking Changes

  1. main.dev.ts and main.prod.ts have been deprecated in favor of main.ts with the content of main.dev.ts. The content of main.ts will be optimized at build time for production builds.
  2. Builds are now always development (non-AoT) by default. To enable prod builds, use the --prod option.
  3. copy.config and watch.config have breaking changes moving to an easier-to-extend configuration style.
  4. copy.config uses node-glob instead of fs-extra to do the copy. Migrate from directory/files to globs in any custom configs.
  5. ionic_source_map configuration has been changed to ionic_source_map_type.
  6. Source maps now use source-map devtool option by default instead of eval. Change ionic_source_map_type option to return to the faster building eval.

Bug Fixes

  • AoT: dynamically enable prod mode for AoT builds (0594803)
  • AoT: use in-memory data store instead of .tmp directory for AoT codegen (93106ff)
  • build: every build should run clean sync and copy async. (6d4eb6e)
  • copy: Resolve race condition in copy task, move to glob config (cc99a73)
  • lab: add lab to files (f42c980)
  • livereload: livereload now correctly serves cordova plugins on run and emulate. (a0c3f5d)
  • livereload: on project build all pages connected should reload. (#513) (62d6b23)
  • livereload: use localhost instead of 0.0.0.0 when injecting live reload script (#450) (7f8a0c3)
  • logging: remove unnecessary websocket error msg, clean up copy error msg (1517b06)
  • ngc: simpler AoT error reporting (1b0f163)
  • serve: add flag to indicate to serve for a cordova app (93782e7)
  • source-maps: use detailed source-map as default, fix windows path issue (19464b3)
  • workers: generate context in worker threads (af036ec)

Features

  • build: replace --dev flag with --prod and add flags --aot, --minifyJs, --minifyCss, --optimizeJs (99922ce)
  • bundle: pre and post bundle hooks (4835550)
  • copy: update copy config to move web workers (a909fc4)
  • lab: fresh coat of paint (edb6f09)
  • replacePathVars: support interpolation of objects and arrays (#449) (e039d46)
  • all arguments passed should be compared as case insensitive (085c897)

0.0.46 (2016-11-21)

Bug Fixes

  • build: better support for saving multiple files at a time (254bb6c)
  • copy: ionicons copied from ionicons (69f89a8)
  • errors: skip HTTP errors (5906167)
  • proxies: Wrong parameter in Logger.info, in setupProxies function causing proxies not to load (#395) (316b1de)
  • typescript: lock typescript version to 2.0.x for now due to build error with 2.1.x (ef7203b)
  • webpack: fix path resolution (97c23f9)
  • webpack: reference json-loader to account for webpack breaking change (d6fe709)
  • webpack: resolve modules to rootDir (#365) (64eb845)

Features

  • options: allow users to pass their own cleanCss Options (#377) (20df6d4)

0.0.45 (2016-11-17)

Bug Fixes

  • errors: runtime error immediately, selectable stack (70f68da)
  • inline-templates: update bundle and memory file representation on template change (11a949d)
  • rollup: invalidate cache on template change (80c0eb6)
  • webpack: invalidate cache by use of timestamps (4d6bbd5)

Features

  • run-build-update: handle linked npm modules (#375) (0f113c8)
  • serve: add '/ionic-lab' as an alias for the lab html file path. (c319404)

0.0.44 (2016-11-15)

Bug Fixes

  • debug: cmd+shift+8 to show debug menu (a26d729)
  • error: (cmd/ctrl)+8 for debug menu (89550af)
  • error: add header padding for cordova iOS (5c4c547)
  • error: apply correct css for runtime error close (81f1d75)
  • error: fix content scrolling (3b82465)
  • error: reload immediately after js/html update (07f918e)
  • error: safari css fixes (7c2fb59)
  • serve: correct paths so that --lab works (1d99a98)
  • serve: open browser to localhost (14275c7)
  • transpile: normalize and resolve paths always for OS independence (ca6c889)
  • watch: fallback for when chokidar watch ready/error don't fire (happens on windows when file is (519cd7f), closes #282
  • watch: watch now ignores Mac OS meta data files (02d0b8d), closes #331
  • webpack: source maps link to original src for ide debugging (39edd2e)

Features

  • debug: debug menu options (53d6e30)
  • debug: shake device to show debug menu (770f4e3)
  • error: client runtime error reporting (fc40b92)
  • error: syntax and error highlighting (8836310)

0.0.43 (2016-11-10)

Bug Fixes

  • rollup: removing rollup metadata prefix for paths (350a288)
  • watch: remove shorthand arg for watch (0685c0b), closes #290
  • webpack: typo in import, close #326 (#341) (6b89fa2)

0.0.42 (2016-11-09)

Upgrade Steps

To use this version of @ionic/app-scripts, follow these steps to upgrade:

  1. Install the latest version of the ionic cli

     npm install ionic@latest -g

    Note: sudo may be required depending on your workstation set-up

  2. Update the project's package.json file's script section to look like this:

    ...
    "scripts" : {
     "ionic:build": "ionic-app-scripts build",
     "ionic:serve": "ionic-app-scripts serve"
    }
    ...

    Note: This is removing several deprecated Ionic scripts. If you have any of your own custom scripts, don't remove them.

  1. Install the latest version of @ionic/app-scripts

    npm install @ionic/app-scripts@latest --save-dev

Bug Fixes

  • bundling: execute bundle updates if full bundle has completed at least once (fbe56dc)
  • sass: remove broken sass caching (91faf0b)

Features

  • error: use datauri for favicon build status (892cf4a)
  • errors: overlay build errors during development (87f7648)

0.0.41 (2016-11-07)

Bug Fixes

  • webpack: use source-maps instead of eval for prod builds (fdd86be)

0.0.40 (2016-11-07)

Breaking Changes

ionic_source_map variable is now used to drive the devtool (sourcemap) value for webpack. It now defaults to eval for faster builds. Set it to source-map for typescript sourcemaps.

Bug Fixes

  • sourcemaps: fix source maps for all files (066de6d)
  • sourcemaps: webpack .ts sourcemaps (bfca1be)
  • webpack: modify config to use IONIC_APP_SCRIPTS_DIR variable (2b7c606)

Features

  • events: emit bundler events (8d73da9)
  • exports: add templateUpdate and fullBuildUpdate (a31897d)
  • webpack source maps: make it easy to configure source map type (03565b7)

Performance Improvements

  • webpack: speed up webpack build by not using file-system and watches (23ad195)

0.0.39 (2016-10-31)

  • Switch default bundler to Webpack

0.0.36 (2016-10-15)

  • Fix handling multiple async template updates

0.0.35 (2016-10-15)

  • Fix resolving index files correctly
  • Fix template rebuilds for multiple templates in one file
  • Fix ability to watchers to ignore paths

0.0.34 (2016-10-15)

  • Fix silently failed bundles
  • Fix template path resolving issues

0.0.33 (2016-10-14)

  • Improve build times for template changes
  • Fix bundle updates on template changes

0.0.32 (2016-10-14)

  • Fix Windows entry path normalization

0.0.31 (2016-10-13)

  • Add ability use multiple processor cores for various subtasks
  • Use typescript createProgram to transpile entire app
  • Add syntax highlighting and colors to typescript, sass and tslint errors
  • Improved error messages for typescript errors
  • clean task only cleans out the www/build/ directory rather than all of www/
  • Add task to copy src/service-worker.js to www/service-worker.js
  • Add task to copy src/manifest.json to www/manifest.json

0.0.30 (2016-10-06)

  • Fix JS source maps
  • Fix template inlining

0.0.29 (2016-10-05)

  • Addressed memory usage error
  • Dev builds no longer use the .tmp directory
  • Dev build entry files should be the source main.dev.ts file
  • Custom rollup configs should remove the ngTemplate() plugin