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

Créer des composants JavaScript personnalisés

Universal est extensible et vous pouvez créer des composants et des cadres JavaScript personnalisés. Ce document explique comment créer des composants personnalisés qui s'intègrent à la plateforme d'applis Universal.

Pour un exemple complet et fonctionnel, consultez le projet ud-mermaid sur GitHub. Il s'agit d'un composant personnalisé prêt pour la production qui intègre la bibliothèque de diagrammes Mermaid à PowerShell Universal.

Survol

La création d'un composant React personnalisé pour PowerShell Universal implique plusieurs éléments clés :

  1. Structure du projet : un projet Node.js avec Webpack pour regrouper les composants React

  2. Composant React (JSX) : le composant React qui affiche votre interface utilisateur

  3. Module PowerShell (PSM1) : des fonctions PowerShell qui créent des définitions de composants

  4. Manifeste de module (PSD1) : métadonnées standards de module PowerShell

  5. Processus de génération : configuration Webpack pour regrouper les actifs JavaScript

  6. Enregistrement du composant : enregistrement de votre composant auprès de Universal Dashboard

Fonctionnement

L'intégration entre PowerShell et React fonctionne comme suit :

  1. Côté PowerShell : votre fonction PowerShell retourne une table de hachage contenant les propriétés du composant

  2. Enregistrement de l'actif : le JavaScript regroupé est enregistré auprès du AssetService de PowerShell Universal

  3. Type de composant : la propriété type relie la table de hachage PowerShell au composant React

  4. Passage des props : les propriétés de la table de hachage deviennent automatiquement des props React

  5. Affichage : Universal Dashboard charge le paquet JavaScript et affiche le composant React

L'exemple ud-mermaid

Tout au long de ce guide, nous ferons référence au projet ud-mermaid comme exemple concret. Ce composant encapsule la bibliothèque de diagrammes Mermaid.js pour une utilisation dans PowerShell Universal, ce qui démontre :

  • L'intégration d'une bibliothèque JavaScript tierce

  • L'utilisation des crochets React (useEffect, useRef)

  • Le passage d'objets de configuration

  • Une structure de projet professionnelle

  • L'automatisation de la génération

Étape par étape

La section suivante vous guidera étape par étape à travers les différents aspects de la création d'un composant d'appli Universal.

1. Installer les dépendances

Vous devrez installer les dépendances suivantes avant de créer votre composant.

  • NodeJS - Requis pour npm et l'exécution des outils de génération

2. Créer un nouveau projet

Créez un nouveau répertoire pour votre projet de composant :

Initialisez un nouveau projet npm :

Cela crée une structure de projet de base comprenant :

  • package.json - Les dépendances Node.js et les scripts de génération

3. Installer les dépendances JavaScript

Installez les outils de génération et les dépendances React requis :

Installez le paquet Universal Dashboard :

Par exemple, le projet ud-mermaid inclut le paquet mermaid comme dépendance additionnelle :

Installez toute bibliothèque additionnelle dont votre composant a besoin :

4. Créer la structure du projet

Créez les répertoires nécessaires pour votre composant :

5. Créer votre composant React

