Ein Befehl, der einfach und unkompliziert Erklärungen von der Gemini CLI erhält
Hallo, ich bin nutzlos.
Lange nicht gesehen. Ich habe Energie gesammelt. Das ist ein Witz, ich habe nur gefaulenzt. Entschuldigung.
Nun, das ist nur eine Kleinigkeit, aber die Gemini CLI ist erschienen, was für CLI-Nutzer eine Freude ist.
Ich habe nur das hier in meine.bashrc eingefügt.
ghelp() {
(echo "Erkläre dies" ; cat $1 ) | gemini
}
Es ist nichts Besonderes, aber es ist jetzt einfacher, da der Zwischenschritt über den Browser, um einen LLM den Code erklären zu lassen, entfällt.
Zum Beispiel das hier:
[curljs]
thepassenger:[haturatu]:~/git/curljs$ ghelp curl.js
Dieser Code ist ein Node.js-Skript, das die Bibliothek [Puppeteer](https://pptr.dev/) verwendet, um den Inhalt einer angegebenen Webseite abzurufen.
Im Folgenden wird erklärt, was jeder Teil des Codes tut.
1. **`const puppeteer = require('puppeteer');`**
* Lädt die Puppeteer-Bibliothek. Diese Bibliothek wird verwendet, um Chrome- oder Chromium-Browser programmatisch zu steuern.
2. **`(async () => { ... })();`**
* Dies ist eine 'sofort ausgeführte asynchrone Funktion'. Indem der gesamte Code in eine asynchrone Funktion eingeschlossen wird, kann das Schlüsselwort `await` intern verwendet werden. `await` ist notwendig, um auf das Ende zeitaufwändiger Operationen (wie das Starten des Browsers oder das Laden einer Seite) zu warten.
3. **`const url = process.argv[2];`**
* Speichert das dritte Argument, das über die Befehlszeile übergeben wurde, in der Variablen `url`.
* Beispiel: Wenn `node script.js https://example.com` ausgeführt wird, enthält `process.argv[2]` den Wert `https://example.com`.
4. **`if (!url) { ... }`**
* Zeigt eine Fehlermeldung an, wenn keine URL angegeben wurde, und beendet das Skript mit `process.exit(1)`.
5. **`const browser = await puppeteer.launch({ headless: true });`**
* Startet eine neue Browser-Instanz.
* `headless: true` ist eine Einstellung, die den Browser im Hintergrund ausführt, ohne die Benutzeroberfläche (Bildschirm) anzuzeigen. Wenn Sie das Verhalten des Browsers visuell überprüfen möchten, z. B. beim Debuggen, setzen Sie es auf `false`.
6. **`const page = await browser.newPage();`**
* Öffnet einen neuen Tab (Seite) im gestarteten Browser.
7. **`await page.goto(url, { waitUntil: 'networkidle2' });`**
* Navigiert zur angegebenen URL.
* `waitUntil: 'networkidle2'` ist eine wichtige Option, um auf das Laden der Seite zu warten. Dies bedeutet, dass gewartet wird, bis es 500 Millisekunden lang keine neuen Netzwerkverbindungen gibt, nachdem die Anzahl der Netzwerkverbindungen auf zwei oder weniger gesunken ist. Dies ist nützlich, um moderne Websites (wie SPAs), die Inhalte dynamisch mit JavaScript laden, korrekt anzuzeigen.
8. **`await new Promise(resolve => setTimeout(resolve, 5000));`**
* Wartet nach dem Laden der Seite weitere 5 Sekunden.
* Dies wird als zusätzliche Wartezeit eingefügt, um auf Animationen oder Inhalte zu warten, die nach bestimmten Operationen angezeigt werden und die mit `networkidle2` allein nicht vollständig geladen werden.
9. **`const html = await page.content();`**
* Ruft den vollständigen HTML-Inhalt der Seite ab. Dies umfasst alle HTML-Elemente, die dynamisch durch JavaScript generiert wurden.
10. **`console.log(html);`**
* Gibt den abgerufenen HTML-Code in der Konsole aus.
11. **`await browser.close();`**
* Schließt die Browser-Instanz und gibt Ressourcen frei. Wenn dies vergessen wird, kann der Prozess weiterlaufen, ohne zu beenden.
### Zusammenfassung
Dieses Skript führt den Prozess aus, **'eine Webseite der über die Befehlszeile angegebenen URL im endgültigen Zustand nach Abschluss der JavaScript-Ausführung abzurufen und deren HTML auf der Standardausgabe anzuzeigen'**.
Dies ist eine sehr nützliche Methode, um Informationen von Websites (wie SPAs) abzurufen, die dynamisch mit JavaScript gerendert werden und die nicht mit einfachen HTTP-Anfragen abgerufen werden können (z. B. beim Web-Scraping).
Es gibt eine Ausgabe wie diese.
Nun, das ist alles, aber...