# Цикл разработки и горячая замена — Mercury LMS
> MX2. `mx dev` обслуживает приложение на 127.0.0.1, каждые 10 мс опрашивает файлы, которые запрашивала страница, компилирует изменения и передаёт `update`, `full-reload` или `error` через сокет `vite-hmr` по адресу `/`. Без Node и Vite.
## Когда читать
При работе с `mx dev`, если нужно понять, почему правка перезагрузила страницу вместо замены на месте, или разобраться с ответами сервера разработки 403/400/500.
## Использование
`usage: mx dev [--root
] [--port ] [--importmap]` → выводит `listening http://127.0.0.1:/`.
## Что обслуживается
- `/`: index.html + карта импортов на месте `` + `` + скрипт клиента.
- `/@mx/client.js`: клиент горячей замены (`import.meta.hot`: `data`, `accept`, `dispose`, `invalidate`).
- `/@mx//`: участники (из исходников — компилируются и отслеживаются; из сборки — не отслеживаются).
- Файлы приложения: `js mjs jsx ts mts tsx` компилируются по запросу; остальные отдаются без изменений.
## Правка
- Те же байты (SHA-256) → ничего. Не модуль → `full-reload`. Модуль ещё не выполнялся → `full-reload`.
- Отказ компиляции → `error` (`: `); страница сохраняет работавший модуль, а URL модуля возвращает 500 до исправления.
- Иначе обход импортирующих модулей до принимающих обновление → одно `update`; импорты получают `?t=`. Принимающего модуля нет → `full-reload`.
- Приём определяется `hmrRoot` в результате компиляции, а не совпадением текста. Hypercompiler задаёт его для модуля, который импортирует `render`/`hydrate` из `@fiberfx/hyperscript`. Модуль модели без рендеринга вызывает перезагрузку.
- `invalidate` → обход от импортирующих модулей; возврат к началу → `full-reload`.
## Защита
- Host не относится к loopback → 403 `this host name is not allowed: mx dev answers loopback names only`.
- Origin сокета не относится к loopback → 403.
- Путь или протокол сокета, отличные от `/` + `vite-hmr`/`vite-ping` → 400 `an HMR socket is at / and speaks vite-hmr or vite-ping`.
- Сокет страницы `vite-hmr` без `?token=` → 400.
## Отказ рабочей области
` is both 's replace () and the mx.work's member (): remove the replace, or the member from mx.work, or build with MXWORK=off`. Замена, указывающая на собственный каталог участника, допускается.
## Текущие ограничения
Правка приложения на этом сайте применяется на месте, затем следует одна перезагрузка, причина которой исследуется. Правка исходников участника вызывает полную перезагрузку. Замену модели Hypergraph `mx dev` пока не обеспечивает.
## Не выдавать
`vite`, `vite.config.*`, `npm run dev` или написанный вручную `import.meta.hot.accept` с целью включить горячую замену модуля без рендеринга: mx не учитывает такой текст.
## Далее
- MX3, сборка и поставка: /ru/mx/build
- Эта текстовая версия: /ru/mx/dev/llms.txt
## Навигация
- [Страница в браузере](/ru/mx/dev)
- [Индекс для агентов](/ru/llms.txt)
- [Все английские текстовые версии](/llms-full.txt)
- [Карта сайта](/sitemap.xml)
- [Текст курса](/ru/mx/llms.txt)