{"id":1478,"date":"2016-10-31T15:36:56","date_gmt":"2016-10-31T15:36:56","guid":{"rendered":"https:\/\/ionic.io\/blog\/?p=1478"},"modified":"2017-01-09T06:33:14","modified_gmt":"2017-01-09T06:33:14","slug":"ionic-build-process-updates","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/ionic-build-process-updates","title":{"rendered":"Ionic Build Process Updates"},"content":{"rendered":"<p>Hello Ionites! Happy Halloween! ? I just wanted to give you a heads up about some changes to to our <code>@ionic\/app-scripts<\/code> package. This package manages the build process for Ionic RC apps.<\/p>\n<p>When we released Ionic RC a few weeks back, we made significant changes to the build process for Ionic apps. A few of these changes were necessary to make the leap to the production release of Angular 2, and a few were some of our ambitious ideas to simplify and dramatically improve the Ionic build process. Or goal is and will always be to reduce the amount of knowledge developers need to have about modern JS build tools to build Ionic apps.<\/p>\n<p>The production release of Angular introduced several new concepts, including <a href=\"https:\/\/angular.io\/docs\/ts\/latest\/guide\/ngmodule.html\">NgModules<\/a> and <a href=\"https:\/\/angular.io\/docs\/ts\/latest\/cookbook\/aot-compiler.html\">Ahead-of-time compiling<\/a>. These changes will be very positive for Ionic apps, but they have also caused some frustration for developers making the transition to Ionic 2 RC with Angular 2 Final. We\u2019re really sorry about that. We recognize that we could have done a better job with documentation and examples during the transition. We are working around the clock to try to improve the developer experience with <code>ngc<\/code>, the Angular AoT compiler. We\u2019re actively working with the Angular team to improve the quality of error messages and improve build times from <code>ngc<\/code>.<\/p>\n<p>In addition, we underestimated the impact of some of our more ambitious changes with the build process. We chose a tool called <a href=\"http:\/\/rollupjs.org\">Rollup<\/a> to \u201cbundle\u201d our code together. Rollup is a tool that specializes in blazing fast start-up performance and a small bundle size. In our internal testing, everything went well for the most part. When we released this to the community, we found the tool to be challenging for developers to use when working with <a href=\"http:\/\/ionicframework.com\/docs\/v2\/resources\/third-party-libs\/\">third party libraries<\/a> that weren\u2019t using the modern ES2015 module format yet. Working around this for commonjs and other types of modules required complicated configuration and in some cases just wouldn\u2019t work at all. We are sorry for any frustration this may have caused, and we have a solution that is more forgiving and is going to work better for Ionic devs moving forward.<br \/>\n<!--more--><\/p>\n<h2>What\u2019s changing<\/h2>\n<p>As a result of the challenges with Rollup, we are switching to a different bundling tool called <a href=\"https:\/\/webpack.github.io\/\">Webpack 2<\/a>. Webpack 2 is a more mature tool that we think will alleviate some of the challenges associated with the Ionic RC build process. Today, we are releasing a new version of <code>@ionic\/app-scripts<\/code> that makes Webpack 2 the default bundler. We are still going to support Rollup, and if you\u2019re using Rollup and happy with it, we encourage you to continue using it. Think of Rollup as a more strict, standards-focused build tool.<\/p>\n<p>If you wish to keep using Rollup, there are two options: If you have a custom <code>rollup.config.js<\/code> file set-up, <code>@ionic\/app-scripts<\/code> will continue to use it by default. If you haven\u2019t needed to add a custom configuration file, you can <a href=\"https:\/\/github.com\/driftyco\/ionic-app-scripts#custom-config-files\">follow the documentation<\/a> to set it up.<\/p>\n<p>If you\u2019re familiar with Webpack, you might know that it usually needs a good amount of configuration before it\u2019s ready to go. Our goal is to make Ionic\u2019s build chain zero-configuration, while still enabling power users to add custom loaders and features they want to use. We feel very strongly that the JS build chain is too complicated today, so I hope you see our goals through the lens of trying to remove the build process as a point of complexity for Ionic development.<\/p>\n<h2>What do I need to do?<\/h2>\n<p>Please update the content of your <a href=\"https:\/\/raw.githubusercontent.com\/driftyco\/ionic2-app-base\/master\/tsconfig.json\">tsconfig.json<\/a> file to match the latest version we&#8217;re providing. After that, everything with the switch to Webpack 2 should be seamless once the latest version of <code>@ionic\/app-scripts<\/code> is installed. If you run into any issues, please <a href=\"https:\/\/github.com\/driftyco\/ionic-app-scripts\/issues\/new\">let us know<\/a>.<\/p>\n<p>To install the latest version, run the following command from the Ionic project directory:<\/p>\n<pre><code>npm install @ionic\/app-scripts@latest\n<\/code><\/pre>\n<h2>Roadmap<\/h2>\n<p>Over the next few weeks, we will continue to rapidly release new version of <code>@ionic\/app-scripts<\/code> as we fix bugs and add functionality.<\/p>\n<ul>Here\u2019s what we view as high priorities:<\/ul>\n<li>Reducing build time even more<\/li>\n<li>Improving source map quality<\/li>\n<li>Improving developer experience with Angular AoT and NgModule<\/li>\n<li>Providing hooks into the build process to inject custom data\/logic<\/li>\n<li>Making the build process more configurable<\/li>\n<li>Continuing to iterate to shrink bundle size<\/li>\n<li>Focusing on the unique build and performance requirements of Progressive Web Apps<\/li>\n<p><\/p>\n<p>Please let us know what you think of <code>@ionic\/app-scripts<\/code>, and if you feel we\u2019re missing the boat on anything. I\u2019ve created a thread for discussion <a href=\"https:\/\/github.com\/driftyco\/ionic-app-scripts\/issues\/273\">here<\/a>.<\/p>\n<h2>Conclusion<\/h2>\n<p>We have made significant improvements to the build process since we released Ionic RC a few short weeks ago. If you haven\u2019t updated, now is a great time to do so. We want to say a resounding THANK YOU to the Ionic community for sticking with us during the transition. All of the great issues and feedback on the <code>@ionic\/app-scripts<\/code> project are very much appreciated. The feedback has been excellent and we are iterating quickly to provide a simple and powerful developer experience. Happy hacking!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello Ionites! Happy Halloween! ? I just wanted to give you a heads up about some changes to to our @ionic\/app-scripts package. This package manages the build process for Ionic RC apps. When we released Ionic RC a few weeks back, we made significant changes to the build process for Ionic apps. A few of [&hellip;]<\/p>\n","protected":false},"author":32,"featured_media":1632,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"publish_to_discourse":"","publish_post_category":"","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"","discourse_permalink":"","wpdc_publishing_response":"","wpdc_publishing_error":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[3,13],"class_list":["post-1478","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-all","tag-ionic","tag-ionic-2"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.0 (Yoast SEO v23.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ionic Build Process Updates - Ionic Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ionic.io\/blog\/ionic-build-process-updates\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ionic Build Process Updates\" \/>\n<meta property=\"og:description\" content=\"Hello Ionites! Happy Halloween! ? I just wanted to give you a heads up about some changes to to our @ionic\/app-scripts package. This package manages the build process for Ionic RC apps. When we released Ionic RC a few weeks back, we made significant changes to the build process for Ionic apps. A few of [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/ionic-build-process-updates\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-10-31T15:36:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-01-09T06:33:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2015\/07\/ionic-meta.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Dan Bucholtz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@danbucholtz\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dan Bucholtz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/ionic-build-process-updates#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-build-process-updates\"},\"author\":{\"name\":\"Dan Bucholtz\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/247db98096bf7230497663cd9580359c\"},\"headline\":\"Ionic Build Process Updates\",\"datePublished\":\"2016-10-31T15:36:56+00:00\",\"dateModified\":\"2017-01-09T06:33:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-build-process-updates\"},\"wordCount\":843,\"commentCount\":16,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-build-process-updates#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2015\/07\/ionic-meta.jpg\",\"keywords\":[\"Ionic\",\"Ionic 2\"],\"articleSection\":[\"All\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/ionic-build-process-updates#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/ionic-build-process-updates\",\"url\":\"https:\/\/ionic.io\/blog\/ionic-build-process-updates\",\"name\":\"Ionic Build Process Updates - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-build-process-updates#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-build-process-updates#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2015\/07\/ionic-meta.jpg\",\"datePublished\":\"2016-10-31T15:36:56+00:00\",\"dateModified\":\"2017-01-09T06:33:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-build-process-updates#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/ionic-build-process-updates\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/ionic-build-process-updates#primaryimage\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2015\/07\/ionic-meta.jpg\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2015\/07\/ionic-meta.jpg\",\"width\":1200,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/ionic-build-process-updates#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ionic Build Process Updates\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ionic.io\/blog\/#website\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"name\":\"ionic.io\/blog\",\"description\":\"Build amazing native and progressive web apps with the web\",\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ionic.io\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/ionic.io\/blog\/#organization\",\"name\":\"Ionic\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"width\":1920,\"height\":854,\"caption\":\"Ionic\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/ionicframework\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/247db98096bf7230497663cd9580359c\",\"name\":\"Dan Bucholtz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2418cd3c627ca2267ff499530ce9831a41ed4a5530f75d06d6494dbb42d2ee00?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2418cd3c627ca2267ff499530ce9831a41ed4a5530f75d06d6494dbb42d2ee00?s=96&d=mm&r=g\",\"caption\":\"Dan Bucholtz\"},\"description\":\"I'm a software engineer for Ionic\",\"sameAs\":[\"https:\/\/x.com\/danbucholtz\"],\"url\":\"https:\/\/ionic.io\/blog\/author\/danb\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ionic Build Process Updates - Ionic Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ionic.io\/blog\/ionic-build-process-updates","og_locale":"en_US","og_type":"article","og_title":"Ionic Build Process Updates","og_description":"Hello Ionites! Happy Halloween! ? I just wanted to give you a heads up about some changes to to our @ionic\/app-scripts package. This package manages the build process for Ionic RC apps. When we released Ionic RC a few weeks back, we made significant changes to the build process for Ionic apps. A few of [&hellip;]","og_url":"https:\/\/ionic.io\/blog\/ionic-build-process-updates","og_site_name":"Ionic Blog","article_published_time":"2016-10-31T15:36:56+00:00","article_modified_time":"2017-01-09T06:33:14+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2015\/07\/ionic-meta.jpg","type":"image\/jpeg"}],"author":"Dan Bucholtz","twitter_card":"summary_large_image","twitter_creator":"@danbucholtz","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Dan Bucholtz","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/ionic-build-process-updates#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/ionic-build-process-updates"},"author":{"name":"Dan Bucholtz","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/247db98096bf7230497663cd9580359c"},"headline":"Ionic Build Process Updates","datePublished":"2016-10-31T15:36:56+00:00","dateModified":"2017-01-09T06:33:14+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/ionic-build-process-updates"},"wordCount":843,"commentCount":16,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/ionic-build-process-updates#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2015\/07\/ionic-meta.jpg","keywords":["Ionic","Ionic 2"],"articleSection":["All"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/ionic-build-process-updates#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/ionic-build-process-updates","url":"https:\/\/ionic.io\/blog\/ionic-build-process-updates","name":"Ionic Build Process Updates - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/ionic-build-process-updates#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/ionic-build-process-updates#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2015\/07\/ionic-meta.jpg","datePublished":"2016-10-31T15:36:56+00:00","dateModified":"2017-01-09T06:33:14+00:00","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/ionic-build-process-updates#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/ionic-build-process-updates"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/ionic-build-process-updates#primaryimage","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2015\/07\/ionic-meta.jpg","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2015\/07\/ionic-meta.jpg","width":1200,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/ionic-build-process-updates#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"Ionic Build Process Updates"}]},{"@type":"WebSite","@id":"https:\/\/ionic.io\/blog\/#website","url":"https:\/\/ionic.io\/blog\/","name":"ionic.io\/blog","description":"Build amazing native and progressive web apps with the web","publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ionic.io\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ionic.io\/blog\/#organization","name":"Ionic","url":"https:\/\/ionic.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","width":1920,"height":854,"caption":"Ionic"},"image":{"@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/ionicframework"]},{"@type":"Person","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/247db98096bf7230497663cd9580359c","name":"Dan Bucholtz","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2418cd3c627ca2267ff499530ce9831a41ed4a5530f75d06d6494dbb42d2ee00?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2418cd3c627ca2267ff499530ce9831a41ed4a5530f75d06d6494dbb42d2ee00?s=96&d=mm&r=g","caption":"Dan Bucholtz"},"description":"I'm a software engineer for Ionic","sameAs":["https:\/\/x.com\/danbucholtz"],"url":"https:\/\/ionic.io\/blog\/author\/danb"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2015\/07\/ionic-meta.jpg","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/1478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/users\/32"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=1478"}],"version-history":[{"count":0,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/1478\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media\/1632"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=1478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=1478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=1478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}