nuckty-ext-command-validate-vnu
Команда nuckty validate проверяет собранный HTML внешним валидатором W3C Nu Html Checker (vnu.jar). Расширение необязательно и требует JVM.
Тип
command — добавляет команду validate через env.commands.
Что делает
Команда проверяет каждый файл HTML артефакта через Nu Html Checker — валидатор HTML5/CSS/SVG от W3C. Чтобы сократить время проверки:
- Демон HTTP — vnu.jar запускается как сервер HTTP на
:8888(один процесс JVM на серию проверок, а не по процессу на файл). - Параллельные запросы — файлы проверяются одновременными запросами POST к демону.
- Кэш по содержимому — внутри одного запуска готовый результат можно использовать для одинакового содержимого. Одновременные проверки могут обе отправить запрос до заполнения кэша.
- Отложенный запуск — демон запускается при первом
validate; после проверки расширение останавливает его само.
Почему vnu, а не альтернатива на TypeScript
Nu Html Checker проверяет минимальный HTML с разрешённым стандартом пропуском необязательных тегов, на котором построена минимизация nuckty. Это внешняя проверка структуры документа в дополнение к тестам движка.
JVM добавляет затраты на запуск, поэтому расширение подключают по необходимости. Тесты правил минимизации проверяют конкретные преобразования и не заменяют валидацию пользовательских шаблонов.
Порт 127.0.0.1:8888 должен быть свободен: уже занятый порт вызывает ошибку до запуска Java. Проверка доступности не исключает захват порта другим процессом между проверкой и запуском Java. Результаты модульных тестов не заменяют проверку произвольных пользовательских шаблонов.
Когда запускать проверку
- Перед релизом сайта — финальная проверка артефакта на соответствие HTML5.
- При отладке сложного блока — убедиться, что структура не нарушает спецификацию.
- В CI — как контроль перед публикацией (если есть запас по времени на запуск JVM).
Запуск
npx nuckty build main
npx nuckty validate main
validate [target] выбирает именованный таргет, а без аргумента — первый объявленный. Сначала соберите его: команда рекурсивно проверяет .html в <outDir>/html/, включая вложенные каталоги. Неизвестный таргет, отсутствующий каталог, пустой набор файлов и ошибки проверки дают ненулевой код завершения. Флаги не поддерживаются.
Установка
Пример продолжает быстрый старт со стандартным обработчиком nuckty-ext-block-root. Добавьте новое расширение в ext глобального config/config-nuckty.ts, сохранив остальные записи. Если обработчик документа собственный, оставьте его вместо nuckty-ext-block-root.
Установите поддерживаемую системную JVM до запуска npm install. Расширение включает закреплённую зависимость vnu-jar. Установочный скрипт vnu-jar скачивает JRE, если системной Java нет; валидация Nuckty использует java из PATH.
Команда ниже выполняется из распакованного стартового проекта: готовые архивы расширений находятся в packages/.
npm install ./packages/nuckty-ext-command-validate-vnu-1.0.0-beta1.tgz
import { defineNucktyConfig } from 'nuckty';
export default defineNucktyConfig({
targets: { main: { configDir: 'config/', outDir: 'site/' } },
ext: ['nuckty-ext-block-root', 'nuckty-ext-command-validate-vnu'],
});
Требуется java в PATH (JVM 17+). Каждый запуск поднимает демон заново: время запуска и проверки зависит от JVM, оборудования и числа файлов.