Polymer Tooling
Apps

Polymer Tooling

Lesezeit
13 ​​min

Hinweis:
Dieser Blogartikel ist älter als 5 Jahre – die genannten Inhalte sind eventuell überholt.

Nachdem mit Polymer 1.0 eine stabile Basis für produktive Anwendung der Bibliothek geschaffen wurde, ist es die Top-Priorität des Entwickler:innen-Teams, das Tooling rund um Polymer zu verbessern, damit Polymer nicht nur theoretisch, sondern auch praktisch zur Entwicklung von modernen Webapps eingesetzt wird. Dabei stehen generell nicht nur Entwicklungsgeschwindigkeit und Performance sondern auch die Wiederverwendbarkeit und korrekte Dokumentation von selbst erstellen Komponenten im Fokus.

In diesem Artikel wird gezeigt, welche Tools, die den Gebrauch von Polymer im Entwickler:innen-Alltag vereinfachen, heute schon bereitstehen oder sich in der aktiven Entwicklung befinden. Dabei wird ein prototypischer Workflow mit Build-Chain anhand der verfügbaren Werkzeuge skizziert, um einen Ausblick auf die zukünftigen Möglichkeiten zu geben.

Getting started

Damit die Entwicklung von eigenen Projekten mithilfe von Polymer auch für Anfänger möglichst einfach ist, hat das Polymer-Team das „Polymer Starterkit“ ins Leben gerufen. Dabei handelt es sich um eine Projektvorlage/ein Template, das eine funktionierende Entwicklungsumgebung bereitstellt, mit der direkt losgelegt werden kann. Zuvor muss allerdings die Node.js-Laufzeitumgebung und das als Build-System verwendete Gulp installiert werden. Als Dependency-Manager wird Bower eingesetzt. Die Vorlage beinhaltet nicht nur die Entwicklungsumgebung sondern auch ein kleines Beispielprojekt, das die verschiedenen Features aufzeigt und ein guter Startpunkt für ein eigenes Projekt ist. Beispielsweise ist ein Router-Element und ein rudimentäres Layout auf Basis von Paper-Elementen bereits inkludiert.

Zum Erzeugen eines neuen Projekts auf Basis des Polymer Starterkit kann entweder die Zip-Datei des neuesten Releases heruntergeladen und entpackt oder das Scaffolding-Tool Yeoman genutzt werden. Für Yeoman gibt es den Polymer-Generator, welcher die Installation des Starterkits und seiner Abhängigkeiten übernimmt.

Das Einrichten mithilfe von Yeoman funktioniert folgendermaßen:

Ohne Yeoman müssen die Abhängigkeiten von Hand installiert werden:

Nach dem Einrichten des Starterkits kann mit dem Befehl „gulp serve“ ein Entwicklungs-Webserver gestartet werden, der die Web-App zu Testzwecken anzeigt. Um die Feedback-Schleife während des Entwickelns möglichst kurz zu halten, horcht gulp auf Datei-Änderungen und lädt bei Bedarf die Web-App im Browser neu.

Der mit gulp realisierte Build-Prozess führt folgende Schritte aus:

  • Optimieren von Bildern und Fonts
  • Minifizieren von Stylesheets, Skripten und HTML-Code
  • Konkatenation aller verwendeten Komponenten in eine einzelne HTML-Datei

Zusätzlich wird Javascript-Code mithilfe von JSHint auf mögliche Fehler untersucht. Im Kapitel „Deployment-Build“ werden die Besonderheiten des Prozesses genauer erklärt.

Mit „gulp test“ können die Unit-Tests der selbst erstellten Komponenten mit dem Web Component Tester ausgeführt werden.

Testen mit WCT

Wie jeder Code sollten mit Polymer erstellte Web Components vor dem Release gründlich getestet werden. Die „Unit“, die sich im Falle Polymer anbietet, ist die einzelne Komponente. Die Tests für eine Komponente werden dabei in einer HTML-Datei gekapselt:

In dieser Vorlage werden der Webcomponent-Polyfill, der Testrunner und die zu testende Komponente geladen. Im body wird das zu testende Element angelegt. Die Tests selbst stehen dann in einem script-Tag, das auf das Element folgt:

suite, test und assert sind Methoden des Testframeworks mocha.js, die automatisch mit dem Web Component Tester (kurz WCT genannt) geladen werden. Mit ihnen ist es nun möglich, Unit-Tests zu formulieren. Diese werden vom Kommandozeilen-Client „wct“ ausgeführt, und zwar in allen installierten Browsern, für die Treiber zur Automatisierung vorhanden sind. Zur Fernsteuerung der Browser setzt der WCT Selenium ein.

Leaky State verhindern

Ein Problem, das beim oben gezeigten Beispiel auftritt, ist der sog. Leaky State – das zu testende Element wird für die einzelnen Tests nicht zurückgesetzt, es behält also seinen internen Zustand, z.B. geladene Daten oder Einstellungen. Dadurch kann ein Testfall einen anderen beeinflussen und die Tests können beispielsweise nicht mehr in beliebiger Reihenfolge ausgeführt werden. Nun wäre es natürlich möglich, das Element vor jedem Test zurückzusetzen. Doch wie es so oft im Polymer-Umfeld heißt: „There is a component for that“. In diesem Fall heißt die erforderliche Komponente test-fixture und kümmert sich darum, dass jeder Test mit exakt den selben Bedingungen startet:

