{"id":518,"date":"2017-03-15T13:43:00","date_gmt":"2017-03-15T13:43:00","guid":{"rendered":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?p=518"},"modified":"2020-06-05T12:38:16","modified_gmt":"2020-06-05T12:38:16","slug":"angular-project-on-travis-ci","status":"publish","type":"post","link":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/","title":{"rendered":"How to build your Angular project on Travis CI"},"content":{"rendered":"\n<p>Recently, I created an <a href=\"https:\/\/angular.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Angular<\/a> App with current <a href=\"https:\/\/github.com\/angular\/angular-cli\" target=\"_blank\" rel=\"noreferrer noopener\">Angular CLI<\/a> 1.0.0-rc.0 using <a href=\"https:\/\/yarnpkg.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Yarn<\/a> instead of NPM. When I pushed some code to the GitHub repo and opened a pull request for my teammates to review, an information box popped up on GitHub suggesting to connect to a <a href=\"https:\/\/github.com\/integrations\/\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub Integrations<\/a> tool. Then with every push or pull request the app is built and tested by the integration tool, allowing for a quick feedback about whether it is safe to integrate the code. Let&#8217;s give it a try, I thought and decided to go with <a href=\"https:\/\/travis-ci.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Travis CI<\/a>. An hour later I had everything up and running. Here is what you need to do:<\/p>\n\n\n\n<p>First of all, authorize Travis CI to access your GitHub repos and hook into push events. Thanks to GitHub Integrations this is done by the push of two buttons. Second, for Travis CI to build your app it looks for a <code>.travis.yml<\/code> configuration file in your application&#8217;s root folder. This is what it looks like:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td>&nbsp;<\/td><td>dist: trusty<\/td><\/tr><tr><td>&nbsp;<\/td><td>sudo: required<\/td><\/tr><tr><td>&nbsp;<\/td><td>language: node_js<\/td><\/tr><tr><td>&nbsp;<\/td><td>node_js:<\/td><\/tr><tr><td>&nbsp;<\/td><td>&#8211; &#8220;7&#8221;<\/td><\/tr><tr><td>&nbsp;<\/td><td>os:<\/td><\/tr><tr><td>&nbsp;<\/td><td>&#8211; linux<\/td><\/tr><tr><td>&nbsp;<\/td><td>env:<\/td><\/tr><tr><td>&nbsp;<\/td><td>global:<\/td><\/tr><tr><td>&nbsp;<\/td><td>&#8211; DBUS_SESSION_BUS_ADDRESS=\/dev\/null<\/td><\/tr><tr><td>&nbsp;<\/td><td>&#8211; DISPLAY=:99.0<\/td><\/tr><tr><td>&nbsp;<\/td><td>&#8211; CHROME_BIN=chromium-browser<\/td><\/tr><tr><td>&nbsp;<\/td><td>before_script:<\/td><\/tr><tr><td>&nbsp;<\/td><td>&#8211; sh -e \/etc\/init.d\/xvfb start<\/td><\/tr><tr><td>&nbsp;<\/td><td>install:<\/td><\/tr><tr><td>&nbsp;<\/td><td>&#8211; yarn<\/td><\/tr><tr><td>&nbsp;<\/td><td>script:<\/td><\/tr><tr><td>&nbsp;<\/td><td>&#8211; yarn run lint<\/td><\/tr><tr><td>&nbsp;<\/td><td>&#8211; yarn run test &#8212; &#8211;watch=false<\/td><\/tr><tr><td>&nbsp;<\/td><td>&#8211; yarn run pree2e<\/td><\/tr><tr><td>&nbsp;<\/td><td>&#8211; yarn run e2e<\/td><\/tr><tr><td>&nbsp;<\/td><td>cache: yarn<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><a rel=\"noreferrer noopener\" href=\"https:\/\/gist.github.com\/sbley\/819ecb68b1ddd48e032859e8a810dba6#file-travis-yml\" target=\"_blank\">travis.yml<\/a> hosted with \u2764 by <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/\" target=\"_blank\">GitHub<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># .travis.yml\ndist: trusty\nsudo: required\nlanguage: node_js\nnode_js:\n  - \"7\"\nos:\n  - linux\nenv:\n  global:\n    - DBUS_SESSION_BUS_ADDRESS=\/dev\/null\n    - DISPLAY=:99.0\n    - CHROME_BIN=chromium-browser\nbefore_script:\n  - sh -e \/etc\/init.d\/xvfb start\ninstall:\n  - yarn\nscript:\n  - yarn run lint\n  - yarn run test -- --watch=false\n  - yarn run pree2e\n  - yarn run e2e\ncache: yarn<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Travis CI starts up a virtualization environment that will execute your build scripts. Stick with the defaults and select an Ubuntu Trusty on Linux with sudo permissions. Configure the environment to use Node.js and set the required version to at least version 6. I required version 7 because I remembered we had problems with Node.js 6 in a different Angular project. But for a newly created Angular CLI project version 6 should be fine as well.<\/p>\n\n\n\n<p>Now, before running the build scripts a couple of environment variables have to be set. This is to <a href=\"https:\/\/docs.travis-ci.com\/user\/gui-and-headless-browsers\/\" target=\"_blank\" rel=\"noreferrer noopener\">allow running tests that require a graphical user interface<\/a>, in our case for <a href=\"https:\/\/karma-runner.github.io\" target=\"_blank\" rel=\"noreferrer noopener\">Karma<\/a> and <a href=\"https:\/\/github.com\/angular\/protractor\" target=\"_blank\" rel=\"noreferrer noopener\">Protractor<\/a> to run their tests in Google Chrome. The <code>xvfb<\/code> command will launch an X-Server with a virtual display.<\/p>\n\n\n\n<p>As I said earlier, this Travis CI configuration is for Angular CLI projects using the Yarn package manager in favor of NPM. As you might know, Yarn enables us to lock down the project dependencies in a lock file named <code>yarn.lock<\/code> which mitigates the risk of indeterminate dependency versions on different systems. Travis CI comes with <a href=\"https:\/\/blog.travis-ci.com\/2016-11-21-travis-ci-now-supports-yarn\" target=\"_blank\" rel=\"noreferrer noopener\">Yarn support<\/a> and will install Yarn automatically if the project contains both a <code>package.json<\/code> and a <code>yarn.lock<\/code> file. To fetch all dependencies add a <code>yarn install<\/code> command to the Travis CI configuration. You can even omit <code>install<\/code> as this is the default command in Yarn. To speed up builds, the Yarn cache can be saved across builds. See the <code>cache: yarn<\/code> property at the bottom of the config file.<\/p>\n\n\n\n<p>Then add build scripts for linting, Karma tests and Protractor e2e tests. Make sure to disable the watch mode in Karma by adding <code>-- --watch=false<\/code>, otherwise the tests won&#8217;t finish and the build will be stuck forever.<\/p>\n\n\n\n<p>The Protractor e2e tests are likely to fail because Protractor tries to update the webdriver before execution. While this works with NPM it is different with Yarn as it can&#8217;t load the webdriver from a deep link. This is a <a href=\"https:\/\/github.com\/angular\/angular-cli\/pull\/4597\" target=\"_blank\" rel=\"noreferrer noopener\">known issue<\/a> in Angular CLI that is supposed to be fixed soon. For the time being, disable the webdriver update adding <code>--no-webdriver-update<\/code> to the e2e script. Then add a preceding script to update the webdriver before test execution. As this is not a Travis CI related problem, I put these modifications in <code>package.json<\/code> instead of <code>.travis.yml<\/code>.<\/p>\n\n\n\n<p>That&#8217;s all, you&#8217;re done! Push your code to GitHub and watch Travis CI build your app. As a bonus you can <a href=\"https:\/\/docs.travis-ci.com\/user\/status-images\/\" target=\"_blank\" rel=\"noreferrer noopener\">display the build status<\/a> as a badge on your GitHub page or README file. See <a href=\"https:\/\/github.com\/sbley\/angular-ci\" target=\"_blank\" rel=\"noreferrer noopener\">this basic project<\/a> on GitHub and the <a href=\"https:\/\/travis-ci.org\/sbley\/angular-ci\" target=\"_blank\" rel=\"noreferrer noopener\">CI build<\/a> for reference. Feel free to contact me for any questions.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Recently, I created an Angular App using Yarn instead of NPM. An information box popped up on GitHub suggesting to connect to a GitHub Integrations tool.<\/p>\n","protected":false},"author":82,"featured_media":560,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","footnotes":""},"categories":[8],"tags":[284,285,286,287,259,261,282,283],"topics":[],"class_list":["post-518","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web","tag-karma","tag-protractor","tag-angular-app","tag-yarn","tag-angular-cli","tag-angular","tag-github","tag-travis-ci"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to build an Angular project on TravisCI - ZEISS Digital Innovation Blog<\/title>\n<meta name=\"description\" content=\"Recently, I created an Angular App using Yarn instead of NPM. An information box popped up on GitHub suggesting to connect to a GitHub Integrations tool.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to build an Angular project on TravisCI - ZEISS Digital Innovation Blog\" \/>\n<meta property=\"og:description\" content=\"Recently, I created an Angular App using Yarn instead of NPM. An information box popped up on GitHub suggesting to connect to a GitHub Integrations tool.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/\" \/>\n<meta property=\"og:site_name\" content=\"Digital Innovation Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-03-15T13:43:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-06-05T12:38:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2017\/03\/201703_angular_fi.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1281\" \/>\n\t<meta property=\"og:image:height\" content=\"734\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Stefan Bley\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Stefan Bley\" \/>\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\":\"WebPage\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/\",\"name\":\"How to build an Angular project on TravisCI - ZEISS Digital Innovation Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2017\/03\/201703_angular_fi.png\",\"datePublished\":\"2017-03-15T13:43:00+00:00\",\"dateModified\":\"2020-06-05T12:38:16+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/21321b9d87c31953e655370cef0eabe0\"},\"description\":\"Recently, I created an Angular App using Yarn instead of NPM. An information box popped up on GitHub suggesting to connect to a GitHub Integrations tool.\",\"breadcrumb\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/#primaryimage\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2017\/03\/201703_angular_fi.png\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2017\/03\/201703_angular_fi.png\",\"width\":1281,\"height\":734},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to build your Angular project on Travis CI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/\",\"name\":\"Digital Innovation Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/21321b9d87c31953e655370cef0eabe0\",\"name\":\"Stefan Bley\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2023\/08\/Bley_Stefan_Profilbild_1000x1000px-150x150.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2023\/08\/Bley_Stefan_Profilbild_1000x1000px-150x150.jpg\",\"caption\":\"Stefan Bley\"},\"description\":\"Stefan works as a Senior Software Engineer at ZEISS Digital Innovation in Berlin and has been involved in various Java Enterprise and Angular projects. He loves experimenting with technology and shares his knowledge by speaking at conferences and community events. Currently, he is interested in blockchain and distributed ledger technologies.\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/enstefanbley\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to build an Angular project on TravisCI - ZEISS Digital Innovation Blog","description":"Recently, I created an Angular App using Yarn instead of NPM. An information box popped up on GitHub suggesting to connect to a GitHub Integrations tool.","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:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/","og_locale":"en_US","og_type":"article","og_title":"How to build an Angular project on TravisCI - ZEISS Digital Innovation Blog","og_description":"Recently, I created an Angular App using Yarn instead of NPM. An information box popped up on GitHub suggesting to connect to a GitHub Integrations tool.","og_url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/","og_site_name":"Digital Innovation Blog","article_published_time":"2017-03-15T13:43:00+00:00","article_modified_time":"2020-06-05T12:38:16+00:00","og_image":[{"width":1281,"height":734,"url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2017\/03\/201703_angular_fi.png","type":"image\/png"}],"author":"Stefan Bley","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Stefan Bley","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/","name":"How to build an Angular project on TravisCI - ZEISS Digital Innovation Blog","isPartOf":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/#primaryimage"},"image":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2017\/03\/201703_angular_fi.png","datePublished":"2017-03-15T13:43:00+00:00","dateModified":"2020-06-05T12:38:16+00:00","author":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/21321b9d87c31953e655370cef0eabe0"},"description":"Recently, I created an Angular App using Yarn instead of NPM. An information box popped up on GitHub suggesting to connect to a GitHub Integrations tool.","breadcrumb":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/#primaryimage","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2017\/03\/201703_angular_fi.png","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2017\/03\/201703_angular_fi.png","width":1281,"height":734},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/angular-project-on-travis-ci\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/"},{"@type":"ListItem","position":2,"name":"How to build your Angular project on Travis CI"}]},{"@type":"WebSite","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/","name":"Digital Innovation Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/21321b9d87c31953e655370cef0eabe0","name":"Stefan Bley","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/image\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2023\/08\/Bley_Stefan_Profilbild_1000x1000px-150x150.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2023\/08\/Bley_Stefan_Profilbild_1000x1000px-150x150.jpg","caption":"Stefan Bley"},"description":"Stefan works as a Senior Software Engineer at ZEISS Digital Innovation in Berlin and has been involved in various Java Enterprise and Angular projects. He loves experimenting with technology and shares his knowledge by speaking at conferences and community events. Currently, he is interested in blockchain and distributed ledger technologies.","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/enstefanbley\/"}]}},"author_meta":{"display_name":"Stefan Bley","author_link":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/enstefanbley\/"},"featured_img":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2017\/03\/201703_angular_fi-600x344.png","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Web<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Web<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Karma<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Protractor<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Angular App<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Yarn<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Angular-CLI<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Angular<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">GitHub<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Travis CI<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Karma<\/span>","<span class=\"advgb-post-tax-term\">Protractor<\/span>","<span class=\"advgb-post-tax-term\">Angular App<\/span>","<span class=\"advgb-post-tax-term\">Yarn<\/span>","<span class=\"advgb-post-tax-term\">Angular-CLI<\/span>","<span class=\"advgb-post-tax-term\">Angular<\/span>","<span class=\"advgb-post-tax-term\">GitHub<\/span>","<span class=\"advgb-post-tax-term\">Travis CI<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Posted 9 years ago","modified":"Updated 6 years ago"},"absolute_dates":{"created":"Posted on March 15, 2017","modified":"Updated on June 5, 2020"},"absolute_dates_time":{"created":"Posted on March 15, 2017 1:43 pm","modified":"Updated on June 5, 2020 12:38 pm"},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/518","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/users\/82"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/comments?post=518"}],"version-history":[{"count":9,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/518\/revisions"}],"predecessor-version":[{"id":561,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/518\/revisions\/561"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/media\/560"}],"wp:attachment":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/media?parent=518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/categories?post=518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/tags?post=518"},{"taxonomy":"topics","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/topics?post=518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}