Paketbaurichtlinien für JavaScript
Übersicht
JavaScript-Code für Webanwendungen erfordert besondere Sorgfalt, um sicherzustellen, dass er den hohen Standards von Fedora entspricht und gleichzeitig nützlich ist und den Konventionen von Millionen von Websites genügt. Bestimmte Webbibliotheken können zudem serverseitig (z.B. mit nodejs oder rubygem-execjs) eingesetzt werden. Daher ist es wichtig, JavaScript so zu paketieren, dass es auch den Standards für lokal ausgeführten Code genügt.
Bitte beachten Sie, dass dieser Abschnitt sich ausschließlich auf JavaScript-Bibliotheken bezieht, die für die Verwendung im Web vorgesehen sind. Serverseitige JavaScript-Laufzeitumgebungen wie Node.js haben eigene Richtlinien, und Software wie GNOME, die JavaScript für Erweiterungen einbettet, hat ebenfalls eigene Verzeichnisse und Richtlinien.
Pakete, die JavaScript enthalten, sollten nach Möglichkeit vorkompiliertes/minimiertes JavaScript neu generieren, da dies zu besser wartbaren Paketen führt. Falls dies mit erheblichem Aufwand verbunden ist, kann dem gebündelten, vorgenerierten JavaScript ein Kommentar in der Spec-Datei beigefügt werden, der die Entscheidung erläutert. Die Überprüfung der Lizenzen des gebündelten Codes bleibt davon unberührt.
Richtlinien zur Benennung
Der Name eines JavaScript-Bibliothekspakets MUSS mit js- beginnen, gefolgt vom Upstream-Namen. Zum Beispiel: js-jquery.
BuildRequires
Um das Vorhandensein der notwendigen RPM-Makros sicherzustellen, MÜSSEN alle Pakete, die JavaScript in %{_jsdir} bereitstellen, Folgendes enthalten:
BuildRequires: web-assets-devel
Requires
Um die Verfügbarkeit der erforderlichen Verzeichnisse zu gewährleisten, MÜSSEN alle Pakete, die JavaScript in %{_jsdir} bereitstellen, Folgendes enthalten:
Requires: web-assets-filesystem
JavaScript-Pakete DÜRFEN KEINE Requires für HTTP-Daemon-spezifische Konfigurationspakete wie web-assets-httpd enthalten, da diese von jedem HTTP-Daemon verwendet werden können.
RPM-Makros
| Makro | Normale Definition | Anmerkungen |
|---|---|---|
|
|
Das Verzeichnis, in dem JavaScript-Bibliotheken gespeichert sind |
Installationsort
-
Wenn eine JavaScript-Bibliothek lokal ausgeführt werden kann oder ausschließlich aus JavaScript-Code besteht, MUSS sie in einem Unterverzeichnis von
%{_jsdir}installiert werden. -
Enthält ein Paket JavaScript-Code, der jedoch außerhalb des Browsers nie verwendet wird (z. B. wenn es sich um eine HTML-Benutzeroberflächenbibliothek handelt), kann es stattdessen in
%{_assetdir}installiert werden. Weitere Informationen finden Sie in den Web Assets-Richtlinien. -
Enthält ein Paket JavaScript-Code, der ausschließlich innerhalb einer Webanwendung verwendet wird und für keine andere Anwendung von Nutzen ist, darf dieser Code weiterhin zusammen mit der Anwendung ausgeliefert werden. Dies entbindet es jedoch nicht von der Einhaltung der übrigen Richtlinien.
-
Wenn ein Paket JavaScript-Code enthält, der im Web nicht nützlich ist, sondern nur in lokal ausgeführter Software (z. B. Node.js oder GNOME-Shell-Erweiterungen), sollte es das entsprechende Verzeichnis für seine Laufzeitumgebung verwenden, nicht
%{_jsdir}.
Serverort
JavaScript-Code ist als Teil des allgemeinen Web-Assets-Frameworks enthalten. Daher ist %{_jsdir} auf den von Fedora bereitgestellten Webservern standardmäßig unter /_sysassets/javascript/ verfügbar.
Beispielsweise kann jQuery in %{_jsdir}/jquery/jquery-min.js installiert sein, so dass Webanwendungen, die es benötigen, einfach dieses HTML-Tag einbinden können:
<script type="text/javascript" src="/_sysassets/javascript/jquery/jquery-min.js"></script>;
Ungeachtet dessen kann es für Webanwendungen sinnvoll sein, Unterverzeichnisse von %{_jsdir} über Aliase oder symbolische Links in ihrem eigenen Verzeichnis verfügbar zu machen, zum Beispiel aus Kompatibilitätsgründen oder um unnötige Abweichungen vom Upstream zu vermeiden.
Kompilierung/Minimalisierung
Wird eine JavaScript-Bibliothek üblicherweise als minimierter oder kompilierter Code ausgeliefert, MUSS sie im Rahmen des RPM-Bauprozesses kompiliert oder minimiert werden. Die Auslieferung von bereits minimiertem oder vorkompiliertem Code ist unter Fedora nicht zulässig.
Der vom Upstream-Projekt verwendete Compiler oder Minifier sollte zum Kompilieren oder Minimieren des Codes verwendet werden. Falls der vom Upstream-Projekt verwendete Minifier nicht in Fedora integriert werden kann, kann ein alternativer Minifier verwendet werden. Eine Liste bekannter Problembereiche und Lösungsvorschläge finden Sie auf dieser Seite.
Darüber hinaus MUSS die unkompilierte/unminimierte Version zusammen mit der kompilierten/minimierten Version ausgeliefert werden.
Minimiertes JavaScript ist für lokal ausgeführtes JavaScript ungeeignet, da der Zweck der Minimierung in der Reduzierung der HTTP-Übertragungszeiten besteht. Daher darf JavaScript, das nicht für das Web bestimmt ist (z.B. für Node.js oder GNOME Shell-Erweiterungen), NICHT minimiert werden.
Bündelung anderer Bibliotheken
Es ist üblich, dass eine einzelne minimierte JavaScript-Datei Code aus anderen JavaScript-Bibliotheken enthält. JavaScript wird diesbezüglich nicht anders behandelt als andere Bibliotheken, daher müssen die Richtlinien zur Bündelung weiterhin befolgt werden.
Wrapper für andere Sprachen oder Umgebungen
Manchmal existiert ein einfacher Wrapper einer fremden Sprache (wie Ruby über rubygem-execjs oder Java über rhino) oder einer serverseitigen JavaScript-Umgebung (wie Node.js) für eine reine JavaScript-Bibliothek. Solche Pakete sollten den mitgelieferten Bibliothekscode entfernen und stattdessen auf den Code des primären Fedora-Pakets für diese Bibliothek verweisen und diesen als Require einbinden.
Node.js-Module, die Browser-/reine JS-Komponenten enthalten
Einige Node.js-Module enthalten Teile, die im Browser oder von anderen serverseitigen JavaScript-Engines verwendet werden können. Solche Pakete sollten als ein SRPM ausgeliefert werden, das zwei Pakete enthält:
-
Ein
js-foo-Paket, das den reinen JavaScript-Teil enthält und diesen Richtlinien folgt. -
Ein
nodejs-foo-Paket, das den Node.js-Modulteil gemäß den Node.js-Richtlinien enthält. Dieses Paket kann symbolische Links zu den benötigten Dateien oder Verzeichnissen desjs-foo-Pakets enthalten.
Want to help? Learn how to contribute to Fedora Docs ›