Créez un composant React dans le répertoire Components/. Votre composant doit :

  1. Importer depuis universal-dashboard

  2. Utiliser le HOC withComponentFeatures (composant d'ordre supérieur)

  3. Accepter des props qui correspondent aux paramètres de votre fonction PowerShell

Exemple provenant de ud-mermaid (Components/mermaid.jsx) :

6. Enregistrer votre composant

Créez un fichier index.js dans le répertoire Components/ qui enregistre votre composant auprès de Universal Dashboard :

La chaîne que vous passez à register() devient la propriété type que vous utiliserez dans votre fonction PowerShell.

7. Créer les fonctions PowerShell

Vous devrez maintenant écrire le code du module PowerShell. Vous devrez mettre à jour le fichier PSM1 pour charger les actifs et définir des fonctions qui créent des définitions de composants.

Le fichier PSM1 doit :

  1. Enregistrer le fichier JavaScript regroupé auprès du AssetService

  2. Définir des fonctions qui retournent des tables de hachage contenant les propriétés du composant

Exemple provenant de ud-mermaid (UniversalDashboard.Mermaid.psm1) :

Propriétés clés de la table de hachage :

  • assetId - L'ID retourné par RegisterAsset

  • isPlugin - Toujours défini à $true pour les composants personnalisés

  • type - Doit correspondre au nom que vous avez utilisé dans UniversalDashboard.register()

  • id - Un identifiant unique pour l'instance du composant

  • Les propriétés additionnelles sont passées comme props à votre composant React

8. Configurer Webpack

Votre fichier webpack.config.js doit regrouper vos composants et externaliser les dépendances React et Universal Dashboard. Voici la configuration essentielle de ud-mermaid :

Externals importants :

  • react et react-dom - Fournis par PowerShell Universal

  • UniversalDashboard - L'objet global Universal Dashboard

8.1. Configurer Babel

Créez un fichier .babelrc pour configurer la transformation JSX et JavaScript moderne :

Cette configuration :

  • Transforme le JSX en JavaScript

  • Transpile le JavaScript moderne pour la compatibilité avec les navigateurs

  • Active des fonctionnalités utiles du langage JavaScript

9. Créer le manifeste du module

Créez un manifeste de module PowerShell standard (.psd1) avec les métadonnées de votre composant :

10. Générer le projet

Vous pouvez maintenant générer votre projet. Il produira un module que vous pourrez charger dans PowerShell Universal.

D'abord, ajoutez des scripts de génération à votre package.json :

Puis lancez la génération :

Facultatif : créer un script de génération (comme le component.build.ps1 de ud-mermaid) :

Puis exécutez-le :

Le processus de génération :

  1. Regroupe tout le code JavaScript/React à l'aide de Webpack

  2. Produit des fichiers regroupés avec des noms de hachage (p. ex., index.78a6d857.bundle.js)

  3. Copie les fichiers du module (.psm1, .psd1) dans le répertoire de sortie

11. Utiliser dans PowerShell Universal

Dans votre appli, chargez votre module et exécutez la fonction.

Exemple de structure de projet

Voici la structure typique d'un projet de composant personnalisé (provenant de ud-mermaid) :

Props

Les props sont des valeurs qui sont passées soit à partir de la table de hachage PowerShell fournie par l'utilisateur, soit par la fonction d'ordre supérieur withComponentsFeature de l'appli Universal.

Standard

Les propriétés que vous définissez dans votre table de hachage dans PowerShell seront automatiquement envoyées comme props au composant React.

Par exemple, si vous définissez les propriétés diagram et config dans la table de hachage :

Vous aurez alors accès à ces props dans React :

Meilleures pratiques pour les props :

  • Utilisez des noms de props descriptifs qui correspondent aux noms des paramètres PowerShell

  • Gérez les props facultatifs avec des valeurs par défaut ou une logique conditionnelle

  • Les tables de hachage dans PowerShell deviennent automatiquement des objets JavaScript

Crochets React et cycle de vie du composant

Lorsque vous créez des composants personnalisés, vous pouvez utiliser tous les crochets React standards. Le composant ud-mermaid démontre l'utilisation de useEffect et useRef pour gérer le cycle de vie du composant et les références au DOM :

Modèles courants :

  • useEffect - Pour l'initialisation, le nettoyage et la réaction aux changements de props

  • useRef - Pour accéder directement aux éléments du DOM

  • useState - Pour gérer l'état interne du composant

  • useMemo / useCallback - Pour l'optimisation de la performance

Points de terminaison

Les points de terminaison sont particuliers par la façon dont ils sont enregistrés et par la façon dont ils sont passés comme props à votre composant. Vous devrez appeler Register sur le point de terminaison dans PowerShell et passer les variables Id et PSCmdlet.

Les points de terminaison sont créés à partir de ScriptBlocks et sont exécutés lorsque cet événement se produit.

Universal reliera automatiquement le point de terminaison à une fonction dans JavaScript. Cela signifie que vous pouvez utiliser les props pour appeler ce point de terminaison.

Remarquez l'appel de fonction props.onClick. Cela appellera automatiquement le bloc de script PowerShell sur le serveur.

setState

La prop setState est utilisée pour définir l'état du composant. Cela garantit que l'état est suivi et que votre composant fonctionnera avec Get-UDElement.

Par exemple, avec un champ de texte, vous voudrez appeler props.setState et passer la nouvelle valeur de texte pour l'état.

children

La prop children est une prop React standard. Si votre composant prend en charge des éléments enfants, comme une liste ou une boîte de sélection, vous devriez utiliser la prop standard props.children pour vous assurer que les applets de commande Add-UDElement , Remove-UDElement et Clear-UDElement fonctionnent correctement.

Dépannage et débogage

Problèmes courants

Le composant ne s'affiche pas :

  1. Vérifiez que le type dans votre fonction PowerShell correspond au nom UniversalDashboard.register()

  2. Vérifiez que l'actif est correctement enregistré auprès d'AssetService

  3. Assurez-vous que isPlugin est défini à $true

  4. Confirmez que le fichier JavaScript regroupé existe dans le répertoire du module

Les props ne sont pas transmises correctement :

  1. Vérifiez que les noms de propriétés correspondent entre la table de hachage PowerShell et le composant React

  2. Vérifiez la console du navigateur pour repérer les erreurs JavaScript

  3. Utilisez React DevTools pour inspecter les props du composant

Échecs de compilation :

  1. Exécutez npm install --legacy-peer-deps pour vous assurer que les dépendances sont installées

  2. Recherchez les erreurs de syntaxe dans les fichiers JSX

  3. Vérifiez que les externals de webpack.config.js sont correctement configurés

  4. Assurez-vous que babel est correctement configuré pour la transformation JSX

Conseils de débogage

Console du navigateur : Ouvrez les outils de développement du navigateur (F12) pour voir les erreurs et avertissements JavaScript.

React DevTools : Installez l'extension de navigateur React DevTools pour inspecter la hiérarchie et les props du composant.

Débogage PowerShell : Utilisez Write-Host ou Write-Debug dans vos fonctions PowerShell pour tracer l'exécution.

Serveur de développement Webpack : Pendant le développement, utilisez webpack-dev-server pour le rechargement à chaud :

Configurez ensuite PowerShell Universal pour charger depuis l'URL du serveur de développement.

Exemple : flux de travail complet d'un composant

Voici un exemple complet basé sur le projet ud-mermaid :

1. Créer le composant React (Components/mermaid.jsx) :

2. Enregistrer le composant (Components/index.js) :

3. Créer la fonction PowerShell (UniversalDashboard.Mermaid.psm1) :

4. Compiler et tester :

Ressources supplémentaires

Mis à jour

Ce contenu vous a-t-il été utile ?