nuxt常用组件库html-validator应用解析

devtools/2025/3/1 13:21:52/

html-validator

主要用于自动验证nuxt服务器呈现的HTML(SSR和SSG),以检测可能导致水合错误的HTML常见问题,有助于减少水合错误,检测常见的可访问性错误。

安装

npx nuxi@latest module add html-validator

配置

若自动更新nuxt.config.ts配置文件失败,可手动添加下面代码:

nuxt3

defineNuxtConfig({modules: ['@nuxtjs/html-validator',//其他配置项]})

nuxt2.9+

 export default {buildModules: ['@nuxtjs/html-validator']}

nuxt2

 export default {// Install @nuxtjs/html-validator as dependency instead of devDependencymodules: ['@nuxtjs/html-validator']}

使用

html-validator有四个选项

1.usePrettier允许更美观地打印源代码,以便在上下文中显示错误。 


如果使用的是TailwindCSS,请考虑不要启用此功能,因为在开发模式下,prettier将难以处理解析HTML的大小。

2.logLevel设置详细信息为verbose、warning或error。在dev中默认为verbose,在生成时为warning。 


您可以使用此配置选项来关闭控制台日志记录的No HTML validation errors found for…消息。

3.如果生成的页面有任何验证错误,failOnError将在运行nuxt generate后抛出一个错误。

 
在持续集成中很有用。

4.Options允许您传入html-validate选项,这些选项将与默认配置合并 


更多关于配置 html- validate 的信息,可以参考 官方文档。

默认配置

{htmlValidator: {usePrettier: false,logLevel: 'verbose',failOnError: false,/** A list of routes to ignore (that is, not check validity for). */ignore: [/\.(xml|rss|json)$/],options: {extends: ['html-validate:document','html-validate:recommended','html-validate:standard'],rules: {'svg-focusable': 'off','no-unknown-elements': 'error',// Conflicts or not needed as we use prettier formatting'void-style': 'off','no-trailing-whitespace': 'off',// Conflict with Nuxt defaults'require-sri': 'off','attribute-boolean-style': 'off','doctype-style': 'off',// Unreasonable rule'no-inline-style': 'off'}}}
}


规则参考

html语法和概念

与HTML语法和概念相关的规则。

attr-delimiter禁止属性键和值之间有空格
attr-spacing要求属性之间用空格分隔
close-attr禁止结束标记具有属性
close-order要求元素按正确顺序关闭
element-name禁止使用无效的元素名称
form-dup-name要求表单控件具有唯一的名称
map-dup-name要求‘ <map name> ’是唯一的
map-id-name要求name和id在<map>元素上匹配
no-dup-attr禁止重复属性
no-dup-class禁止重复的类
no-raw-characters禁止使用未转义的特殊字符
no-redundant-for禁止对属性使用冗余标签
script-type要求‘ <script> ’元素的有效类型
unrecognized-char-ref禁止无法识别的字符引用
valid-autocomplete要求自动完成属性有效
valid-id要求‘ id ’是一个有效的标识符


内容模型

attribute-allowed-values验证允许的属性值
attribute-misuse要求属性在正确的上下文中使用
element-permitted-content验证允许的内容
element-permitted-occurrences验证允许的元素出现次数
element-permitted-order验证所需的元素顺序
element-permitted-parent验证允许的元素父元素
element-required-ancestor验证所需的元素祖级
element-required-attributes确保设置了所需的属性
element-required-content确保必需的元素存在
input-attributes验证输入属性的使用
no-multiple-main禁用多个“<main>”
script-element为‘ <script> ’要求结束标签
void-content禁止包含内容的void元素


弃用规则 
 


与已弃用或过时功能的使用相关的规则。

deprecated禁止使用废弃的元素
deprecated-rule禁止使用不推荐的规则
no-conditional-comment禁止使用条件注释
no-deprecated-attr禁止使用弃用的属性


可行性

area-alt要求‘ <area> ’元素上的替代文本
aria-hidden-body禁止在“<body>”上设置“aria-hidden”
aria-label-misuse禁止误用“aria-label”
empty-heading要求标题头有文字内容
empty-title要求标题有文字内容
hidden-focusable在可聚焦的元素上禁用“aria-hidden”
input-missing-label要求输入有标签
meta-refresh要求元刷新具有0秒延迟
multiple-labeled-controls禁止与多个控件关联的标签
no-abstract-role禁止使用抽象的WAI-ARIA角色
no-autoplay禁止自动播放媒体元素
no-implicit-button-type禁止隐式按钮类型
no-redundant-aria-label禁止arial -label和label具有相同的文本内容
no-redundant-role禁止使用冗余角色
prefer-native-element更倾向使用原生HTML元素而不是角色
svg-focusable要求<svg>具有可聚焦属性
tel-non-breaking要求在电话号码中使用不间断字符
text-content要求元素具有有效的文本内容
unique-landmark要求地标有唯一的名称
wcag/h30WCAG H30:提供链接文本
wcag/h32WCAG H32:提供提交按钮
wcag/h36WCAG H36:要求在图片上使用所有文本作为提交按钮
wcag/h37WCAG H37:在img元素上使用alt属性
wcag/h63WCAG H63:使用scope属性来关联标题单元格和数据单元格
wcag/h67WCAG H67:在img元素上使用空alt文本和没有标题属性
wcag/h71WCAG H71:为表单控件组提供描述


验证

require-csp-nonce需要CSP的资源
require-sri要求资源的SRI


SEO

long-title要求标题不要有太长的文字


模式

attr-case要求属性名使用特定的大小写
attr-pattern要求属性匹配已配置的模式
attr-quotesRequire attribute quoting
attribute-boolean-style要求属性引用
attribute-empty-style为空属性要求特定的样式
class-pattern要求类匹配特定的模式
doctype-style需要DOCTYPE的特定案例
element-case要求元素名称使用特定的大小写
id-pattern要求id匹配特定的模式
name-pattern要求表单控件名称匹配特定的模式
no-implicit-close要求带有可选结束标签的元素显式关闭
no-implicit-input-type禁止隐式输入类型
no-inline-style禁止内联样式
no-self-closing禁止自闭元素
no-style-tag禁止使用<style>标记
no-trailing-whitespace禁止尾随空格
prefer-button对于按钮,更喜欢使用<button>而不是<input>
prefer-tbody更喜欢把<tr>包装在<tbody>里面
void-style需要一个特定的样式来关闭void元素


文档

这些规则适用于完整的单据。

allowed-links禁用链接类型
doctype-html要求使用“html”文档类型
heading-level要求标题从h1开始并递增1
missing-doctype要求文档具有doctype
no-dup-id不允许重复的id
no-missing-references要求所有元素引用都存在
no-utf8-bom禁止文档具有UTF-8 BOM


未知元素

no-unknown-elements禁止使用未知元素
no-unused-disable禁用未使用的禁用指令


预设配置

HTML-validate带有一些预定义的预设。

示例 .htmlvalidate.json

{"extends": ["html-validate:PRESET"]
}

示例 .htmlvalidate.cjs

const { defineConfig } = require("html-validate");module.exports = defineConfig({extends: ["html-validate:PRESET"],
});

示例 .htmlvalidate.mjs

import { defineConfig } from "html-validate";export default defineConfig({extends: ["html-validate:PRESET"],
});

可以设置多个预设,并将按照它们出现在“extends”中的顺序启用。


预设类型

html-validate:recommended

这是默认的预设,支持大多数规则,包括标准验证、WCAG和最佳实践。它是其他预设的超集。

html-validate:standard

启用与根据WHATWG HTML标准(生活标准)进行验证相关的规则。

如果您想要类似于Nu Html检查器和类似工具的验证,请使用此预设。

html-validate:prettier

自:v7.18.0 
如果您正在使用Prettier来格式化HTML标记,则可以使用此预设来禁用诸如void-style之类的矛盾规则。 
 
这个预设应该与另一个预设(如html-validate:)结合使用,因为它只禁用规则。

html-validate:a11y

启用与可访问性相关的规则。大多数规则(但不是所有已启用的规则)都与WCAG遵从性有关。它本身不会验证文档/模板本身是否有效,而只会在发现可访问性问题时进行验证。 
 
这个预设应该与html-validate:standard一起使用,以确保文档结构是有效的(WCAG的要求),如果可能的话,还应该与html-validate:document(确保引用是有效的,等等)一起使用。

html-validate:browser

自:8.24.0 
如果要从浏览器中获取源代码,请使用此预设来禁用受浏览器规范化影响的规则,例如属性布尔样式。这些规则大多只是表面上的。 
 
这个预设应该与另一个预设(如html-validate:)结合使用,因为它只禁用规则。

html-validate:document

启用需要验证完整文档的规则,即不需要验证部分模板。示例包括缺少文档类型和无效引用。 
 
将此预设与其他预设一起使用以实现全覆盖。这个预设是由cypress-html-validate和protractor-html-validate等插件启用的。


http://www.ppmy.cn/devtools/163625.html

相关文章

鸿蒙开发-画布综合示例

以下是一个更复杂的ArkTS示例&#xff0c;它展示了如何在画布上绘制多个形状&#xff08;包括圆形、矩形和文本&#xff09;&#xff0c;并处理触摸事件来改变画布上的某些属性&#xff08;如颜色&#xff09;。 示例代码 import { Color, Point } from ohos.build.attr; imp…

【蓝桥杯集训·每日一题2025】 AcWing 5439. 农夫约翰真的种地 python

AcWing 5439. 农夫约翰真的种地 题目描述 Week 2 2月27日 农夫约翰在他的农场种植了 N N N 个芦笋&#xff0c;编号 1 ∼ N 1 \sim N 1∼N。 其中&#xff0c;第 i i i 个芦笋的初始高度为 h i h_i hi​&#xff0c;每经过一天高度会增长 a i a_i ai​。 给定一个 0…

Python在实际工作中的运用-指定目录内所有Excel文件转CSV

闲来无事浏览到《【办公自动化】使用Python批量处理Excel文件并转为csv文件》这篇博文&#xff0c;关于多层目录Excel转Csv在处理过程中略显繁复&#xff0c;而且灵活度不高&#xff0c;代码如下&#xff1a; import pandas as pd import os from datetime import datetime # …

dify镜像拉取不下来如何解决

# 启动docker(一定要先启动再添加dns) systemctl start docker #添加国境镜像和dns sudo vim /etc/docker/daemon.json { "registry-mirrors":[ "https://dockerpull.pw"&#xff0c; "https://dockerhub.icu", "https://hu…

Redis 分布式锁

概念 在⼀个分布式的系统中&#xff0c;也会涉及到多个节点访问同⼀个公共资源的情况&#xff0c;此时就需要通过锁来做互斥控制&#xff0c;避免出现类似于 "线程安全" 的问题。但 C 的 std::mutex 只能在当前进程中⽣效, 在分布式的这种多个进程多个主机的场景下就…

C++核心指导原则: 源文件

C Core Guidelines 整理目录 哲学部分接口(Interface)部分函数部分类和类层次结构部分枚举部分资源管理部分表达式和语句部分性能部分并发和并行错误处理常量和不可变性泛型编程源文件 源文件规则 SF.1: Use a .cpp suffix for code files and .h for interface files if you…

微信小程序自定义导航栏,胶囊菜单按钮高度适配问题

抽离公共方法用条件编译对微信小程序&#xff0c;抖音小程序适配 公共组件模块建立一个导航模块 <template><view class"layout"><view class"navbar" ><view class"statusBar" :style"{height:getStatusBarHeight()p…

微信小程序记录用户在图书详情页面停留时间--即阅读时间,如果超过两小时,则每小时提醒用户一次

在微信小程序中记录用户在图书详情页面的停留时间&#xff0c;并根据条件&#xff08;如超过两小时&#xff09;进行提醒&#xff0c;可以通过以下步骤实现。以下是详细的实现方案&#xff1a; 1. 实现思路 记录进入页面的时间&#xff1a;当用户进入图书详情页面时&#xff0…