VS Code

Anteprima live del frame della console accanto al codice, scaffolding App Router, snippet e link agli errori TX.

L’estensione Text.js per VS Code mostra il frame della console accanto al codice. Rispecchia l’app in esecuzione con text dev, oppure renderizza il file aperto quando non c’è nulla in esecuzione. Aggiunge anche la generazione di file per App Router, snippet e link per i codici di errore TX###.

Installazione

Installa Text.js dal Visual Studio Marketplace. In VS Code, apri la vista Estensioni (⌘⇧X) e cerca textjs.vscode-textjs, oppure esegui:

code --install-extension textjs.vscode-textjs

Si attiva in qualsiasi cartella che contiene un’app Text.js: un text.config.ts, oppure un pacchetto che dipende da @textjs/app e ha una directory app/. Funziona anche nei monorepo con più app.

Anteprima dal vivo

Apri un page.tsx, un layout.tsx o un componente ed esegui Text.js: Open Preview (⌘K V), oppure fai clic sul pulsante di anteprima nella barra del titolo dell’editor. Il pannello disegna il frame con la stessa cornice DevTools e le stesse celle Menlo della console del browser.

L’anteprima riceve i frame da una di due sorgenti. Il badge nella barra degli strumenti mostra quale è attiva:

SorgenteQuandoCosa vedi
Livetext dev è in esecuzione e una scheda del browser ha l’app apertaL’app reale, con il suo stato, i dati e le dimensioni della griglia
HeadlessNessun server di sviluppo o nessuna scheda apertaIl file aperto, renderizzato dall’estensione alle dimensioni del pannello

auto (il valore predefinito) usa Live quando può e Headless altrimenti. Fissa una delle due modalità dal badge o con textjs.preview.mode.

Tastiera

Fai clic sulla console per inviare i tasti all’app: frecce, Tab, scorciatoie, digitazione e incolla funzionano come nel browser. Fai clic fuori dalla console per smettere. Le scorciatoie dell’editor come ⌘P e ⌘⇧P continuano a essere inviate a VS Code. Lo scorrimento sopra la console invia eventi della rotellina.

Nel campo dell’indirizzo puoi digitare una route, come /deployments/dpl_a1, per navigare in entrambe le sorgenti.

Modalità Live

Mentre un’anteprima è aperta, il server di sviluppo chiede alle schede connesse di trasmettere i propri frame. Le schede inviano solo le righe modificate e smettono di inviarle quando l’anteprima si chiude, quindi un’app senza anteprime aperte non sostiene alcun costo. Il salvataggio di un file passa attraverso Fast Refresh e l’anteprima si aggiorna insieme alla scheda.

Attiva Follow (textjs.preview.followEditor) per spostare la scheda del browser sulla route del page.tsx che stai modificando.

Le schede in background non ricevono frame di animazione, quindi normalmente trattengono i propri frame finché non tornano visibili. Mentre un’anteprima le osserva, una scheda in background disegna un frame non appena arriva un input, quindi la digitazione nell’anteprima continua a produrre aggiornamenti. Le animazioni in una scheda in background si aggiornano circa una volta al secondo. Metti l’app in una finestra dedicata per mantenerle regolari.

Modalità Headless

L’estensione avvia un piccolo runner nel tuo progetto. Carica i file delle route tramite Vite e @textjs/app del progetto stesso, quindi alias, TypeScript e JSX si comportano come in text dev. Monta l’App Router sulla route del file aperto, con i suoi layout, usando una cronologia in memoria:

FileAnteprima
app/page.tsx/
app/(shop)/items/[id]/page.tsx/items/id (i segmenti dinamici usano il proprio nome)
app/blog/[[...slug]]/layout.tsx/blog
components/Card.tsxL’export predefinito, o il primo export PascalCase, senza prop

Le chiamate fetch("/api/...") della stessa origine eseguono gli handler route.ts nello stesso processo, come con text run. La griglia segue le dimensioni del pannello e il salvataggio di qualsiasi file nell’app la renderizza di nuovo. Gli errori appaiono sopra il frame, con link alle rispettive pagine TX###.

Comandi

