Création de composants JavaScript personnalisés
Ce document explique comment créer des composants personnalisés pour les applications Universal.
Universal est extensible et vous permet de créer des composants et des frameworks JavaScript personnalisés. Ce document explique comment créer des composants personnalisés qui s'intègrent à la plateforme d'applications Universal.
Il s'agit d'un sujet avancé qui n'est pas nécessaire si vous souhaitez simplement utiliser Universal Apps.
Pour un exemple fonctionnel complet, 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 avec PowerShell Universal.
Vue d'ensemble
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) : Les fonctions PowerShell qui créent les définitions de composants
Manifeste du module (PSD1) : Les métadonnées standard du module PowerShell
Processus de compilation : La configuration Webpack pour regrouper les ressources JavaScript
Enregistrement du composant : L'enregistrement de votre composant auprès de Universal Dashboard
Fonctionnement
L'intégration entre PowerShell et React fonctionne de la manière suivante :
Côté PowerShell : Votre fonction PowerShell retourne une table de hachage avec les propriétés du composant
Enregistrement des ressources : Le JavaScript regroupé est enregistré auprès de l'AssetService de PowerShell Universal
Type de composant : La propriété
typerelie la table de hachage PowerShell au composant ReactTransmission des props : Les propriétés de la table de hachage deviennent automatiquement des props React
Rendu : Universal Dashboard charge le bundle 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, et illustre :
L'intégration de bibliothèques JavaScript tierces
L'utilisation des hooks React (useEffect, useRef)
La transmission d'objets de configuration
Une structure de projet professionnelle
L'automatisation de la compilation
Procédure pas à pas
La section suivante vous guidera étape par étape à travers les différents aspects de la création d'un composant Universal App.
1. Installation des dépendances
Vous devez installer les dépendances suivantes avant de créer votre composant.
NodeJS - Requis pour npm et l'exécution des outils de compilation
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 compilation
3. Installer les dépendances JavaScript
Installez les outils de compilation et les dépendances React requis :
Installez le package Universal Dashboard :
Par exemple, le projet ud-mermaid inclut le package mermaid comme dépendance supplémentaire :
Installez les bibliothèques supplémentaires 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 (composant d'ordre supérieur)
withComponentFeaturesAccepter des props correspondant aux paramètres de votre fonction PowerShell
Exemple tiré 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 de caractères que vous passez à register() devient la propriété type que vous utiliserez dans votre fonction PowerShell.
7. Créer les fonctions PowerShell
Vous devez maintenant rédiger le code du module PowerShell. Vous devrez mettre à jour le fichier PSM1 pour charger les ressources et définir les fonctions qui créent les définitions de composants.
Le fichier PSM1 doit :
Enregistrer le fichier JavaScript regroupé auprès de l'AssetService
Définir des fonctions qui retournent des tables de hachage avec les propriétés du composant
Exemple tiré de ud-mermaid (UniversalDashboard.Mermaid.psm1) :
Propriétés clés de la table de hachage :
assetId- L'identifiant retourné par RegisterAssetisPlugin- Toujours défini à$truepour les composants personnaliséstype- Doit correspondre au nom utilisé dansUniversalDashboard.register()id- Un identifiant unique pour l'instance du composantLes propriétés supplémentaires sont transmises 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 tirée 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 du JavaScript moderne :
Cette configuration :
Transforme 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. Compiler le projet
Vous pouvez maintenant compiler votre projet. Cela produira un module que vous pourrez charger dans PowerShell Universal.
Commencez par ajouter des scripts de compilation à votre fichier package.json :
Puis lancez la compilation :
Facultatif : Créer un script de compilation (comme le fichier component.build.ps1 de ud-mermaid) :
Puis exécutez-le :
Le processus de compilation :
Regroupe tout le code JavaScript/React à l'aide de Webpack
Produit des fichiers regroupés avec des noms de hachage (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 application, chargez votre module et exécutez la fonction.
Exemple de structure de projet
Voici la structure typique d'un projet de composant personnalisé (tiré de ud-mermaid) :
Props
Les props sont des valeurs qui sont soit transmises depuis la table de hachage PowerShell fournie par l'utilisateur, soit par la fonction d'ordre supérieur withComponentsFeature de Universal App.
Standard
Les propriétés que vous définissez dans votre table de hachage PowerShell seront automatiquement transmises 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 :
Bonnes pratiques pour les props :
Utilisez des noms de props descriptifs correspondant 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 PowerShell deviennent automatiquement des objets JavaScript
Hooks React et cycle de vie des composants
Lors de la création de composants personnalisés, vous pouvez utiliser tous les hooks React standard. Le composant ud-mermaid illustre l'utilisation de useEffect et useRef pour gérer le cycle de vie du composant et les références DOM :
Modèles courants :
useEffect- Pour l'initialisation, le nettoyage et la réponse aux changements de propsuseRef- Pour accéder directement aux éléments DOMuseState- Pour gérer l'état interne du composantuseMemo/useCallback- Pour l'optimisation des performances
Points de terminaison
Les points de terminaison sont particuliers dans la façon dont ils sont enregistrés et transmis comme props à votre composant. Vous devez appeler Register sur le point de terminaison dans PowerShell et transmettre les variables Id et PSCmdlet.
Les points de terminaison sont créés à partir de ScriptBlocks et sont exécutés lorsque l'événement correspondant se produit.
Universal connectera automatiquement le point de terminaison à une fonction JavaScript. Cela signifie que vous pouvez utiliser les props pour appeler ce point de terminaison.
Remarquez l'appel de la 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 souhaiterez appeler props.setState et transmettre 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 devez utiliser la prop standard props.children pour vous assurer que les cmdlets Add-UDElement, Remove-UDElement et Clear-UDElement fonctionnent correctement.
Résolution des problèmes et débogage
Problèmes courants
Le composant ne s'affiche pas :
Vérifiez que la propriété
typedans votre fonction PowerShell correspond au nom utilisé dansUniversalDashboard.register()Vérifiez que la ressource est correctement enregistrée auprès de l'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 transmis 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 détecter 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éesVérifiez 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 des composants et les props.
Débogage PowerShell : Utilisez Write-Host ou Write-Debug dans vos fonctions PowerShell pour tracer l'exécution.
Webpack Dev Server : Lors du 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
Référentiel GitHub ud-mermaid : https://github.com/ironmansoftware/ud-mermaid - Exemple fonctionnel complet
Documentation React : https://react.dev
Documentation Webpack : https://webpack.js.org
Mis à jour
Ce contenu vous a-t-il été utile ?