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

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.

Para ver un ejemplo funcional completo, consulte el proyecto ud-mermaid en GitHub. Se trata de un componente personalizado listo para producción que integra la biblioteca de diagramas Mermaid con PowerShell Universal.

Descripción general

La creación de un componente React personalizado para PowerShell Universal implica varios elementos clave:

  1. Estructura del proyecto: un proyecto de Node.js con Webpack para empaquetar componentes React

  2. Componente React (JSX): el componente React que representa su interfaz de usuario

  3. Módulo de PowerShell (PSM1): funciones de PowerShell que crean definiciones de componentes

  4. Manifiesto del módulo (PSD1): metadatos estándar del módulo de PowerShell

  5. Proceso de compilación: configuración de Webpack para empaquetar los recursos JavaScript

  6. Registro de componentes: registro de su componente con Universal Dashboard

Cómo funciona

La integración entre PowerShell y React funciona así:

  1. Lado de PowerShell: su función de PowerShell devuelve una tabla hash con las propiedades del componente

  2. Registro de recursos: el JavaScript empaquetado se registra con el AssetService de PowerShell Universal

  3. Tipo de componente: la propiedad type vincula la tabla hash de PowerShell con el componente React

  4. Paso de props: las propiedades de la tabla hash se convierten automáticamente en props de React

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

  1. Importar desde universal-dashboard

  2. Utilizar el HOC withComponentFeatures (componente de orden superior)

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

  1. Registrar el fichero JavaScript empaquetado con el AssetService

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

  • isPlugin: siempre debe establecerse en $true para los componentes personalizados

  • type: debe coincidir con el nombre que utilizó en UniversalDashboard.register()

  • id: un identificador único para la instancia del componente

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

  • react y react-dom: proporcionados por PowerShell Universal

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

  1. Empaqueta todo el código JavaScript/React con Webpack

  2. Genera ficheros empaquetados con nombres con hash (por ejemplo, index.78a6d857.bundle.js)

  3. 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 props

  • useRef: para acceder directamente a elementos del DOM

  • useState: para gestionar el estado interno del componente

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

  1. Verifique que el type de su función de PowerShell coincida con el nombre de UniversalDashboard.register()

  2. Compruebe que el recurso esté correctamente registrado con AssetService

  3. Asegúrese de que isPlugin esté establecido en $true

  4. Confirme que el fichero JavaScript empaquetado existe en el directorio del módulo

Las props no se pasan correctamente:

  1. Verifique que los nombres de las propiedades coincidan entre la tabla hash de PowerShell y el componente de React

  2. Consulte la consola del navegador para ver si hay errores de JavaScript

  3. Utilice React DevTools para inspeccionar las props del componente

Fallos de compilación:

  1. Ejecute npm install --legacy-peer-deps para asegurarse de que las dependencias estén instaladas

  2. Compruebe si hay errores de sintaxis en los ficheros JSX

  3. Verifique que los externals de webpack.config.js estén configurados correctamente

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

Última actualización

¿Te fue útil?