Tool-Tipp

Scriptlint: Dieses Tool bringt Ordnung in eure Script-Section

(Foto: Kosal/Shutterstock)

In der Web-Entwicklung gibt es Konventionen für alles Mögliche. Nur nicht für die Benennung eurer package.json-Skripte. Scriptlint ist ein Open-Source-Projekt, das diese Lücke füllen will – Skripte brauchen schließlich auch Liebe. 

Code-Qualität ist mittlerweile keine Verhandlungssache mehr. Tools wie Prettier sorgen für die korrekte Formatierung eures Codes, mit ES-Lint oder JS-Hint lassen sich Konventionen durchsetzen, sodass eine Codebase maintainable bleibt. Nur für package.json-Skripte gibt es (bisher) weder derartige Standards, noch ein Tool, das für deren Durchsetzung sorgt. Dabei sind sie eigentlich ein wichtiger Teil der Node-Entwickler-Experience: Ihr braucht sie, um Projekte zu starten, Entwicklungsumgebungen auszuführen und für Formatierung, Linting und Tooling.

Das Thema ist nicht neu

Ein Ansatz, ein gewisses Maß an Ordnung in die Script-Section zu bringen, ist nps, ein Package, das es erlaubt, eure Skripte von der package.json in eine package-scripts.js oder sogar in eine package-scripts.yaml-Datei zu bewegen – das hat zum Beispiel den Vorteil, dass ihr die Skripte zumindest direkt in der Datei kommentieren könnt, um auch morgen noch zu wissen, welches wofür da ist. Für Einheitlichkeit bei der Benennung sorgt das Tool aber nicht.

Fehlende Standards

Moritz Jacobs hat in seiner Funktion als Entwickler einer Augsburger Agentur oft genug mit großen Codebases zu tun, bei denen genau das nicht gegeben ist. Große Repositories mit unterschiedlichen Projekten, die alle über eine eigene package.json verfügen, in der alle Skripte unterschiedlich benannt sind, übergeben zu bekommen, ist in seinem Arbeitsalltag keine Seltenheit. Sich jeweils pro Repo merken zu müssen, was genau jetzt durch npm run start getriggert wird, fand er einfach nicht besonders effizient.

Das Problem dabei: Es gibt keinen Standard dafür. Design und Benennung von npm-Skripten liegen in der Verantwortung des Einzelnen, es gibt keine Richtlinien, die als Best Practice gelten. Ein Weg wäre jetzt, einfach ein Paper zu veröffentlichen, in dem mögliche Best Practices diskutiert werden und zu hoffen, dass es irgendjemand lesen und die Community dem zustimmen würde. Jacobs und sein Team haben sich stattdessen dafür entschieden, mit Scriptlint ein CLI- Tool zu designen. Ähnlich wie ES-Lint dafür sorgt, dass ihr nur JS-Code committed, der gewissen Standards entspricht, die ihr allerdings costumizen und ergänzen könnt, sorgt Scriptlint für Ordnung bei der Benennung und Struktur eurer Skripte innerhalb der package.json eines Projekts.

2 Modi

Das Tool verfügt über zwei Modi. Im Default-Mode werden nur einige grundlegende Regeln durchgesetzt:

Eure package.json muss ein "test"-Script (nicht das Default-Script von npm init), ein "dev"– und ein "start"-Script beinhalten:

{
    "scripts": {
        "start": "...",
        "test": "...",
        "dev": "...",
    }
}

Im Strict-Mode sorgt das Tool außerdem für die Einhaltung folgender Vorgaben:

Entwickler sollen Namespaces nutzen, um die Skripte zu kategorisieren und diese durch : zu trennen. Die Namen eurer Skripte dürfen nicht denen der Implementation entsprechen, bei "jest": "jest" würde das Tool entsprechend meckern, "test": "jest" wäre akzeptiert.

Zudem sortiert Scriptlint eure Skripte in alphabetischer Reihenfolge, kontrolliert, ob alle Skript-Namen in Camel-Case geschrieben sind und legt fest, dass es ein Trigger-Script für alle Hooks geben muss – das heißt, ein Skript wie "prepublish": "run lint" wird nur akzeptiert, wenn es auch ein "publish":"..."-Skript gibt. Auch die verbreitete Praxis, für sequentielle oder parallele Ausführung & respective && zu verwenden, kreidet das Tool im Strict-Mode an. Das heißt aber nicht, dass ihr stattdessen eure Skripte jeweils über ein separates Terminal ausführen müsst, dafür könnt ihr zum Beispiel ein Tool wie concurrently nutzen.

Wer grundsätzlich Verwendung für Scriptlint finden würde, sich aber an einzelnen Punkten, wie beispielsweise der alphabetischen Sortierung störe, könne ungewünschte Features auch ausschalten, so Jacobs im Gespräch mit t3n. Innerhalb der Agentur würde das Tool bereits fleißig genutzt und das Team um das Projekt feile fleißig daran weiter. Wer sich beteiligen möchte: Pull-Requests sind natürlich herzlich willkommen.

Passend dazu: Destiny: Prettier für die File-Struktur eurer Codebase

Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Schreib den ersten Kommentar!

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!

Hey du! Schön, dass du hier bist. 😊

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team bestehend aus 65 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Danke für deine Unterstützung.

Digitales High Five,
Stephan Dörner (Chefredakteur t3n.de) & das gesamte t3n-Team

Anleitung zur Deaktivierung