Die Dokumentation kann in Markdown verfasst werden, so sind auch komplexe Dokumente möglich. Wird eine Demo im gleichen Verzeichnis gefunden, so wird diese auch mit eingebunden. Mithilfe des Scripts gp.sh oder dem Befehl gh im Polymer-Yeoman-Generator (yo polymer:gh) lässt sich diese Dokumentation automatisch als Github-Page veröffentlichen – die Schwelle, eine ansprechende und einheitliche Dokumentation für die selbst erstelle Komponente zu veröffentlichen, ist also so niedrig wie möglich gelegt.

UI-Design in Polymer

Wenn komplexe Oberflächen mit Polymer-Komponenten umgesetzt werden, ist es oft unpraktisch, das Layout in Code zu formulieren, das Ergebnis im Browser zu betrachten und dann wieder den Code anzupassen. Tools, bei denen Oberflächen auf grafischem Wege entwickelt werden können, schließen die Feedback-Schleife und machen die Bearbeitung so einfacher und intuitiver. Für die native App-Entwicklung existieren solche Tools in Xcode und Android Studio. Mit dem Polymer Designer gibt es auch für auf Webkomponenten basierende Web-Apps ein entsprechendes Gegenstück. Für Polymer 1.0 wurde ein komplett neues Programm (Designer 2) begonnen, das sich noch in der aktiven Entwicklung befindet. Für Polymer 0.5 Elemente gibt es mit Designer 1 bereits eine nutzbare Version. Der Designer ist selbst als Web-App implementiert, kann aber mithilfe des Electron-Frameworks als herkömmliches Programm installiert werden. Dabei wird die gleiche technische Grundlage wie für Githubs Open Source Editor Atom genutzt.

Viele auf Polymer basierende Webapps nutzen die Paper-Elemente, da sie so ohne Aufwände ein ansprechendes, auf Material Design basierendes Layout generieren können. Um die Standard-Material-Design-Farben anzupassen und ein ansprechendes Farbschema zu wählen, kann auf www.materialpalette.com zurückgegriffen werden. Diese Website generiert automatisch aus einem gewählten Farbschema eine HTML-Datei, die in die eigene Polymer-App eingebunden werden kann und das Aussehen für alle Paper-Elemente von einer zentralen Stelle aus ändert.

Die hier definierten Styles werden automatisch von den Paper-Elementen importiert und überschreiben die Default-Styles.

Component-Hosting leicht gemacht

Es ist oft praktisch, ein Content-Delivery-Network zu nutzen, um externe Abhängigkeiten einer Web-App aufzulösen – der Aufwand, die Abhängigkeiten selbst zu hosten, entfällt; bei großflächiger Verbreitung haben viele User bereits die Abhängigkeit von Besuchen anderer Websites im Browser-Cache und es stehen weltweit performante Server zur Verfügung – auf diese Weise wird die Web-App schnell geladen. Polygit bietet ein einheitliches Interface, das beliebige auf Github gehostete Komponenten als CDN bereitstellt. So lädt beispielsweise die folgende URL die Paper-Button Komponente in Version 1.0.2 :

http://polygit.org/paper-button+v1.0.2/components/paper-button/paper-button.html

Der Aufbau der URL ist dabei wie folgt: /[<configurations>/]components/<component>/<path>

<component> und <path> spezifizieren die geladene Komponente und den Pfad innerhalb des Repositories der Komponente, <configurations > sind eine oder mehrere Repositories (mit / getrennt), in denen nach <component> gesucht wird. Zusätzlich kann die Version angegeben werden, * steht für das neueste Release. Die <configuration> super-gif+sjmiles+* würde also zum Repository super-gif der Organisation sjmiles in der neuesten Version aufgelöst werden. Da der Anfang der Import-URLs immer derselbe ist, empfehlen die Polygit-Entwickler:innen, mithilfe des base-Tags den Pfad-Prefix für Includes festzulegen und beim tatsächlichen include nur noch den Komponenten-Namen anzugeben, der anschließend automatisch aus den angegebenen Repositories ausgewählt wird:

Polygit ist mit Vorsicht zu nutzen, da es zwar die Vorteile eines CDNs für die Auslieferung eigener Komponenten (hohe Bandbreite und Georedundanz) bietet, aber auch die Nutzung von Tools wie Polybuild, die Komponenten zusammenfassen, verhindert – mit Polygit muss für jede Komponente mindestens ein HTTP-Request durchgeführt werden. Es muss von Fall zu Fall entschieden werden, ob sich die Verwendung dieses Tools lohnt.

Polygit

Links & Literatur

We’re hiring!

Tapetenwechsel gefällig? Wir sind auf der Suche nach begeisterten Frontend-Entwickler:innen, die unsere Projektteams im Umfeld von JavaScript, HTML und CSS unterstützen und auch vor innovativen Themen wie AngularJS und Progressive Web Apps nicht zurückschrecken. Jetzt Bewerben!

Weiterlesen

Mehr Informationen zu unseren Dienstleistungen rund um die Web-Entwicklung gibt es auf unserer Website. Unser Portfolio umfasst außerdem die Anwendungsentwicklung für Android & iOS mit speziellem Fokus auf Enterprise-Apps. Für direkten Kontakt schreibt an info@inovex.de oder ruft an unter +49 721 619 021-0.

Hat dir der Beitrag gefallen?

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

inoNews

5 gute Gründe für den inovex Newsletter:

  • Exklusive Insights & Tipps unserer inovexperts
  • Infos und Updates zu IT-Trend-Themen & Angeboten
  • Trainingsrabatte & Eventeinladungen
  • Gratis Whitepapers & Infosheets
  • Austausch- & Beratungsoptionen

Zur Newsletter-Anmeldung