Website-Icon qnipp GmbH

Das VulcanJS Framework

Vulcano

Vulcano

Nach den Erfahrungen mit Pup habe ich mir ein weiteres Teil der Meteor-Welt angesehen. VulcanJS ist allerdings kein Boilerplate, sondern sieht sich als ganzes Framework.

Gestartet wird mit dem Klonen bzw. forken des vulcan-starter Repositories. Danach werden wie auch bei Pup die notwendigen npm Pakete installiert.

git clonce git@github.com:VulcanJS/Vulcan-Starter.git
meteor npm install

Die Standard Funktionsumfang von VulcanJS ist deutlich geringer als bei Pup – daher geht auch die Installation deutlich schneller. Bis das Vulcan-Tutorial das erste Mal lokal erreichbar ist, vergehen weniger als 4 Minuten – damit etwas mehr als die hälfte der Zeit die Pup benötigte.

Allerdings fällt sofort ein Problem bei der Installation auf: Das automatisch ausgeführte audit von npm meldet drei als „hoch“ eingestufte Schwachstellen in den eingesetzten Bibliotheken. In der Form sollte die App jedenfalls nicht produktiv verwendet werden. Das Problem wurde inzwischen jedoch erkannt und eine einfache Lösung bereitgestellt. In der aktuellen Version 1.12.13 wurde das Problem auch schon behoben.

Das Tutorial

Das Vulcan-starter Repository enthält verschiedene Tutorials die die Verwendung von VulcanJS schrittweise erklären. Dabei läuft jedes Tutorial selbst lokal als meteor Anwendung und beschreibt jeden Schritt direkt im Browser. Werden die erwähnten Dateien entsprechend geändert, rückt das Tutorial schrittweise vor.

Dadurch wird klar, welche Änderung was bewirkt. Zusammenhängende Anpassungen, auch über mehrere Dateien hinweg, werden manchmal mit alternativen Lösungwegen erklärt. So wird dem Benutzer das zugrundeliegende System besser Verständlich gemacht.

VulcanJS ist schon seit etlichen Jahren in der Entwicklung. Der Name Vulcan wird erst seit Version 1.3.2 verwendet – zuvor war das Framework unter dem Namen telescope nova noch eher unbekannt. Ursprünglich wurde mit der Meteor Version 0.8 gestartet. Um auf den aktuellen Zustand zu kommen, musste das Framework bereits viele Refaktorisierungsarbeiten umsetzen. An einigen Stellen macht sich auch noch bemerkbar. Nicht alle Tutorials halten sich an aktuelle Meteor Guide Regeln bzw. passen Videos, Beschreibungen und der dazugehörige Quelltext nicht mehr ganz zusammen. Das ist jedoch nicht weiter schlimm, da auch diese Tutorials nach und nach aktualisiert werden.

Alles in allem hinterlässt das Tutorial einen sicheren, wenn auch nicht all zu tiefen Eindruck in das umfangreiche Framework.

Ein anderer Entwicklungsansatz

Der direkter Vergleich mit Pup ist nicht ganz zulässig, da die Vorlage und das Framework auf unterschiedliche Zielgruppen und Einsatzgebiete ausgerichtet sind. Bei Pup bekommt man einen Ausgangspunkt für eine lauffähige App. Bei VulcanJS hingegen, die dafür benötigten Werkzeuge samt einer Einschulung. Bei der Entwicklung einer neuen App können beide Ansätze verfolgt werden und hier möchte ich auf die Unterschiede etwas eingehen. 

Hat man ein Projekt mit Pup gestartet, fließt zwingenderweise auch die aktuelle Version des Boilerplates als Grundlage in das Projekt ein. Ein späteres Update dieser Grundlage ist relativ schwer, da man genau dieses Boilerplate für die eigenen Zwecke verändert.

Anders gestaltet sich dies bei VulcanJS. Die eigene Anwendung wird von Beginn an als Package, abgekapselt vom Framework entwickelt. Dadurch kann ein Update auf eine neue Version von VulcanJS leicht durchgeführt und der Code an eventuell geänderte Funktionalitäten schneller angepasst werden. Benötigt man tiefer greifende Änderungen im Ablauf bietet VulcanJS verschiedene Einsprungspunkte in den eigenen Packages – sogenannte Hooks.

Wie diese Package-Based Architektur genauer zu verstehen ist, wird in der Dokumentation erklärt.

Weiters unterscheidet sich VulcanJS von pup in der Wahl der verwendeten Packages. Beim Styling wird anstatt auf Bootstrap bzw. Fur auf keine bestimmte Bibliothek gesetzt. Stattdessen kann sich der Benutzer aussuchen, was gerade passt. Die Trennung zwischen Modulen und UI-Elementen durch die Erweiterung .jsx in den Dateinamen empfinde ich ebenfalls als hilfreich.

Anders als bei Pup wird statt dem graphQL Playground die graphiQL IDE eingesetzt um auf die graphQL API zuzugreifen. Anstelle von vorbereiteten und getrennt von einander gespeicherten Resolvern, Mutations und Queries bei Pup, wird bei VulcanJS erklärt was ein Resolver macht und zusammengehöriges auch zusammen gespeichert.

Die initiale Datenbankbefüllung mit zufälligen Werten die bei Pup mit dem hauseigenen Seeder Package umgesetzt wurde, fehlt bei VulcanJS. Startwerte werden hier nur statisch angelegt – die Einbringung einer zufälligen Komponente oder von einander abhängige Daten müssen selbst umgesetzt werden.

Vulcan bieten mit dem I18n Package eine einfache Unterstützung für mehrsprachige Textausgaben.

Fazit und Empfehlung

Grundsätzlich kann ich sagen: Je weiter und eingegrenzter die Funktionalität der zu entwickelnden App bereits spezifiziert wurde, desto eher würde ich zur Verwendung von Pup raten. Sind die Anforderungen eher vage festgelegt oder die Fähigkeiten im Umgang mit Meteor noch nicht gefestigt, empfiehlt sich die Verwendung von VulcanJS.


Ein Kommentar des Paketautors

Sacha Greif kommentierte diesen Artikel im Meteor Forum:

Thanks for the review! You touched on it, but I think the key difference is that Pup is a boilerplate, while Vulcan is a framework. In other words the way Vulcan is architectured, you can easily add/remove/update packages at any point in your app’s lifetime, whereas with a boilerplate you’re kind of on your own after you start. I think they both have their pros and cons, like you pointed out.

(I also think Vulcan and Pup might differ when it comes to actual features, but I’m not familiar enough with Pup to really say)

https://forums.meteor.com/t/review-the-vulcanjs-framework/47749
Die mobile Version verlassen