For the complete documentation index, see llms.txt. This page is also available as Markdown.

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.

Ein vollständiges funktionierendes Beispiel finden Sie im Projekt ud-mermaid auf GitHub. Dies ist eine produktionsreife benutzerdefinierte Komponente, die die Mermaid-Diagrammbibliothek in PowerShell Universal integriert.

Überblick

Das Erstellen einer benutzerdefinierten React-Komponente für PowerShell Universal umfasst mehrere zentrale Bestandteile:

  1. Projektstruktur: Ein Node.js-Projekt mit Webpack zum Bündeln von React-Komponenten

  2. React-Komponente (JSX): Die React-Komponente, die Ihre Benutzeroberfläche rendert

  3. PowerShell-Modul (PSM1): PowerShell-Funktionen, die Komponentendefinitionen erstellen

  4. Modulmanifest (PSD1): Standardmäßige PowerShell-Modulmetadaten

  5. Build-Prozess: Webpack-Konfiguration zum Bündeln von JavaScript-Assets

  6. Komponentenregistrierung: Registrierung Ihrer Komponente bei Universal Dashboard

Funktionsweise

Die Integration zwischen PowerShell und React funktioniert wie folgt:

  1. PowerShell-Seite: Ihre PowerShell-Funktion gibt eine Hashtabelle mit Komponenteneigenschaften zurück

  2. Asset-Registrierung: Das gebündelte JavaScript wird beim AssetService von PowerShell Universal registriert

  3. Komponententyp: Die Eigenschaft type verknüpft die PowerShell-Hashtabelle mit der React-Komponente

  4. Übergabe von Props: Eigenschaften der Hashtabelle werden automatisch zu React-Props

  5. 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:

  1. Aus universal-dashboard importieren

  2. Das withComponentFeatures-HOC (Higher-Order Component) verwenden

  3. Props 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:

  1. Die gebündelte JavaScript-Datei beim AssetService registrieren

  2. 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 ID

  • isPlugin – Für benutzerdefinierte Komponenten immer auf $true gesetzt

  • type – Muss mit dem Namen übereinstimmen, den Sie in UniversalDashboard.register() verwendet haben

  • id – Ein eindeutiger Bezeichner für die Komponenteninstanz

  • Weitere 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:

  • react und react-dom – Werden von PowerShell Universal bereitgestellt

  • UniversalDashboard – 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:

  1. Bündelt den gesamten JavaScript-/React-Code mit Webpack

  2. Gibt gebündelte Dateien mit Hash-Namen aus (z. B. index.78a6d857.bundle.js)

  3. 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-Änderungen

  • useRef – Für den direkten Zugriff auf DOM-Elemente

  • useState – Für die Verwaltung des internen Komponentenzustands

  • useMemo / 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:

  1. Überprüfen Sie, ob der type in Ihrer PowerShell-Funktion mit dem UniversalDashboard.register()-Namen übereinstimmt

  2. Prüfen Sie, ob das Asset korrekt beim AssetService registriert ist

  3. Stellen Sie sicher, dass isPlugin auf $true gesetzt ist

  4. Bestätigen Sie, dass die gebündelte JavaScript-Datei im Modulverzeichnis vorhanden ist

Props werden nicht korrekt übergeben:

  1. Überprüfen Sie, ob die Eigenschaftsnamen zwischen der PowerShell-Hashtable und der React-Komponente übereinstimmen

  2. Prüfen Sie die Browser-Konsole auf JavaScript-Fehler

  3. Verwenden Sie React DevTools, um die Props der Komponente zu untersuchen

Build-Fehler:

  1. Führen Sie npm install --legacy-peer-deps aus, um sicherzustellen, dass die Abhängigkeiten installiert sind

  2. Prüfen Sie die JSX-Dateien auf Syntaxfehler

  3. Überprüfen Sie, ob die externals in webpack.config.js korrekt konfiguriert sind

  4. 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

Zuletzt aktualisiert

War das hilfreich?