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.
Il s'agit d'un sujet avancé qui n'est pas nécessaire si vous souhaitez simplement utiliser les applis Universal.
Survol
La création d'un composant React personnalisé pour PowerShell Universal implique plusieurs éléments clés :
Structure du projet : un projet Node.js avec Webpack pour regrouper les composants React
Composant React (JSX) : le composant React qui affiche votre interface utilisateur
Module PowerShell (PSM1) : des fonctions PowerShell qui créent des définitions de composants
Manifeste de module (PSD1) : métadonnées standards de module PowerShell
Processus de génération : configuration Webpack pour regrouper les actifs JavaScript
Enregistrement du composant : enregistrement de votre composant auprès de Universal Dashboard
Fonctionnement
L'intégration entre PowerShell et React fonctionne comme suit :
Côté PowerShell : votre fonction PowerShell retourne une table de hachage contenant les propriétés du composant
Enregistrement de l'actif : le JavaScript regroupé est enregistré auprès du AssetService de PowerShell Universal
Type de composant : la propriété
typerelie la table de hachage PowerShell au composant ReactPassage des props : les propriétés de la table de hachage deviennent automatiquement des props React
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 :
Importer depuis
universal-dashboardUtiliser le HOC
withComponentFeatures(composant d'ordre supérieur)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 :
Enregistrer le fichier JavaScript regroupé auprès du AssetService
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 RegisterAssetisPlugin- Toujours défini à$truepour les composants personnaliséstype- Doit correspondre au nom que vous avez utilisé dansUniversalDashboard.register()id- Un identifiant unique pour l'instance du composantLes 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 :
reactetreact-dom- Fournis par PowerShell UniversalUniversalDashboard- 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 :
Regroupe tout le code JavaScript/React à l'aide de Webpack
Produit des fichiers regroupés avec des noms de hachage (p. ex.,
index.78a6d857.bundle.js)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 propsuseRef- Pour accéder directement aux éléments du DOMuseState- Pour gérer l'état interne du composantuseMemo/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 :
Vérifiez que le
typedans votre fonction PowerShell correspond au nomUniversalDashboard.register()Vérifiez que l'actif est correctement enregistré auprès d'AssetService
Assurez-vous que
isPluginest défini à$trueConfirmez que le fichier JavaScript regroupé existe dans le répertoire du module
Les props ne sont pas transmises correctement :
Vérifiez que les noms de propriétés correspondent entre la table de hachage PowerShell et le composant React
Vérifiez la console du navigateur pour repérer les erreurs JavaScript
Utilisez React DevTools pour inspecter les props du composant
Échecs de compilation :
Exécutez
npm install --legacy-peer-depspour vous assurer que les dépendances sont installéesRecherchez les erreurs de syntaxe dans les fichiers JSX
Vérifiez que les externals de webpack.config.js sont correctement configurés
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
Dépôt GitHub ud-mermaid : https://github.com/ironmansoftware/ud-mermaid - Exemple fonctionnel complet
Documentation de React : https://react.dev
Documentation de Webpack : https://webpack.js.org
Mis à jour
Ce contenu vous a-t-il été utile ?