{"id":16,"date":"2014-05-06T16:07:19","date_gmt":"2014-05-06T14:07:19","guid":{"rendered":"http:\/\/blog.thecodecampus.de\/?p=16"},"modified":"2025-04-17T11:41:46","modified_gmt":"2025-04-17T09:41:46","slug":"ein-blick-in-die-karten","status":"publish","type":"post","link":"https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/","title":{"rendered":"Ein Blick in die Karten"},"content":{"rendered":"<p>Seit dem Erscheinen der Version 1.0 im Juni 2012 entwickeln wir bei <a href=\"https:\/\/www.w11k.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">WeigleWilczek<\/a>\u00a0sowohl interne als auch Kunden-Projekte mit <a href=\"https:\/\/angularjs.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">AngularJS<\/a>. In dieser Zeit haben wir viel \u00fcber AngularJS und die Art und Weise mit AngularJS Webanwendungen zu entwickeln gelernt. Mit diesem und den folgenden Posts m\u00f6chte ich einen Einblick in unseren Entwickler-Alltag, die von uns verwendeten Tools und unsere Erfahrungen mit AngularJS geben.<\/p>\n<h2>Editor oder IDE<\/h2>\n<p>Grunds\u00e4tzlich l\u00e4sst sich f\u00fcr die Entwicklung einer AngularJS Anwendung jeder Editor verwenden. Syntax-Highlighting f\u00fcr die verwendeten Sprachen JavaScript, HTML und CSS sollten dabei aber das Minimum an Ausstattung sein.<\/p>\n<p>F\u00fcr viele Leute, die bisher haupts\u00e4chlich mit statisch typisierten Sprachen, die kompiliert werden, gearbeitet haben stellt die dynamische Typisierung und die Flexibilit\u00e4t, die JavaScript mit sich bringt, am Anfang eine gro\u00dfe H\u00fcrde da. Abhilfe kann hier JSLint bzw. der Fork JSHint schaffen. JSLint ist ein Programm zur statischen Code Analyse und kann viele Fehler, die ein Compiler einer statisch typisierten Sprache bemerken w\u00fcrde, ebenfalls bereits zur Entwicklungszeit erkennen.<\/p>\n<p>Je gr\u00f6\u00dfer ein Projekt wird, desto schwieriger wird es im Code den \u00dcberblick zu behalten und in ihm zu navigieren. Hier kann wie in der statisch typisierten Welt eine gute IDE helfen. Moderne IDEs k\u00f6nnen auch bei JavaScript viele gute Vorschl\u00e4ge beim Navigieren oder bei der Autovervollst\u00e4ndigung anbieten. Diese sind nur immer mit etwas Vorsicht zu genie\u00dfen, da die IDE eben nicht 100% sicher sein kann, ob sie das richtige verschl\u00e4gt. Ich verwende am liebsten WebStorm bzw. den gro\u00dfen Bruder IntelliJ. Achtung: IntelliJ in der kostenlosen Community Edition hat weniger Web-Funktionen als das kostenpflichtige WebStorm, da es eigentlich eine Java IDE ist. IntelliJ Ultimate ist beides: Web- und Java-IDE. Gerade was die bereits erw\u00e4hnte Punkte Navigation im Code und Autovervollst\u00e4ndigung angeht hat IntelliJ sehr viel zu bieten.<br \/>\nEiner weiterer der gro\u00dfen Vorteile von WebStorm\/IntelliJ ist das AngularJS Plugin. Durch dieses kann die IDE im HTML Code f\u00fcr die von AngularJS mitgelieferten Direktiven Autocompletion anbieten. Zus\u00e4tzlich kann man bei Expressions wie bei ng-click direkt zur Definition von Funktionen im Scope springen. Im JavaScript Code steht Autocompletion f\u00fcr alle AngularJS Funktionen zur Verf\u00fcgung.<br \/>\n<a href=\"https:\/\/blog.thecodecampus.de\/wp-content\/uploads\/2014\/05\/ide.png\"><img decoding=\"async\" class=\"img-responsive\" src=\"https:\/\/blog.thecodecampus.de\/wp-content\/uploads\/2014\/05\/ide.png\" alt=\"IntelliJ with AngularJS Plugin\" \/><\/a><\/p>\n<p>Alles in allem lohnt es sich meiner Meinung nach auf eine IDE statt auf einen Text-Editor zu setzen und sich ggf. auch in eine neue IDE einzuarbeiten bzw. sie anzuschaffen.<\/p>\n<div class=\"box small important\">Tip: Vern\u00fcnftige JavaScript IDE verwenden!<br \/>\nAktuelle Empfehlung: WebStorm bzw. IntelliJ<\/div>\n<p><\/p>\n<p><a href=\"https:\/\/www.thecodecampus.de\/schulungen\/angular\" style=\"display: inline-block;\">\n<picture><source srcset=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/04\/angular-schulungen_anne_WP_big.png\" media=\"(min-width: 1024px)\"><source srcset=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/04\/angular-schulungen_anne_WP_medium.png\" media=\"(min-width: 600px)\"><img decoding=\"async\" src=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/04\/angular-schulungen_anne_WP_small.png\" alt=\"Angular Schulungen\" class=\"alignnone size-full wp-image-38\">\n<\/picture>\n<\/a><\/p>\n<h2>Dependency Management<\/h2>\n<p>F\u00fcr die meisten Sprachen bzw. Eco-Systeme wie Python, Ruby, Java, &#8230; gibt es Tools, die Abh\u00e4ngigkeiten zu anderen Bibliotheken verwalten. Der Funktionsumfang ist dabei unterschiedlich. Maven in der Java-Welt sorgt z.B. nicht nur f\u00fcr das Herunterladen der angegeben Bibliothek in der angegebenen Version, sondern auch f\u00fcr das automatische Hinzuf\u00fcgen der Klassen der Bibliothek zum Classpath. Andere Tools sorgen nur daf\u00fcr, dass die Bibliothek runter geladen wird, binden diese aber nicht automatisch ein.<\/p>\n<p>Im Web-Bereich wurden Abh\u00e4ngigkeiten bisher fast immer von Hand gepflegt. Man l\u00e4dt eine Version von der Website des Projekts runter, legt sie in einem Verzeichnis eventuell unterhalb einer gewissen Ordner-Struktur \u00a0ab und bindet die Datei(en) in die index.html ein. Das hat vor allem den Nachteil, dass man sich auch um die sogenannten transitiven Abh\u00e4ngigkeiten, also die Abh\u00e4ngigkeiten der Abh\u00e4ngigkeiten selbst k\u00fcmmern muss und Konflikte bei kompatiblen Versionen so nur recht schwierig zu bemerken sind.<\/p>\n<p>Mit <a href=\"https:\/\/bower.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">bower<\/a> hat das zum Gl\u00fcck ein Ende. Abh\u00e4ngigkeiten werden bei bower in einer Datei bower.json gespeichert und per Kommandozeile mit <code>bower install<\/code> heruntergeladen. Dabei k\u00f6nnen wie im Beispiel unten zu sehen variable Versionsnummern verwendet werden. Bower erkennt Konflikte und fragt welche Version verwendet werden soll. Um das Einbinden der im Paket enthaltenen Dateien muss man sich selbst k\u00fcmmern. Ein Paket muss dabei nicht zwangsl\u00e4ufig JavaScript Code enthalten, sondern kann auch beispielsweise CSS oder Bilder mit sich bringen.<\/p>\n<pre title=\"bower.json\">{\r\n  \"name\": \"w11k-select\",\r\n  \"version\": \"0.3.4\",\r\n\r\n  \"dependencies\": {\r\n    \"angular\": \"1.2.x\",\r\n    \"w11k-dropdownToggle\": \"0.1.x\",\r\n    \"angular-bindonce\": \"0.3.x\"\r\n  },\r\n  \"devDependencies\": {\r\n    \"font-awesome\": \"4.0.x\",\r\n    \"bootstrap\": \"3.1.0\",\r\n    \"es5-shim\": \"2.3.0\"\r\n  }\r\n}\r\n<\/pre>\n<p>Bower l\u00e4dt die Pakete aus ihren jeweiligen Repositories runter. Es gibt also kein zentrales Repository f\u00fcr alle bekannten Pakete. Das hat den gro\u00dfen Vorteil, dass auch kein zentrales Repository ausfallen kann, wie k\u00fcrzlich bei NPM geschehen.\u00a0Leider ist bower aber etwas anf\u00e4llig f\u00fcr Verbindungsabbr\u00fcche. Das ist besonders \u00e4rgerlich, wenn man bower auf einem CI-Server einsetzt und der Build fehlschl\u00e4gt nur weil bower ein Verbindungsproblem hatte. Beim n\u00e4chsten Aufruf des Builds funktioniert dann meistens alles wieder reibungslos, sofern nicht wirklich ein Problem mit Abh\u00e4ngigkeiten vorliegt.<\/p>\n<p>Um das Problem zumindest tempor\u00e4r zu umgehen, kann man bower anweisen Pakete nur aus dem lokalen Cache zu installieren und diesen nicht \u00fcber das Internet zu validieren. Daf\u00fcr einfach den Parameter <i>-o<\/i> mitgeben, also z.B. <code>bower install -o<\/code>.<\/p>\n<p>Eine Stolperfalle hat bower noch zu bieten: <i>bower install<\/i> installiert nur noch nicht vorhandene Pakete. Besteht eine Abh\u00e4ngigkeit zu einem Paket in der Version 1.2.x und es ist momentan Version 1.2.15 installiert, so wird bei <i>bower install<\/i> nicht die neuere Version 1.2.16 heruntergeladen, da schon eine Version des Pakets installiert ist. Ruft man\u00a0<code>bower update<\/code> werden auch f\u00fcr bereits installierte Pakete neue Versionen gesucht. In fr\u00fcheren Bower Versionen hat <i>bower update<\/i> aber keine neuen Abh\u00e4ngigkeiten installiert. Das scheint jetzt behoben zu sein, so dass eigentlich <i>bower update<\/i> ausreichen sollte.<\/p>\n<div class=\"box small important\">Auf Nummer sicher gehen: Im automatisierten Build immer <code>bower install &amp;&amp; bower update<\/code> aufrufen.<\/div>\n<p>F\u00fcr die direkten Abh\u00e4ngigkeiten eines Projekts hat es sich bei uns bew\u00e4hrt auf variable Versionsnummern zu verzichten und immer eine vollst\u00e4ndige SemVer-Version anzugeben. Wenn das Projekt (die Abh\u00e4ngigkeit) nicht mit <a href=\"https:\/\/semver.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">SemVer<\/a> und Tags arbeitet kann man bei bower auch einen git-Commit-Hash angeben. Auch wenn SemVer eigentlich vorgibt, dass Patch-Versionen kompatibel zueinander sein sollen, kommt es immer mal wieder vor, dass die eigene Anwendung mit dem einen Patch-Level funktioniert und mit dem anderen nicht. Damit so etwas nicht erst beim erstellen des Releases auff\u00e4llt, sollte man feste Versionen eintragen und das Update explizit von hand durchf\u00fchren.<\/p>\n<p>Manchmal kann es auch hilfreich sein eine eigentlich transitive Abh\u00e4ngigkeit als direkte anzugeben um eine fixe Versionsnummer angeben zu k\u00f6nnen wenn in der eigentlichen Abh\u00e4ngigkeit eine variable Version angegeben ist.<\/p>\n<div class=\"box small important\">Bew\u00e4hrte Versionierung von Abh\u00e4ngigkeiten<br \/>\nFixe Versionen bei Entwicklung einer Anwendung<br \/>\nVariables Patch-Level bei Entwicklung einer Bibliothek<\/div>\n<h2>Module<\/h2>\n<p>Jetzt wissen wir, wie wir Abh\u00e4ngigkeiten verwalten wollen. Aber welche haben wir denn in der Regel so? Bei unseren bisherigen Projekten haben sich einige Bibliotheken und AngularJS-Module als sehr n\u00fctzlich bis unersetzlich erwiesen. In unserer bower.json steht daher fast immer:<\/p>\n<ul>\n<li>AngularJS 1.2 im m\u00f6glichst aktuellen Patch<\/li>\n<li><a href=\"https:\/\/angular-ui.github.io\/ui-router\/site\/#\/api\/ui.router\" target=\"_blank\" rel=\"noopener noreferrer\">AngularUI Router<\/a> als m\u00e4chtige und flexiblere Alternative zum eigenen Routing von AngularJS (ngRoute)<\/li>\n<li><a href=\"https:\/\/angular-translate.github.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">angular-translate<\/a> f\u00fcr Internationalisierung<\/li>\n<li><a href=\"https:\/\/getbootstrap.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Twitter Bootstrap<\/a>\u00a0f\u00fcr das Styling und <a href=\"https:\/\/angular-ui.github.io\/bootstrap\/\" target=\"_blank\" rel=\"noopener noreferrer\">AngularUI Bootstrap<\/a>\u00a0f\u00fcr einige UI Komponenten<\/li>\n<li><a href=\"https:\/\/lodash.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">lodash<\/a>\u00a0f\u00fcr mehr funktionale Programmierung und <a href=\"https:\/\/momentjs.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">moment.js<\/a>\u00a0f\u00fcr den leichteren Umgang mit Datums- und Zeit-Werten<\/li>\n<li><a href=\"https:\/\/github.com\/Pasvaz\/bindonce\" target=\"_blank\" rel=\"noopener noreferrer\">angular-bindonce<\/a> f\u00fcr etwas mehr Performance bei gro\u00dfen Datenmengen<\/li>\n<\/ul>\n<h2>Internet Explorer 8 und Internet Explorer 9<\/h2>\n<p>Muss man IE8 und IE9 unterst\u00fctzen sollte man einige Polyfills einsetzen um fehlendes Verhalten und APIs nach zur\u00fcsten. Die wichtigsten sind:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/scottjehl\/Respond\" target=\"_blank\" rel=\"noopener noreferrer\">respond<\/a> f\u00fcr CSS3 Media Queries<\/li>\n<li><a href=\"https:\/\/github.com\/es-shims\/es5-shim\" target=\"_blank\" rel=\"noopener noreferrer\">es5-shim<\/a> f\u00fcr EcmaScript 5 Methoden<\/li>\n<li><a href=\"https:\/\/github.com\/paulmillr\/console-polyfill\" target=\"_blank\" rel=\"noopener noreferrer\">console-polyfill<\/a> zum Loggen auf die Konsole \u00fcber das <i>console<\/i> Objekt<\/li>\n<li><a href=\"https:\/\/bestiejs.github.io\/json3\/\" target=\"_blank\" rel=\"noopener noreferrer\">json3<\/a> f\u00fcr JSON Support<\/li>\n<\/ul>\n<p>Mithilfe dieser Polyfills und etwas Obacht bei der Verwendung von AngularJS kann man Anwendungen entwickeln, die auch in \u00e4lteren IE Versionen gut funktionieren. Bei AngularJS ist besonders darauf zu achten, dass man Direktiven nicht als Tags sondern als Attribute verwendet. In der AngularJS Dokumentation gibt es eine <a href=\"https:\/\/docs.angularjs.org\/guide\/ie\" target=\"_blank\" rel=\"noopener noreferrer\">Seite<\/a> zur Verwendung in \u00e4lteren IE Versionen. Allgemein sollte beachtet werden, dass IE8 und auch IE9 eine sehr langsame JavaScript Engine haben uns so die Verarbeitung gr\u00f6\u00dferer Datenmengen zu einem Problem werden kann.<\/p>\n<div class=\"box small important\">Direktiven im IE8:<br \/>\n<code>&lt;div directive&gt;&lt;\/div&gt;<\/code> statt <code>&lt;directive&gt;&lt;\/directive&gt;<\/code> verwenden!<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Seit dem Erscheinen der Version 1.0 im Juni 2012 entwickeln wir bei WeigleWilczek\u00a0sowohl interne als auch Kunden-Projekte mit AngularJS. In dieser Zeit haben wir viel \u00fcber AngularJS und die Art und Weise mit AngularJS Webanwendungen zu entwickeln gelernt. Mit diesem und den folgenden Posts m\u00f6chte ich einen Einblick in unseren Entwickler-Alltag, die von uns verwendeten [&#8230;]<br \/><a class=\"meta-big\" href=\"https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/\"> READ MORE<\/a><\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[62,8,6,85,5,10,61,7,9],"class_list":["post-16","post","type-post","status-publish","format-standard","hentry","category-angularjs","tag-angularjs","tag-bower","tag-dependency-management","tag-german","tag-ide","tag-intellij","tag-javascript","tag-modules","tag-webstorm"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Ein Blick in die Karten - Web Development 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:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ein Blick in die Karten - Web Development Blog\" \/>\n<meta property=\"og:description\" content=\"Seit dem Erscheinen der Version 1.0 im Juni 2012 entwickeln wir bei WeigleWilczek\u00a0sowohl interne als auch Kunden-Projekte mit AngularJS. In dieser Zeit haben wir viel \u00fcber AngularJS und die Art und Weise mit AngularJS Webanwendungen zu entwickeln gelernt. Mit diesem und den folgenden Posts m\u00f6chte ich einen Einblick in unseren Entwickler-Alltag, die von uns verwendeten [...] READ MORE\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Development tips and tricks - theCodeCampus Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-05-06T14:07:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-17T09:41:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.thecodecampus.de\/wp-content\/uploads\/2014\/05\/ide.png\" \/>\n<meta name=\"author\" content=\"theCodeCampus\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"theCodeCampus\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/ein-blick-in-die-karten\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/ein-blick-in-die-karten\\\/\"},\"author\":{\"name\":\"theCodeCampus\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/person\\\/276bbda2f8da73154f22fb652201cfbc\"},\"headline\":\"Ein Blick in die Karten\",\"datePublished\":\"2014-05-06T14:07:19+00:00\",\"dateModified\":\"2025-04-17T09:41:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/ein-blick-in-die-karten\\\/\"},\"wordCount\":1291,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/ein-blick-in-die-karten\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.thecodecampus.de\\\/wp-content\\\/uploads\\\/2014\\\/05\\\/ide.png\",\"keywords\":[\"AngularJS\",\"Bower\",\"Dependency Management\",\"German\",\"IDE\",\"IntelliJ\",\"JavaScript\",\"Modules\",\"WebStorm\"],\"articleSection\":[\"AngularJS 1\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/ein-blick-in-die-karten\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/ein-blick-in-die-karten\\\/\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/ein-blick-in-die-karten\\\/\",\"name\":\"Ein Blick in die Karten - Web Development Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/ein-blick-in-die-karten\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/ein-blick-in-die-karten\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.thecodecampus.de\\\/wp-content\\\/uploads\\\/2014\\\/05\\\/ide.png\",\"datePublished\":\"2014-05-06T14:07:19+00:00\",\"dateModified\":\"2025-04-17T09:41:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/ein-blick-in-die-karten\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/ein-blick-in-die-karten\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/ein-blick-in-die-karten\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blog.thecodecampus.de\\\/wp-content\\\/uploads\\\/2014\\\/05\\\/ide.png\",\"contentUrl\":\"https:\\\/\\\/blog.thecodecampus.de\\\/wp-content\\\/uploads\\\/2014\\\/05\\\/ide.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/ein-blick-in-die-karten\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ein Blick in die Karten\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\",\"name\":\"Web Development tips and tricks - theCodeCampus Blog\",\"description\":\"Tips, tricks, and experiences about developing web and mobile applications with Angular, TypeScript, and Testing.\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\",\"name\":\"theCodeCampus\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch.jpg\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch.jpg\",\"width\":156,\"height\":156,\"caption\":\"theCodeCampus\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/person\\\/276bbda2f8da73154f22fb652201cfbc\",\"name\":\"theCodeCampus\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch-96x96.jpg\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch-96x96.jpg\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch-96x96.jpg\",\"caption\":\"theCodeCampus\"},\"description\":\"Our knowledge is not simply gained through reading - it is trained, tested and constantly being expanded. Because first and foremost, we are all developers at W11K. The know-how that we acquire here as developers, consultants and information architects flows immediately into our training courses and articles for theCodeCampus.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/showcase\\\/thecodecampus\\\/\"],\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ein Blick in die Karten - Web Development 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:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/","og_locale":"en_US","og_type":"article","og_title":"Ein Blick in die Karten - Web Development Blog","og_description":"Seit dem Erscheinen der Version 1.0 im Juni 2012 entwickeln wir bei WeigleWilczek\u00a0sowohl interne als auch Kunden-Projekte mit AngularJS. In dieser Zeit haben wir viel \u00fcber AngularJS und die Art und Weise mit AngularJS Webanwendungen zu entwickeln gelernt. Mit diesem und den folgenden Posts m\u00f6chte ich einen Einblick in unseren Entwickler-Alltag, die von uns verwendeten [...] READ MORE","og_url":"https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/","og_site_name":"Web Development tips and tricks - theCodeCampus Blog","article_published_time":"2014-05-06T14:07:19+00:00","article_modified_time":"2025-04-17T09:41:46+00:00","og_image":[{"url":"https:\/\/blog.thecodecampus.de\/wp-content\/uploads\/2014\/05\/ide.png","type":"","width":"","height":""}],"author":"theCodeCampus","twitter_card":"summary_large_image","twitter_misc":{"Written by":"theCodeCampus","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/#article","isPartOf":{"@id":"https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/"},"author":{"name":"theCodeCampus","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/person\/276bbda2f8da73154f22fb652201cfbc"},"headline":"Ein Blick in die Karten","datePublished":"2014-05-06T14:07:19+00:00","dateModified":"2025-04-17T09:41:46+00:00","mainEntityOfPage":{"@id":"https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/"},"wordCount":1291,"commentCount":0,"publisher":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#organization"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.thecodecampus.de\/wp-content\/uploads\/2014\/05\/ide.png","keywords":["AngularJS","Bower","Dependency Management","German","IDE","IntelliJ","JavaScript","Modules","WebStorm"],"articleSection":["AngularJS 1"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/","url":"https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/","name":"Ein Blick in die Karten - Web Development Blog","isPartOf":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/#primaryimage"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.thecodecampus.de\/wp-content\/uploads\/2014\/05\/ide.png","datePublished":"2014-05-06T14:07:19+00:00","dateModified":"2025-04-17T09:41:46+00:00","breadcrumb":{"@id":"https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/#primaryimage","url":"https:\/\/blog.thecodecampus.de\/wp-content\/uploads\/2014\/05\/ide.png","contentUrl":"https:\/\/blog.thecodecampus.de\/wp-content\/uploads\/2014\/05\/ide.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.thecodecampus.de\/blog\/ein-blick-in-die-karten\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.thecodecampus.de\/blog\/"},{"@type":"ListItem","position":2,"name":"Ein Blick in die Karten"}]},{"@type":"WebSite","@id":"https:\/\/www.thecodecampus.de\/blog\/#website","url":"https:\/\/www.thecodecampus.de\/blog\/","name":"Web Development tips and tricks - theCodeCampus Blog","description":"Tips, tricks, and experiences about developing web and mobile applications with Angular, TypeScript, and Testing.","publisher":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.thecodecampus.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.thecodecampus.de\/blog\/#organization","name":"theCodeCampus","url":"https:\/\/www.thecodecampus.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch.jpg","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch.jpg","width":156,"height":156,"caption":"theCodeCampus"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/person\/276bbda2f8da73154f22fb652201cfbc","name":"theCodeCampus","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch-96x96.jpg","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch-96x96.jpg","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch-96x96.jpg","caption":"theCodeCampus"},"description":"Our knowledge is not simply gained through reading - it is trained, tested and constantly being expanded. Because first and foremost, we are all developers at W11K. The know-how that we acquire here as developers, consultants and information architects flows immediately into our training courses and articles for theCodeCampus.","sameAs":["https:\/\/www.linkedin.com\/showcase\/thecodecampus\/"],"url":"https:\/\/www.thecodecampus.de\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/16","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/comments?post=16"}],"version-history":[{"count":51,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/16\/revisions"}],"predecessor-version":[{"id":3366,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/16\/revisions\/3366"}],"wp:attachment":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/media?parent=16"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/categories?post=16"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/tags?post=16"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}