Boehrsi.de - Blog

Dart - Cross-Platform Scripting-Helfer

Erstellt am event Uhr von account_circle Boehrsi in label Development
Dart - Cross-Platform Scripting-Helfer Bild

Ich mag kleine Scripting Lösungen die mir Arbeit abnehmen und das nicht nur auf meinem Linux Server. Auch unter Windows möchte ich bei der Entwicklung, beim News erstellen und an anderen Stellen, kleine und einfach auszuführende Helfer haben.
Unter Windows gibt es mit der CMD und Powershell gleich zwei Lösungen, welche ich beide ungern nutzen möchte. Nicht weil sie schlecht sind oder dergleichen, sondern einfach weil ich nicht noch eine Sprache / ein Framework zum jetzigen Zeitpunkt lernen möchte. Unter Linux kann ich mit meinem aktuellen Shell Wissen erreichen was ich möchte, doch unter Windows war dies bis vor kurzem wesentlich anstrengender.

Da ich aktuell mit Flutter / Dart unterwegs bin und Dart auch als Sprache für Kommandozeilen-Tools genutzt werden kann und das sogar als Precompiled Executable, liegt es natürlich nah das ich in diesem Bereich aktiv geworden bin. Das erste Skript welches ich erfolgreich fertiggestellt habe ist simpel aber nützlich. Es erlaubt mir das umwandeln von Überschriften aus Blogbeiträgen, in ein für Links nutzbares Format. Man ersetzt also Leerzeichen, Umlaute und alle die anderen Dinge die eine URL nicht mag und schon ist man fertig. Das Ganze gebe ich aus und fertig. Zusätzlich kann das Skript die WebP Bibliothek aufrufen, welche die Bilder für meinen Blog konvertiert.

import 'package:args/args.dart';

import 'src/commands.dart';
import 'src/text.dart';

const ARG_HELP = "help";
const ARG_HELP_SHORT = "h";
const ARG_MODE = "mode";
const ARG_MODE_SHORT = "m";
const ARG_TEXT = "text";
const ARG_TEXT_SHORT = "t";

const MODE_TITLE = "title";
const MODE_IMAGE_CONVERSION = "image";

main(List<String> args) {
  final parser = ArgParser()
    ..addOption(ARG_MODE,
        abbr: ARG_MODE_SHORT,
        allowed: [MODE_TITLE, MODE_IMAGE_CONVERSION],
        help: "Sets the mode.",
        allowedHelp: <String, String>{
          MODE_TITLE: "Converts a title to a file name.",
          MODE_IMAGE_CONVERSION: "Performs the image compression.",
        })
    ..addOption(ARG_TEXT, abbr: ARG_TEXT_SHORT, help: "Sets the input text, used for the [title] parsing.")
    ..addFlag(ARG_HELP, abbr: ARG_HELP_SHORT, negatable: false, help: "Displays this help information.");

  try {
    final results = parser.parse(args);
    final String? mode = results[ARG_MODE];
    if (notNullOrEmpty(mode)) {
      switch (mode) {
        case MODE_TITLE:
          generateFileFromTitle(results[ARG_TEXT]);
          break;
        case MODE_IMAGE_CONVERSION:
          runProcess(<String>["create-webp.sh", "jpegoptim.sh", "optipng.sh"]);
          break;
      }
    } else {
      print(parser.usage);
    }
  } catch (_) {
    print("Invalid arguments detected. Please only use supported arguments:");
    print(parser.usage);
  }
}

Das Ganze kann ich mit Kommandozeilenparametern steuern (boehrsi-de.exe -m title -t "Dart - Cross-Platform Scripting-Helfer") und nachdem die eigentliche Entwicklung abgeschlossen war, habe ich das Skript zu einer .exe kompiliert. Jetzt habe ich ein schnelles kleines Tool, welches mir Arbeit abnimmt. Ich plane die Funktionen je nach Bedarf zu erweitern und natürlich auch noch andere Skripte zu schreiben, falls sich entsprechende Einsatzszenarios ergeben. Fügt man übrigens den Pfad zum Ordner in dem die Skripte liegen zum PATH hinzu, kann man das Skript ganz bequem von überall aufrufen, z.B. auch aus der Konsole in Visual Studio Code. Aus diesem Grund muss ich selbige beim Artikel erstellen und testen nun gar nicht mehr verlassen.
Auch wenn dieses kleine erste Skript simpel ist, so spart es mir bereits einiges an Zeit. Wie sieht es bei euch aus, nutzt auch ihre kleinere oder größere Lösungen, um wiederkehrende Aufgaben zu erledigen?

Related Links
Kommentare  
Kommentar erstellen
Mit dem Abschicken des Kommentars erklären sie sich mit der in der Datenschutzerklärung dargelegten Datenerhebung für Kommentare einverstanden. Spam, unangebrachte Werbung und andere unerwünschte Inhalte werden entfernt. Das Abonnieren via E-Mail ist nur für E-Mail Adressen erlaubt die Sie rechtmäßig administrieren. Widerrechtliche Abonnements werden entfernt.