nuckty
EN
Все разделы →

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, оборудования и числа файлов.