Entwickeln
Sprechen Sie immer über die Funktionen, die Sie entwickeln wollen, indem Sie das Issue, das Ihr Problem behandelt, erstellen/finden und kommentieren bevor Sie mit der Arbeit daran beginnen und informieren Sie die Gemeinschaft darüber, dass Sie mit der Programmierung beginnen, indem Sie das Thema für sich beanspruchen.
Bitte benutzen Sie den main
Zweig.
Bis März 2023 wurden die Beiträge auf dem develop
Zweig erstellt. Dieses
Verfahren ist nun veraltet.
Voraussetzung für die Erstellung dieses Plugins
Es wird dringend empfohlen, mit den folgenden Konzepten vertraut zu sein:
- Git
- NodeJS
- NPM
- Typescript
Um das Plugin zu erstellen, benötigen Sie die folgenden Pakete:
git
npm
(>=8.x)nodejs
(>=14.x)build-essential
coreutils
wget
reuse
Bitte beachten Sie, dass dieses Plugin ein AppImage für den Prosody XMPP
Server benötigt. Dieses AppImage wird vom Prosody
AppImage Seitenprojekt
bereitgestellt. Das Skript build-prosody.sh
lädt Binärdateien herunter,
die an dieses entfernte Repository angehängt sind, und überprüft, ob ihre
sha256-Hashsumme korrekt ist.
Entwickeln
Klonen Sie das Repository, bauen Sie das Plugin, und erstellen Sie Ihren Feature-Zweig:
# Kopieren Sie das Repository. Vergessen Sie nicht die Option --recursive, um Submodule mit zu kopieren.
git clone https://github.com/JohnXLivingston/peertube-plugin-livechat.git --recursive
cd peertube-plugin-livechat
# Installieren Sie die NPM-Abhängigkeiten und erstellen Sie das Modul zum ersten Mal:
npm install
# Erstellen des Plugins nach einer Änderung:
npm run build
# Wenn Sie einen Fork aus dem Repository haben, fügen Sie ihn als Remote hinzu (Beispiel):
git remote add me git@github.com:MY_GITHUB_ACCOUNT/peertube-plugin-livechat.git
# Erstellen Sie einen lokalen Zweig für Ihre Entwicklungen und testen Sie ihn aus (Beispiel):
git checkout my_development # Hinweis: Wenn ein Github Problem damit verbunden ist, verwenden Sie fix_1234 als Zweigname (wobei 1234 die Nummer des Problems ist).
# Um Ihre Änderungen vorzuschlagen, schieben Sie Ihren Zweig in Ihr Repository (Beispiel):
git push --set-upstream me my_development
# Gehen Sie dann mit Ihrem Webbrowser zu Ihrem Github-Repository, um den Pull Request vorzuschlagen (siehe zusätzliche Anweisungen unten)
Sobald Sie bereit sind, Ihren Code zu zeigen und um Feedback zu bitten, reichen Sie einen Entwurf für einen Pull Request ein. Sobald Sie bereit für eine Codeüberprüfung vor der Zusammenführung sind, reichen Sie einen Pull Request ein. In jedem Fall sollten Sie Ihren PR mit dem Problem, die er behebt, verlinken, indem Sie die GitHub-Syntax verwenden: “fixes #issue_number”.
Der Front-End-Code befindet sich im Ordner client
, der Back-End-Code im
Ordner server
. Es gibt einige gemeinsam genutzte Codes im shared
Ordner.
Für allgemeine Anweisungen (Entwicklung von Plugins, Erstellung, Installation, …), lesen Sie bitte die Peertube Dokumentation.
Sie können das Plugin mit zusätzlichen Debug-Funktionen bauen, indem Sie es einfach benutzen:
NODE_ENV=dev npm run build
Dieses Plugin ist REUSE konform: Es verwendet
SPDX-Header, um die Lizenzinformationen seines Quellcodes zu
identifizieren. Weitere Informationen finden Sie auf der
REUSE Website. Sie können das
reuse
Kommandozeilenwerkzeug verwenden, um die Header zu aktualisieren. Der
Befehl npm run lint
verwendet den Befehl reuse
, um die Einhaltung zu
überprüfen. Vergessen Sie nicht, Ihre Copyright-Informationen in die
SPDX-Header einzufügen, wenn Sie Code ändern.
ESBuild vs Typescript
Dieses Plugin verwendet ESBuild für die Generierung von Frontend-Code, wie
das offizielle peertube-plugin-quickstart
Plugin. ESBuild kann mit
Typescript umgehen, prüft aber keine Typen (siehe
ESBuild-Dokumentation).
Deshalb kompilieren wir Typescript zuerst mit der Option -noEmit
, nur um
die Typen zu überprüfen (check:client:ts
in der package.json Datei). Dann,
wenn alles in Ordnung ist, führen wir ESBuild aus, um das kompilierte
Javascript zu erzeugen.
Debug Modus
Es gibt einen Debug Modus für dieses Plugin, der einige Verzögerungen verkürzt. Zum Beispiel werden einige Protokolldateien alle zwei Minuten erneuert, anstatt einmal pro Tag. Dies ermöglicht es, bestimmte Aktionen, für die man normalerweise Stunden oder Tage warten müsste, leichter zu testen.
Um diesen Modus zu aktivieren, müssen Sie lediglich die Datei
/var/www/peertube/storage/plugins/data/peertube-plugin-livechat/debug_mode
erstellen (ersetzen Sie /var/www/peertube/storage/
durch den richtigen
Pfad Ihrer Installation).
Das einfache Vorhandensein dieser Datei reicht aus, um den Debug Modus zu aktivieren. Um sicherzustellen, dass sie berücksichtigt wird, können Sie Ihre Peertube Instanz neu starten.
Diese Datei kann einige JSON enthalten, um erweiterte Optionen zu
ermöglichen. Eine Liste der vorhandenen Parameter finden Sie in
server/lib/debug.ts
. Starten Sie Peertube nach jeder Änderung des Inhalts
neu.
Aktivieren Sie diesen Modus nicht auf einem Produktionsserver und auch nicht auf einem öffentlichen Server. Dies könnte Sicherheitsprobleme verursachen.
Prosody neustarten
Wenn der Debug Modus aktiviert ist, können Sie Prosody mit diesem API-Aufruf
neu starten:
http://your_instance.tld/plugins/livechat/router/api/restart_prosody
. Für
diesen Aufruf ist keine Authentifizierung erforderlich. Er kann von einer
Befehlszeile aus erfolgen, zum Beispiel mit curl http://your_instance.tld/plugins/livechat/router/api/restart_prosody
.
Prosody Debugger
Es ist möglich, das Prosody AppImage mit Hilfe von MobDebug mit einem externen Debugger zu verbinden.
Dazu müssen Sie MobDebug in einem Ordner einrichten, auf den der Benutzer
peertube
zugreifen kann. Dann fügen Sie dies in der Datei debub_mode
hinzu:
{
"debug_prosody": {
"debugger_path": "/der_pfad_zu_mobdebug/src",
"host": "localhost",
"port": "8172"
}
}
host
und port
sind optional. debugger_path
muss auf den Ordner zeigen,
in dem sich die MobDebug
.lua
Datei befindet.
Peertube neustarten.
Starten Sie Ihren Debugger-Server.
Damit Prosody eine Verbindung mit dem Debugger herstellen kann, rufen Sie
die API
http://your_instance.tld/plugins/livechat/router/api/restart_prosody?debugger=true
auf. Dieser Aufruf erfordert keine Authentifizierung. Er kann von einer
Kommandozeile aus erfolgen, zum Beispiel mit curl http://your_instance.tld/plugins/livechat/router/api/restart_prosody?debugger=true
.
Sie können sogar Ihren Debug Server so konfigurieren, dass er diese Anfrage
automatisch startet.
Prosody startet dann neu und verbindet sich mit dem Debugger.
Schnelle Entwicklungsumgebung mit Docker
Es gibt eine Anleitung in französischer Sprache auf dem le Peertube forum das erklärt, wie man schnell eine Entwicklungsumgebung mit Docker erstellt.
Es wurde ein Repo daraus gemacht, siehe pt-plugin-dev.
Hinweis: Aus einem unbekannten Grund kann Prosody die DNS-Adresse von
Containern nicht auflösen, wenn die lua-unbound-Bibliothek verwendet
wird. Es gibt einen unsaubere Lösung dafür im Plugin: Erstellen Sie einfach
eine /data/plugins/data/peertube-plugin-livechat/no_lua_unbound
Datei in
deinen docker-volumes, dann starten Sie die Container neu.
Schnelles Neuerstellen und Installieren des Plugins
Wenn Sie Änderungen vornehmen, müssen Sie nicht immer das gesamte Projekt
neu erstellen und das Plugin in Ihrer Entwicklungsumgebung neu
installieren. Sie können nur den geänderten Teil bauen (zum Beispiel, wenn
Sie nur die Client-Dateien geändert haben: npm run build:client
). Prüfen
Sie die package.json
Dateien auf verfügbare Build-Skripte.
Wenn das Plugin bereits auf Ihrer Entwicklungsinstanz installiert ist und Sie keine Abhängigkeiten geändert haben, können Sie Ihre Arbeit schnell installieren, indem Sie diese Schritte ausführen:
- die notwendigen Teile des Plugins (Client, Stile, …) neu zu erstellen,
- den Inhalt von
data/plugins/node_modules/peertube-plugin-livechat/dist/
Ihrer Dev-Instanz mit dem Inhalt desdist
-Ordners des Plugins überschreiben, - rekursiv die Besitzerrechte der
plugins/node_modules/peertube-plugin-livechat/dist/
Dateien auf Ihrenpeertube
Benutzer ändern, - Ihre Instanz neustarten.
Leistungstests
Das livechat-perf-test Repository enthält einige Werkzeuge zur Durchführung von Leistungstests. Sie können verwendet werden, um Code-Verbesserungen zu bewerten oder Engpässe zu finden.