require.js
Eintrag zuletzt aktualisiert am: 22.09.2014
require.js ist eine
JavaScript-Bibliothek, um Module in eigenständigen
JavaScript-Dateien einzubinden. Require.js wird insbesondere in
node.js verwendet.
Nutzen von require.js
Von André Krämer
Moderne Webanwendungen beinhalten in der Regel einen großen Anteil an clientseitigem
JavaScript Quelltext. Ab einer gewissen Größe wird dies problematisch. Entweder werden die zugrundeliegenden
JavaScript Dateien so umfangreich, dass sie nicht mehr überblickt werden können, oder der Quelltext wird in eine Vielzahl kleiner Dateien aufgebrochen. Zunächst klingt diese Aufteilung recht gut, in der Praxis ist sie jedoch problematisch.
JavaScript Quelltext Dateien müssen nämlich im
HTML Text einzeln verwiesen werden. Dabei ist es wichtig, die Dateien in der richtigen Reihenfolge einzubinden. Der Grund hierfür ist, dass die verschiedenen
JavaScript Dateien meist Abhängigkeiten untereinander haben. Werden die Dateien nun nicht in der korrekten Reihenfolge geladen, führt dies dazu, dass die abhängigen Scripte nur fehlerhaft ausgeführt werden können.
Die Lösung für dieses Problem sieht unter anderen Programmierumgebungen zumeist so aus, dass zusammengehöriger Quelltext in Modulen zusammengefasst wird. Diese Module können dann Abhängigkeiten an andere Module angeben. Im Kontext einer
.NET-Anwendung wäre ein solches Modul zum Beispiel eine
Assembly, die, wiederum mit der Hilfe von Referenzen, Abhängigkeiten auf andere Assemblies ausdrücken kann.
Unter
JavaScript gibt es hierfür kein in der Sprache eingebautes Konzept. Zwar gibt es gängige Muster, um Module zu erzeugen, allerdings fehlt die Möglichkeit, Abhängigkeiten zu deklarieren.
Abhilfe schafft an dieser Stelle die „
Asynchronous Module Definition (
AMD)
API“ Spezifikation. In dieser Spezifikation ist beschrieben, wie Module so definiert werden können, dass sowohl das Modul, als auch seine Abhängigkeiten asynchron geladen werden können. Die in der
AMD Spezifikation beschriebenen Techniken eignen sich besonders für Browseranwendungen.
Eine weit verbreitete Implementierung der Spezifikation ist die quelloffene Bibliothek RequireJS. Sie steht unter einer Doppellizenz, nämlich
MIT und new BSD, so dass der Entwickler die Lizenz wählen kann, die am besten zu seiner Anwendung passt. RequireJS ist sowohl in der Lage, einfache
JavaScript Dateien, als auch darin definierte Module zu laden, und die deklarierten Abhängigkeiten korrekt aufzulösen.
Der Hauptnutzen der Bibliothek liegt also im Laden von
JavaScript Quelltexten. Zusätzlich bringt RequireJS noch das Optimierungswerkzeug r.js mit, welches
JavaScript Dateien zur besseren Performance kombinieren und minimieren kann. Moduldeklarationen und definierte Abhängigkeiten können nach der Optimierung immer noch von RequireJS aufgelöst werden. Bei anderen Optimierungswerkzeugen ist dies nicht zwangsläufig der Fall. Deshalb sollte RequireJS stets mit dem hauseigenen Optimierer genutzt werden. Dieser setzt jedoch eine Installation von
node.js auf dem Entwicklungssystem voraus.
.