ComandoDescrizione
Text.js: Start Dev ServerEsegue lo script dev (o text dev) in un terminale
Text.js: Stop Dev ServerArresta un server di sviluppo avviato da VS Code
Text.js: Open PreviewApre l’anteprima dal vivo per il file attivo
Text.js: Open in Browser ConsoleApre la route corrente sul server di sviluppo. Poi apri la console del browser
Text.js: New Pageapp/<route>/page.tsx con metadati e params tipizzati
Text.js: New Layoutapp/<route>/layout.tsx
Text.js: New Route Handlerapp/<route>/route.ts con GET e POST
Text.js: New Loading UI / Error Boundary / Not Found Pageloading.tsx, error.tsx, not-found.tsx

I comandi di generazione dei file si trovano anche nel menu contestuale delle cartelle in Esplora risorse. Accettano segmenti di App Router come settings, blog/[slug], docs/[...path] e (marketing)/about, e rifiutano di inserire un page e un route.ts nello stesso segmento. I progetti JavaScript (senza tsconfig.json) ricevono file .jsx e .js.

Snippet

PrefissoInserisce
txpage, txlayout, txloading, txerrorFile delle route, con il nome della cartella
txcUn componente della console con il nome del file
txroute, txroutepRoute handler, con o senza parametri
box, boxb, text, scrollbox, link, spinnerComponenti
input, select, tabsComponenti interattivi
useInput, useKeymap, useFocus, useTheme, useViewport, useRouter, useIntervalHook
metadata, txconfigMetadati della route e text.config.ts

Codici di errore

Passa il puntatore su un codice TX### ovunque si trovi: nel sorgente, nei log, nel pannello Output o in uno stack trace incollato. Il riquadro al passaggio del puntatore mostra titolo, messaggio e pacchetto, con un link alla relativa pagina su textjs.org. Ogni codice è anche un link (⌘-clic).

Barra di stato

L’elemento ▼ mostra lo stato del server di sviluppo e le dimensioni della griglia della console, per esempio ▼ :3000 120×36. Le schede comunicano le proprie dimensioni al server di sviluppo ogni volta che cambiano, anche senza anteprime aperte. Fai clic sull’elemento per accedere ai comandi principali.

Impostazioni

ImpostazioneValore predefinitoDescrizione
textjs.preview.modeautoauto, live o headless
textjs.preview.followEditorfalseModalità Live: segue la route modificata
textjs.preview.fontSize12Dimensione del carattere delle celle (DevTools usa 12)
textjs.preview.runtimeBinario Node.js per le anteprime headless (predefinito: quello incluso in VS Code)
textjs.devServer.urlURL del server di sviluppo (predefinito: rilevamento sulle porte 3000–3010). Vengono usati solo indirizzi di loopback http://
textjs.devServer.commandComando per Start Dev Server

Attendibilità dell’area di lavoro

L’anteprima e il server di sviluppo eseguono il codice del progetto (la configurazione Vite, text.config.* e i componenti). In modalità con restrizioni l’estensione offre solo snippet, generazione di file e link agli errori, e ignora textjs.preview.runtime, textjs.devServer.command e textjs.devServer.url nelle impostazioni dell’area di lavoro. Contrassegna l’area di lavoro come attendibile per attivare l’anteprima. I file esterni alle cartelle dell’area di lavoro non vengono mai mostrati in anteprima.

Funzionamento

text dev espone tre endpoint per gli editor. Rispondono solo a connessioni di loopback indirizzate a un host di loopback (localhost, 127.0.0.1, [::1]) e solo a richieste senza Origin o con la stessa origine del server di sviluppo. Le richieste cross-site e no-cors dei browser vengono rifiutate:

Endpoint
GET /__textjs/statusRadice del progetto, schede connesse, dimensioni della griglia e route corrente
GET /__textjs/framesEventi inviati dal server: un evento frame per modifica, codificato come differenze tra righe
POST /__textjs/inputUn tasto, un’operazione di incolla, testo da IME o tasti morti (text), rotellina o navigazione per la scheda. Richiede JSON e l’header x-textjs-mirror: 1, quindi altri siti non possono inviare pressioni di tasti

Le schede inviano i frame al server di sviluppo tramite il socket HMR di Vite, che richiede un token per ogni server. Il formato di trasmissione è esportato da @textjs/app/frame-protocol (FrameEncoder, FrameDecoder, parseInputMessage) se vuoi creare un tuo visualizzatore. Nulla di tutto questo è presente nell’output di text build.

Modifica questa pagina su GitHub