Creazione di componenti JavaScript personalizzati
Universal è estensibile e permette di creare componenti e framework JavaScript personalizzati. Questo documento illustra come creare componenti personalizzati che si integrano con la piattaforma di app Universal.
Questo è un argomento avanzato e non è necessario se desidera semplicemente utilizzare le Universal Apps.
Panoramica
La creazione di un componente React personalizzato per PowerShell Universal coinvolge diversi elementi chiave:
Struttura del progetto: un progetto Node.js con Webpack per il bundling dei componenti React
Componente React (JSX): il componente React che esegue il rendering della sua interfaccia utente
Modulo PowerShell (PSM1): funzioni PowerShell che creano le definizioni dei componenti
Manifesto del modulo (PSD1): metadati standard del modulo PowerShell
Processo di build: configurazione Webpack per il bundling degli asset JavaScript
Registrazione del componente: registrazione del componente con Universal Dashboard
Come funziona
L'integrazione tra PowerShell e React funziona in questo modo:
Lato PowerShell: la sua funzione PowerShell restituisce una hashtable con le proprietà del componente
Registrazione degli asset: il JavaScript in bundle viene registrato con l'AssetService di PowerShell Universal
Tipo di componente: la proprietà
typecollega la hashtable di PowerShell al componente ReactPassaggio delle props: le proprietà della hashtable diventano automaticamente props di React
Rendering: Universal Dashboard carica il bundle JavaScript ed esegue il rendering del componente React
L'esempio ud-mermaid
In questa guida faremo riferimento al progetto ud-mermaid come esempio reale. Questo componente incapsula la libreria di diagrammi Mermaid.js per l'utilizzo in PowerShell Universal, dimostrando:
Integrazione di librerie JavaScript di terze parti
Utilizzo degli hook React (useEffect, useRef)
Passaggio di oggetti di configurazione
Struttura professionale del progetto
Automazione della build
Passo dopo passo
La sezione seguente la guiderà passo dopo passo attraverso i diversi aspetti della creazione di un componente per Universal App.
1. Installazione delle dipendenze
Prima di creare il componente dovrà installare le seguenti dipendenze.
NodeJS - Necessario per npm e per l'esecuzione degli strumenti di build
2. Creare un nuovo progetto
Crei una nuova directory per il progetto del componente:
Inizializzi un nuovo progetto npm:
Questo crea una struttura di progetto di base che include:
package.json- Dipendenze Node.js e script di build
3. Installare le dipendenze JavaScript
Installi gli strumenti di build e le dipendenze React necessari:
Installi il pacchetto Universal Dashboard:
Ad esempio, il progetto ud-mermaid include il pacchetto mermaid come dipendenza aggiuntiva:
Installi eventuali librerie aggiuntive necessarie al suo componente:
4. Creare la struttura del progetto
Crei le directory necessarie per il suo componente:
5. Creare il componente React
Crei un componente React nella directory Components/. Il componente dovrebbe:
Importare da
universal-dashboardUtilizzare l'HOC
withComponentFeatures(Higher-Order Component)Accettare props che corrispondono ai parametri della sua funzione PowerShell
Esempio da ud-mermaid (Components/mermaid.jsx):
6. Registrare il componente
Crei un file index.js nella directory Components/ che registri il suo componente con Universal Dashboard:
La stringa che passa a register() diventa la proprietà type che utilizzerà nella sua funzione PowerShell.
7. Creare le funzioni PowerShell
Ora dovrà scrivere il codice del modulo PowerShell. Dovrà aggiornare il file PSM1 per caricare gli asset e definire le funzioni che creano le definizioni dei componenti.
Il file PSM1 dovrebbe:
Registrare il file JavaScript in bundle con l'AssetService
Definire funzioni che restituiscono hashtable con le proprietà del componente
Esempio da ud-mermaid (UniversalDashboard.Mermaid.psm1):
Proprietà chiave della hashtable:
assetId- L'ID restituito da RegisterAssetisPlugin- Sempre impostato su$trueper i componenti personalizzatitype- Deve corrispondere al nome utilizzato inUniversalDashboard.register()id- Un identificatore univoco per l'istanza del componenteLe proprietà aggiuntive vengono passate come props al suo componente React
8. Configurare Webpack
Il suo webpack.config.js dovrebbe eseguire il bundling dei componenti ed esternalizzare le dipendenze React e Universal Dashboard. Ecco la configurazione essenziale di ud-mermaid:
Externals importanti:
reactereact-dom- Forniti da PowerShell UniversalUniversalDashboard- L'oggetto globale Universal Dashboard
8.1. Configurare Babel
Crei un file .babelrc per configurare la trasformazione di JSX e del JavaScript moderno:
Questa configurazione:
Trasforma JSX in JavaScript
Transpila il JavaScript moderno per la compatibilità con i browser
Abilita utili funzionalità del linguaggio JavaScript
9. Creare il manifesto del modulo
Crei un manifesto standard del modulo PowerShell (.psd1) con i metadati del suo componente:
10. Compilare il progetto
Ora può compilare il progetto. Verrà generato un modulo che potrà caricare in PowerShell Universal.
Per prima cosa, aggiunga gli script di build al suo package.json:
Quindi esegua la build:
Facoltativo: creare uno script di build (come il component.build.ps1 di ud-mermaid):
Poi lo esegua:
Il processo di build:
Esegue il bundling di tutto il codice JavaScript/React utilizzando Webpack
Genera file in bundle con nomi con hash (ad esempio,
index.78a6d857.bundle.js)Copia i file del modulo (
.psm1,.psd1) nella directory di output
11. Utilizzo in PowerShell Universal
All'interno della sua app, carichi il modulo ed esegua la funzione.
Esempio di struttura del progetto
Ecco la struttura tipica di un progetto di componente personalizzato (da ud-mermaid):
Props
Le props sono valori passati dalla hashtable PowerShell fornita dall'utente oppure dalla funzione high-order withComponentsFeature di Universal App.
Standard
Le proprietà impostate nella hashtable in PowerShell verranno inviate automaticamente come props al componente React.
Ad esempio, se imposta le proprietà diagram e config nella hashtable:
Avrà quindi accesso a quelle props in React:
Best practice per le props:
Utilizzi nomi di props descrittivi che corrispondano ai nomi dei parametri PowerShell
Gestisca le props facoltative con valori predefiniti o logica condizionale
Le hashtable in PowerShell diventano automaticamente oggetti JavaScript
Hook React e ciclo di vita dei componenti
Quando crea componenti personalizzati, può utilizzare tutti gli hook React standard. Il componente ud-mermaid dimostra l'utilizzo di useEffect e useRef per gestire il ciclo di vita del componente e i riferimenti al DOM:
Pattern comuni:
useEffect- Per l'inizializzazione, la pulizia e la risposta alle modifiche delle propsuseRef- Per accedere direttamente agli elementi del DOMuseState- Per gestire lo stato interno del componenteuseMemo/useCallback- Per l'ottimizzazione delle prestazioni
Endpoint
Gli endpoint sono speciali per il modo in cui vengono registrati e per il modo in cui vengono passati come props al suo componente. Dovrà chiamare Register sull'endpoint in PowerShell e passare le variabili Id e PSCmdlet.
Gli endpoint vengono creati da ScriptBlock e vengono eseguiti al verificarsi dell'evento corrispondente.
Universal collegherà automaticamente l'endpoint a una funzione in JavaScript. Ciò significa che può utilizzare le props per chiamare quell'endpoint.
Noti la chiamata alla funzione props.onClick. Questa chiamerà automaticamente lo script block PowerShell sul server.
setState
La prop setState viene utilizzata per impostare lo stato del componente. Ciò garantisce che lo stato venga monitorato e che il suo componente funzioni con Get-UDElement.
Ad esempio, con un campo di testo, dovrà chiamare props.setState e passare il nuovo valore di testo per lo stato.
children
La prop children è una prop React standard. Se il suo componente supporta elementi figlio, come un elenco o una casella di selezione, dovrebbe utilizzare la prop standard props.children per garantire il corretto funzionamento dei cmdlet Add-UDElement, Remove-UDElement e Clear-UDElement.
Risoluzione dei problemi e debug
Problemi comuni
Il componente non viene renderizzato:
Verifichi che il
typenella sua funzione PowerShell corrisponda al nome diUniversalDashboard.register()Controlli che l'asset sia registrato correttamente con AssetService
Si assicuri che
isPluginsia impostato su$trueConfermi che il file JavaScript in bundle esista nella directory del modulo
Le props non vengono passate correttamente:
Verifichi che i nomi delle proprietà corrispondano tra la hashtable PowerShell e il componente React
Controlli la console del browser per eventuali errori JavaScript
Usi React DevTools per ispezionare le props del componente
Errori di build:
Esegua
npm install --legacy-peer-depsper assicurarsi che le dipendenze siano installateControlli la presenza di errori di sintassi nei file JSX
Verifichi che gli externals di webpack.config.js siano configurati correttamente
Si assicuri che babel sia configurato correttamente per la trasformazione JSX
Suggerimenti per il debug
Console del browser: Apra gli strumenti di sviluppo del browser (F12) per vedere errori e avvisi JavaScript.
React DevTools: Installi l'estensione del browser React DevTools per ispezionare la gerarchia dei componenti e le props.
Debug di PowerShell: Usi Write-Host o Write-Debug nelle sue funzioni PowerShell per tracciare l'esecuzione.
Webpack Dev Server: Durante lo sviluppo, usi webpack-dev-server per il hot reloading:
Quindi configuri PowerShell Universal per caricare dall'URL del dev server.
Esempio: flusso di lavoro completo di un componente
Ecco un esempio completo basato sul progetto ud-mermaid:
1. Creare il componente React (Components/mermaid.jsx):
2. Registrare il componente (Components/index.js):
3. Creare la funzione PowerShell (UniversalDashboard.Mermaid.psm1):
4. Compilare e testare:
Risorse aggiuntive
Repository GitHub ud-mermaid: https://github.com/ironmansoftware/ud-mermaid - Esempio funzionante completo
Documentazione di React: https://react.dev
Documentazione di Webpack: https://webpack.js.org
Ultimo aggiornamento
È stato utile?