Creación de componentes JavaScript personalizados
Universal es extensible y puede crear componentes y marcos de trabajo JavaScript personalizados. Este documento explica cómo crear componentes personalizados que se integren con la plataforma de aplicaciones de Universal.
Este es un tema avanzado y no es necesario si solo desea utilizar Universal Apps.
Descripción general
La creación de un componente React personalizado para PowerShell Universal implica varios elementos clave:
Estructura del proyecto: un proyecto de Node.js con Webpack para empaquetar componentes React
Componente React (JSX): el componente React que representa su interfaz de usuario
Módulo de PowerShell (PSM1): funciones de PowerShell que crean definiciones de componentes
Manifiesto del módulo (PSD1): metadatos estándar del módulo de PowerShell
Proceso de compilación: configuración de Webpack para empaquetar los recursos JavaScript
Registro de componentes: registro de su componente con Universal Dashboard
Cómo funciona
La integración entre PowerShell y React funciona así:
Lado de PowerShell: su función de PowerShell devuelve una tabla hash con las propiedades del componente
Registro de recursos: el JavaScript empaquetado se registra con el AssetService de PowerShell Universal
Tipo de componente: la propiedad
typevincula la tabla hash de PowerShell con el componente ReactPaso de props: las propiedades de la tabla hash se convierten automáticamente en props de React
Representación: Universal Dashboard carga el paquete de JavaScript y representa el componente React
El ejemplo ud-mermaid
A lo largo de esta guía haremos referencia al proyecto ud-mermaid como ejemplo real. Este componente encapsula la biblioteca de diagramas Mermaid.js para su uso en PowerShell Universal y demuestra:
Integración de bibliotecas JavaScript de terceros
Uso de hooks de React (useEffect, useRef)
Paso de objetos de configuración
Estructura de proyecto profesional
Automatización de la compilación
Paso a paso
La siguiente sección le guiará paso a paso por los distintos aspectos de la creación de un componente de aplicación de Universal.
1. Instalación de dependencias
Deberá instalar las siguientes dependencias antes de crear su componente.
NodeJS: necesario para npm y para ejecutar las herramientas de compilación
2. Crear un nuevo proyecto
Cree un nuevo directorio para el proyecto de su componente:
Inicialice un nuevo proyecto npm:
Esto crea una estructura de proyecto básica que incluye:
package.json: dependencias de Node.js y scripts de compilación
3. Instalar las dependencias de JavaScript
Instale las herramientas de compilación y las dependencias de React necesarias:
Instale el paquete de Universal Dashboard:
Por ejemplo, el proyecto ud-mermaid incluye el paquete mermaid como dependencia adicional:
Instale cualquier biblioteca adicional que necesite su componente:
4. Crear la estructura del proyecto
Cree los directorios necesarios para su componente:
5. Crear su componente React
Cree un componente React en el directorio Components/. Su componente debe:
Importar desde
universal-dashboardUtilizar el HOC
withComponentFeatures(componente de orden superior)Aceptar props que coincidan con los parámetros de su función de PowerShell
Ejemplo de ud-mermaid (Components/mermaid.jsx):
6. Registrar su componente
Cree un fichero index.js en el directorio Components/ que registre su componente con Universal Dashboard:
La cadena que pase a register() se convierte en la propiedad type que utilizará en su función de PowerShell.
7. Crear funciones de PowerShell
Ahora deberá escribir el código del módulo de PowerShell. Tendrá que actualizar el fichero PSM1 para cargar los recursos y definir funciones que creen definiciones de componentes.
El fichero PSM1 debe:
Registrar el fichero JavaScript empaquetado con el AssetService
Definir funciones que devuelvan tablas hash con las propiedades del componente
Ejemplo de ud-mermaid (UniversalDashboard.Mermaid.psm1):
Propiedades clave de la tabla hash:
assetId: el ID devuelto por RegisterAssetisPlugin: siempre debe establecerse en$truepara los componentes personalizadostype: debe coincidir con el nombre que utilizó enUniversalDashboard.register()id: un identificador único para la instancia del componenteLas propiedades adicionales se pasan como props a su componente React
8. Configurar Webpack
Su webpack.config.js debe empaquetar sus componentes y externalizar las dependencias de React y Universal Dashboard. Esta es la configuración esencial de ud-mermaid:
Externals importantes:
reactyreact-dom: proporcionados por PowerShell UniversalUniversalDashboard: el objeto global de Universal Dashboard
8.1. Configurar Babel
Cree un fichero .babelrc para configurar la transformación de JSX y de JavaScript moderno:
Esta configuración:
Transforma JSX en JavaScript
Transpila JavaScript moderno para garantizar la compatibilidad con los navegadores
Habilita funciones útiles del lenguaje JavaScript
9. Crear el manifiesto del módulo
Cree un manifiesto estándar de módulo de PowerShell (.psd1) con los metadatos de su componente:
10. Compilar el proyecto
Ahora puede compilar su proyecto. Generará un módulo que podrá cargar en PowerShell Universal.
Primero, añada scripts de compilación a su package.json:
A continuación, ejecute la compilación:
Opcional: cree un script de compilación (como el component.build.ps1 de ud-mermaid):
Después ejecútelo:
El proceso de compilación:
Empaqueta todo el código JavaScript/React con Webpack
Genera ficheros empaquetados con nombres con hash (por ejemplo,
index.78a6d857.bundle.js)Copia los ficheros del módulo (
.psm1,.psd1) en el directorio de salida
11. Utilizar en PowerShell Universal
Dentro de su aplicación, cargue su módulo y ejecute la función.
Ejemplo de estructura de proyecto
Esta es la estructura típica de un proyecto de componente personalizado (de ud-mermaid):
Props
Las props son valores que se pasan desde la tabla hash de PowerShell proporcionada por el usuario o desde la función de orden superior withComponentsFeature de Universal App.
Estándar
Las propiedades que establezca en su tabla hash en PowerShell se enviarán automáticamente como props al componente React.
Por ejemplo, si establece las propiedades diagram y config en la tabla hash:
Entonces tendrá acceso a esas props en React:
Buenas prácticas para las props:
Utilice nombres de props descriptivos que coincidan con los nombres de los parámetros de PowerShell
Gestione las props opcionales con valores predeterminados o lógica condicional
Las tablas hash de PowerShell se convierten automáticamente en objetos de JavaScript
Hooks de React y ciclo de vida de los componentes
Al crear componentes personalizados, puede utilizar todos los hooks estándar de React. El componente ud-mermaid demuestra el uso de useEffect y useRef para gestionar el ciclo de vida del componente y las referencias al DOM:
Patrones habituales:
useEffect: para la inicialización, la limpieza y la respuesta a cambios en las propsuseRef: para acceder directamente a elementos del DOMuseState: para gestionar el estado interno del componenteuseMemo/useCallback: para optimizar el rendimiento
Endpoints
Los endpoints son especiales por la forma en la que se registran y en la que se pasan como props a su componente. Deberá llamar a Register en el endpoint en PowerShell y pasar las variables Id y PSCmdlet.
Los endpoints se crean a partir de ScriptBlocks y se ejecutan cuando se produce ese evento.
Universal conectará automáticamente el endpoint a una función en JavaScript. Esto significa que puede utilizar las props para llamar a ese endpoint.
Observe la llamada a la función props.onClick. Esto llamará automáticamente al bloque de script de PowerShell en el servidor.
setState
La prop setState se utiliza para establecer el estado del componente. Esto garantiza que se realice el seguimiento del estado y que su componente funcione con Get-UDElement.
Por ejemplo, con un campo de texto, deberá llamar a props.setState y pasar el nuevo valor de texto para el estado.
children
La prop children es una prop estándar de React. Si su componente admite elementos secundarios, como una lista o un cuadro de selección, debe utilizar la prop estándar props.children para garantizar que los cmdlets Add-UDElement, Remove-UDElement y Clear-UDElement funcionen correctamente.
Resolución de problemas y depuración
Problemas habituales
El componente no se renderiza:
Verifique que el
typede su función de PowerShell coincida con el nombre deUniversalDashboard.register()Compruebe que el recurso esté correctamente registrado con AssetService
Asegúrese de que
isPluginesté establecido en$trueConfirme que el fichero JavaScript empaquetado existe en el directorio del módulo
Las props no se pasan correctamente:
Verifique que los nombres de las propiedades coincidan entre la tabla hash de PowerShell y el componente de React
Consulte la consola del navegador para ver si hay errores de JavaScript
Utilice React DevTools para inspeccionar las props del componente
Fallos de compilación:
Ejecute
npm install --legacy-peer-depspara asegurarse de que las dependencias estén instaladasCompruebe si hay errores de sintaxis en los ficheros JSX
Verifique que los externals de webpack.config.js estén configurados correctamente
Asegúrese de que babel esté configurado correctamente para la transformación de JSX
Consejos de depuración
Consola del navegador: Abra las herramientas de desarrollo del navegador (F12) para ver los errores y advertencias de JavaScript.
React DevTools: Instale la extensión de navegador React DevTools para inspeccionar la jerarquía y las props de los componentes.
Depuración de PowerShell: Utilice Write-Host o Write-Debug en sus funciones de PowerShell para rastrear la ejecución.
Servidor de desarrollo de webpack: Durante el desarrollo, utilice webpack-dev-server para la recarga en caliente:
A continuación, configure PowerShell Universal para que cargue desde la URL del servidor de desarrollo.
Ejemplo: flujo de trabajo completo de un componente
Aquí tiene un ejemplo completo basado en el proyecto ud-mermaid:
1. Cree el componente de React (Components/mermaid.jsx):
2. Registre el componente (Components/index.js):
3. Cree la función de PowerShell (UniversalDashboard.Mermaid.psm1):
4. Compile y pruebe:
Recursos adicionales
Repositorio de GitHub ud-mermaid: https://github.com/ironmansoftware/ud-mermaid - Ejemplo completo funcional
Documentación de React: https://react.dev
Documentación de Webpack: https://webpack.js.org
Última actualización
¿Te fue útil?