Benutzerdefinierte JavaScript-Komponenten erstellen
Universal ist erweiterbar und Sie können benutzerdefinierte JavaScript-Komponenten und Frameworks erstellen. Dieses Dokument behandelt, wie Sie benutzerdefinierte Komponenten erstellen, die sich in die Universal App-Plattform integrieren.
Dies ist ein fortgeschrittenes Thema und nicht erforderlich, wenn Sie einfach nur Universal Apps verwenden möchten.
Überblick
Das Erstellen einer benutzerdefinierten React-Komponente für PowerShell Universal umfasst mehrere zentrale Bestandteile:
Projektstruktur: Ein Node.js-Projekt mit Webpack zum Bündeln von React-Komponenten
React-Komponente (JSX): Die React-Komponente, die Ihre Benutzeroberfläche rendert
PowerShell-Modul (PSM1): PowerShell-Funktionen, die Komponentendefinitionen erstellen
Modulmanifest (PSD1): Standardmäßige PowerShell-Modulmetadaten
Build-Prozess: Webpack-Konfiguration zum Bündeln von JavaScript-Assets
Komponentenregistrierung: Registrierung Ihrer Komponente bei Universal Dashboard
Funktionsweise
Die Integration zwischen PowerShell und React funktioniert wie folgt:
PowerShell-Seite: Ihre PowerShell-Funktion gibt eine Hashtabelle mit Komponenteneigenschaften zurück
Asset-Registrierung: Das gebündelte JavaScript wird beim AssetService von PowerShell Universal registriert
Komponententyp: Die Eigenschaft
typeverknüpft die PowerShell-Hashtabelle mit der React-KomponenteÜbergabe von Props: Eigenschaften der Hashtabelle werden automatisch zu React-Props
Rendering: Universal Dashboard lädt das JavaScript-Bundle und rendert die React-Komponente
Das Beispiel ud-mermaid
In diesem Leitfaden verweisen wir durchgehend auf das Projekt ud-mermaid als praxisnahes Beispiel. Diese Komponente umschließt die Diagrammbibliothek Mermaid.js zur Verwendung in PowerShell Universal und demonstriert:
Integration einer JavaScript-Bibliothek von Drittanbietern
Verwendung von React-Hooks (useEffect, useRef)
Übergabe von Konfigurationsobjekten
Professionelle Projektstruktur
Build-Automatisierung
Schritt für Schritt
Der folgende Abschnitt führt Sie Schritt für Schritt durch die verschiedenen Aspekte der Erstellung einer Universal App-Komponente.
1. Abhängigkeiten installieren
Sie müssen die folgenden Abhängigkeiten installieren, bevor Sie Ihre Komponente erstellen.
NodeJS – Erforderlich für npm und die Ausführung von Build-Tools
2. Ein neues Projekt erstellen
Erstellen Sie ein neues Verzeichnis für Ihr Komponentenprojekt:
Initialisieren Sie ein neues npm-Projekt:
Dadurch wird eine grundlegende Projektstruktur erstellt, einschließlich:
package.json– Node.js-Abhängigkeiten und Build-Skripte
3. JavaScript-Abhängigkeiten installieren
Installieren Sie die erforderlichen Build-Tools und React-Abhängigkeiten:
Installieren Sie das Universal Dashboard-Paket:
Das Projekt ud-mermaid enthält zum Beispiel das Paket mermaid als zusätzliche Abhängigkeit:
Installieren Sie alle weiteren Bibliotheken, die Ihre Komponente benötigt:
4. Projektstruktur erstellen
Erstellen Sie die erforderlichen Verzeichnisse für Ihre Komponente:
5. Ihre React-Komponente erstellen
Erstellen Sie eine React-Komponente im Verzeichnis Components/. Ihre Komponente sollte:
Aus
universal-dashboardimportierenDas
withComponentFeatures-HOC (Higher-Order Component) verwendenProps akzeptieren, die den Parametern Ihrer PowerShell-Funktion entsprechen
Beispiel aus ud-mermaid (Components/mermaid.jsx):
6. Ihre Komponente registrieren
Erstellen Sie eine index.js-Datei im Verzeichnis Components/, die Ihre Komponente bei Universal Dashboard registriert:
Die Zeichenfolge, die Sie an register() übergeben, wird zur Eigenschaft type, die Sie in Ihrer PowerShell-Funktion verwenden.
7. PowerShell-Funktionen erstellen
Nun müssen Sie den Code des PowerShell-Moduls schreiben. Sie müssen die PSM1-Datei aktualisieren, um Assets zu laden und Funktionen zu definieren, die Komponentendefinitionen erstellen.
Die PSM1-Datei sollte:
Die gebündelte JavaScript-Datei beim AssetService registrieren
Funktionen definieren, die Hashtabellen mit Komponenteneigenschaften zurückgeben
Beispiel aus ud-mermaid (UniversalDashboard.Mermaid.psm1):
Wichtige Eigenschaften der Hashtabelle:
assetId– Die von RegisterAsset zurückgegebene IDisPlugin– Für benutzerdefinierte Komponenten immer auf$truegesetzttype– Muss mit dem Namen übereinstimmen, den Sie inUniversalDashboard.register()verwendet habenid– Ein eindeutiger Bezeichner für die KomponenteninstanzWeitere Eigenschaften werden als Props an Ihre React-Komponente übergeben
8. Webpack konfigurieren
Ihre webpack.config.js sollte Ihre Komponenten bündeln und die Abhängigkeiten React und Universal Dashboard als externals auslagern. Hier ist die wesentliche Konfiguration aus ud-mermaid:
Wichtige externals:
reactundreact-dom– Werden von PowerShell Universal bereitgestelltUniversalDashboard– Das globale Universal Dashboard-Objekt
8.1. Babel konfigurieren
Erstellen Sie eine .babelrc-Datei, um JSX und die Transformation von modernem JavaScript zu konfigurieren:
Diese Konfiguration:
Wandelt JSX in JavaScript um
Transpiliert modernes JavaScript für die Browserkompatibilität
Aktiviert nützliche Sprachfunktionen von JavaScript
9. Modulmanifest erstellen
Erstellen Sie ein standardmäßiges PowerShell-Modulmanifest (.psd1) mit den Metadaten Ihrer Komponente:
10. Das Projekt erstellen
Sie können nun Ihr Projekt erstellen. Es wird ein Modul ausgegeben, das Sie in PowerShell Universal laden können.
Fügen Sie zunächst Build-Skripte zu Ihrer package.json hinzu:
Führen Sie dann den Build aus:
Optional: Erstellen Sie ein Build-Skript (wie component.build.ps1 von ud-mermaid):
Führen Sie es dann aus:
Der Build-Prozess:
Bündelt den gesamten JavaScript-/React-Code mit Webpack
Gibt gebündelte Dateien mit Hash-Namen aus (z. B.
index.78a6d857.bundle.js)Kopiert die Moduldateien (
.psm1,.psd1) in das Ausgabeverzeichnis
11. Verwendung in PowerShell Universal
Laden Sie in Ihrer App Ihr Modul und führen Sie die Funktion aus.
Beispiel einer Projektstruktur
Hier ist die typische Struktur eines benutzerdefinierten Komponentenprojekts (aus ud-mermaid):
Props
Props sind Werte, die entweder aus der vom Benutzer bereitgestellten PowerShell-Hashtabelle oder von der Universal App-High-Order-Funktion withComponentsFeature übergeben werden.
Standard
Die Eigenschaften, die Sie in Ihrer Hashtabelle in PowerShell festlegen, werden automatisch als Props an die React-Komponente übergeben.
Wenn Sie beispielsweise die Eigenschaften diagram und config in der Hashtabelle festlegen:
Dann haben Sie in React Zugriff auf diese Props:
Best Practices für Props:
Verwenden Sie aussagekräftige Prop-Namen, die den PowerShell-Parameternamen entsprechen
Behandeln Sie optionale Props mit Standardwerten oder bedingter Logik
Hashtabellen in PowerShell werden automatisch zu JavaScript-Objekten
React-Hooks und Komponentenlebenszyklus
Beim Erstellen benutzerdefinierter Komponenten können Sie alle standardmäßigen React-Hooks verwenden. Die ud-mermaid-Komponente demonstriert die Verwendung von useEffect und useRef zur Verwaltung des Komponentenlebenszyklus und von DOM-Referenzen:
Häufige Muster:
useEffect– Für Initialisierung, Aufräumarbeiten und die Reaktion auf Prop-ÄnderungenuseRef– Für den direkten Zugriff auf DOM-ElementeuseState– Für die Verwaltung des internen KomponentenzustandsuseMemo/useCallback– Für die Leistungsoptimierung
Endpunkte
Endpunkte sind besonders in der Art, wie sie registriert werden und wie sie als Props an Ihre Komponente übergeben werden. Sie müssen Register für den Endpunkt in PowerShell aufrufen und die Variablen Id und PSCmdlet übergeben.
Endpunkte werden aus ScriptBlocks erstellt und ausgeführt, wenn das entsprechende Ereignis eintritt.
Universal verknüpft den Endpunkt automatisch mit einer Funktion innerhalb von JavaScript. Das bedeutet, dass Sie die Props verwenden können, um diesen Endpunkt aufzurufen.
Beachten Sie den Funktionsaufruf props.onClick. Dieser ruft automatisch den PowerShell-Skriptblock auf dem Server auf.
setState
Die Prop setState wird verwendet, um den Zustand der Komponente festzulegen. Dadurch wird sichergestellt, dass der Zustand verfolgt wird und Ihre Komponente mit Get-UDElement funktioniert.
Bei einem Textfeld sollten Sie beispielsweise props.setState aufrufen und den neuen Textwert für den Zustand übergeben.
children
Die Prop children ist eine standardmäßige React-Prop. Wenn Ihre Komponente untergeordnete Elemente unterstützt, etwa eine Liste oder ein Auswahlfeld, sollten Sie die standardmäßige Prop props.children verwenden, um sicherzustellen, dass die Cmdlets Add-UDElement, Remove-UDElement und Clear-UDElement korrekt funktionieren.
Fehlerbehebung und Debugging
Häufige Probleme
Komponente wird nicht gerendert:
Überprüfen Sie, ob der
typein Ihrer PowerShell-Funktion mit demUniversalDashboard.register()-Namen übereinstimmtPrüfen Sie, ob das Asset korrekt beim AssetService registriert ist
Stellen Sie sicher, dass
isPluginauf$truegesetzt istBestätigen Sie, dass die gebündelte JavaScript-Datei im Modulverzeichnis vorhanden ist
Props werden nicht korrekt übergeben:
Überprüfen Sie, ob die Eigenschaftsnamen zwischen der PowerShell-Hashtable und der React-Komponente übereinstimmen
Prüfen Sie die Browser-Konsole auf JavaScript-Fehler
Verwenden Sie React DevTools, um die Props der Komponente zu untersuchen
Build-Fehler:
Führen Sie
npm install --legacy-peer-depsaus, um sicherzustellen, dass die Abhängigkeiten installiert sindPrüfen Sie die JSX-Dateien auf Syntaxfehler
Überprüfen Sie, ob die externals in webpack.config.js korrekt konfiguriert sind
Stellen Sie sicher, dass babel für die JSX-Transformation korrekt konfiguriert ist
Debugging-Tipps
Browser-Konsole: Öffnen Sie die Entwicklertools des Browsers (F12), um JavaScript-Fehler und -Warnungen zu sehen.
React DevTools: Installieren Sie die React DevTools-Browsererweiterung, um die Komponentenhierarchie und Props zu untersuchen.
PowerShell-Debugging: Verwenden Sie Write-Host oder Write-Debug in Ihren PowerShell-Funktionen, um die Ausführung nachzuvollziehen.
Webpack Dev Server: Verwenden Sie während der Entwicklung webpack-dev-server für Hot Reloading:
Konfigurieren Sie dann PowerShell Universal so, dass es von der Dev-Server-URL lädt.
Beispiel: Vollständiger Komponenten-Workflow
Hier ist ein vollständiges Beispiel basierend auf dem Projekt ud-mermaid:
1. React-Komponente erstellen (Components/mermaid.jsx):
2. Komponente registrieren (Components/index.js):
3. PowerShell-Funktion erstellen (UniversalDashboard.Mermaid.psm1):
4. Erstellen und testen:
Zusätzliche Ressourcen
ud-mermaid GitHub-Repository: https://github.com/ironmansoftware/ud-mermaid - Vollständiges funktionierendes Beispiel
React-Dokumentation: https://react.dev
Webpack-Dokumentation: https://webpack.js.org
Zuletzt aktualisiert
War das hilfreich?