VS Code
Предпросмотр кадра консоли рядом с кодом, заготовки App Router, сниппеты и ссылки на ошибки TX.
Расширение Text.js для VS Code показывает кадр консоли рядом с кодом. Оно зеркалирует приложение, запущенное через text dev, или само рендерит открытый файл, если ничего не запущено. Оно также добавляет создание заготовок App Router, сниппеты и ссылки для кодов ошибок TX###.
Установка
Установите Text.js из Visual Studio Marketplace. В VS Code откройте раздел «Расширения» (⌘⇧X) и найдите textjs.vscode-textjs или выполните:
code --install-extension textjs.vscode-textjsРасширение активируется в любой папке с приложением Text.js: файлом text.config.ts или пакетом, который зависит от @textjs/app и содержит каталог app/. Монорепозитории с несколькими приложениями тоже поддерживаются.
Предпросмотр в реальном времени
Откройте page.tsx, layout.tsx или компонент и выполните Text.js: Open Preview (⌘K V) либо нажмите кнопку предпросмотра в строке заголовка редактора. Панель рисует кадр с тем же оформлением DevTools и ячейками со шрифтом Menlo, что и консоль браузера.
Предпросмотр получает кадры из одного из двух источников. Значок на панели инструментов показывает активный источник:
| Источник | Когда | Что вы видите |
|---|---|---|
| Live | Запущен text dev, и приложение открыто во вкладке браузера | Настоящее приложение с его состоянием, данными и размером сетки |
| Headless | Нет сервера разработки или открытой вкладки | Открытый файл, который расширение рендерит по размеру панели |
auto (по умолчанию) использует Live, когда это возможно, и Headless в остальных случаях. Закрепите любой из режимов через значок или настройку textjs.preview.mode.
Клавиатура
Щёлкните по консоли, чтобы направить ввод с клавиатуры в приложение: стрелки, Tab, сочетания клавиш, ввод текста и вставка работают как в браузере. Щёлкните за пределами консоли, чтобы остановить передачу ввода. Сочетания клавиш редактора, такие как ⌘P и ⌘⇧P, по-прежнему обрабатывает VS Code. Прокрутка над консолью отправляет события колеса мыши.
В адресном поле можно ввести маршрут, например /deployments/dpl_a1, для перехода в любом из источников.
Режим Live
Пока предпросмотр открыт, сервер разработки запрашивает поток кадров у подключённых вкладок. Вкладки отправляют только изменённые строки и прекращают отправку при закрытии предпросмотра, поэтому приложение без открытого предпросмотра не несёт дополнительных затрат. Сохранение файла проходит через Fast Refresh, и предпросмотр обновляется вместе с вкладкой.
Включите Follow (textjs.preview.followEditor), чтобы вкладка браузера переходила на маршрут файла page.tsx, который вы редактируете.
Фоновые вкладки не получают кадров анимации, поэтому обычно сохраняют текущий кадр, пока снова не станут видимыми. Пока предпросмотр следит за вкладкой, фоновая вкладка рисует кадр сразу после поступления ввода, поэтому ввод текста в предпросмотре по-прежнему вызывает обновление. Анимации в фоновой вкладке обновляются примерно раз в секунду. Поместите приложение в отдельное окно, чтобы сохранить их плавность.
Режим Headless
Расширение запускает небольшую программу в вашем проекте. Она загружает файлы маршрутов через Vite и @textjs/app самого проекта, поэтому псевдонимы, TypeScript и JSX работают так же, как в text dev. Она монтирует App Router на маршруте открытого файла вместе с его макетами, используя историю в памяти:
| Файл | Предпросмотр |
|---|---|
app/page.tsx | / |
app/(shop)/items/[id]/page.tsx | /items/id (динамические сегменты используют своё имя) |
app/blog/[[...slug]]/layout.tsx | /blog |
components/Card.tsx | Экспорт по умолчанию или первый экспорт в PascalCase, без пропсов |
Вызовы fetch("/api/...") к тому же источнику выполняют обработчики route.ts внутри процесса, как при text run. Сетка подстраивается под размер панели, а сохранение любого файла приложения запускает повторный рендеринг. Ошибки показываются над кадром со ссылками на соответствующие страницы TX###.
Команды
| Команда | Описание |
|---|---|
| Text.js: Start Dev Server | Запускает ваш скрипт dev (или text dev) в терминале |
| Text.js: Stop Dev Server | Останавливает сервер разработки, запущенный из VS Code |
| Text.js: Open Preview | Открывает предпросмотр в реальном времени для активного файла |
| Text.js: Open in Browser Console | Открывает текущий маршрут на сервере разработки. Затем откройте консоль браузера |
| Text.js: New Page | app/<route>/page.tsx с метаданными и типизированными params |
| Text.js: New Layout | app/<route>/layout.tsx |
| Text.js: New Route Handler | app/<route>/route.ts с GET и POST |
| Text.js: New Loading UI / Error Boundary / Not Found Page | loading.tsx, error.tsx, not-found.tsx |
Команды создания заготовок доступны и в контекстном меню папок в проводнике. Они принимают сегменты App Router, такие как settings, blog/[slug], docs/[...path] и (marketing)/about, и не позволяют разместить page и route.ts в одном сегменте. В проектах JavaScript (без tsconfig.json) создаются файлы .jsx и .js.
Сниппеты
| Префикс | Что вставляет |
|---|---|
txpage, txlayout, txloading, txerror | Файлы маршрутов, названные по папке |
txc | Компонент консоли, названный по файлу |
txroute, txroutep | Обработчики маршрутов с параметрами или без них |
box, boxb, text, scrollbox, link, spinner | Компоненты |
input, select, tabs | Интерактивные компоненты |
useInput, useKeymap, useFocus, useTheme, useViewport, useRouter, useInterval | Хуки |
metadata, txconfig | Метаданные маршрута и text.config.ts |
Коды ошибок
Наведите указатель на код TX### в любом месте: в исходном коде, журналах, панели «Выходные данные» или вставленной трассировке стека. Подсказка показывает его заголовок, сообщение и пакет со ссылкой на его страницу на textjs.org. Каждый код также служит ссылкой (щелчок с ⌘).
Строка состояния
Элемент ▼ показывает состояние сервера разработки и размер сетки консоли, например ▼ :3000 120×36. Вкладки сообщают серверу разработки свой размер при каждом изменении, даже если предпросмотр не открыт. Щёлкните по элементу, чтобы открыть основные команды.
Настройки
| Настройка | По умолчанию | Описание |
|---|---|---|
textjs.preview.mode | auto | auto, live или headless |
textjs.preview.followEditor | false | Режим Live: переход на редактируемый маршрут |
textjs.preview.fontSize | 12 | Размер шрифта ячейки (DevTools использует 12) |
textjs.preview.runtime | Бинарный файл Node.js для предпросмотра без браузера (по умолчанию: из комплекта VS Code) | |
textjs.devServer.url | URL сервера разработки (по умолчанию: поиск на портах 3000–3010). Используются только loopback-адреса с http:// | |
textjs.devServer.command | Команда для Start Dev Server |
Доверие к рабочей области
Предпросмотр и сервер разработки выполняют код вашего проекта (его конфигурацию Vite, text.config.* и компоненты). В ограниченном режиме расширение предлагает только сниппеты, создание заготовок и ссылки на ошибки, а настройки рабочей области textjs.preview.runtime, textjs.devServer.command и textjs.devServer.url игнорирует. Укажите, что доверяете рабочей области, чтобы включить предпросмотр. Файлы за пределами папок рабочей области никогда не открываются в предпросмотре.
Принцип работы
text dev предоставляет три эндпоинта для редакторов. Они отвечают только на loopback-соединения, адресованные loopback-хосту (localhost, 127.0.0.1, [::1]), и только на запросы без Origin или с источником самого сервера разработки. Межсайтовые запросы браузеров и запросы no-cors отклоняются:
| Эндпоинт | |
|---|---|
GET /__textjs/status | Корень проекта, подключённые вкладки, размер сетки и текущий маршрут |
GET /__textjs/frames | События от сервера: одно событие frame на изменение, закодированное как разности строк |
POST /__textjs/input | Клавиша, вставка, текст от IME или «мёртвой» клавиши (text), колесо мыши или навигация для вкладки. Требует JSON и заголовок x-textjs-mirror: 1, поэтому другие сайты не могут отправлять нажатия клавиш |
Вкладки отправляют кадры серверу разработки через HMR-сокет Vite, который требует отдельный токен для каждого сервера. Формат передачи экспортируется из @textjs/app/frame-protocol (FrameEncoder, FrameDecoder, parseInputMessage), если вы хотите создать собственное средство просмотра. Ничего из этого нет в результате text build.