hints
@nuxt/hints

Nuxt 模块,为您的应用程序在性能、安全性等方面提供提示!

Nuxt Hints

npm versionnpm downloadsLicenseNuxt

一个 Nuxt 模块,可在浏览器中直接提供有关应用程序性能、可访问性和安全性的实时反馈。

Nuxt Hints 直接集成到 Nuxt DevTools 中,为您提供可操作的见解,以改善 Web 指标、修复注水(hydration)不匹配,并审核第三方脚本,而无需离开开发环境。

入门指南

要安装并添加该模块,您可以运行以下命令

npx nuxt module add hints

该模块现已自动安装并添加到您的 nuxt.config.ts 中。现在您可以打开您的 Nuxt 应用,转到 DevTools,并点击 Nuxt Hints 图标即可开始使用。

功能

  • 🚀 丰富的 DevTools UI:Nuxt DevTools 中的专属选项卡,用于可视化问题、检查元素并获取建议。
  • 💧 注水(Hydration)不匹配调试:并排对比服务端渲染和客户端注水后的 HTML,精确定位不匹配的原因。
  • ⚡️ Web 指标分析:LCP、INP 和 CLS 的实时指标,并附带详细的归因分析和针对特定元素的优化建议。
  • 📦 第三方脚本审核:用于监控性能、识别渲染阻塞脚本并获取安全建议的仪表板。
  • 🧩 未使用组件检测:检测在 SSR 或注水期间未渲染的静态导入组件,并建议对其进行懒加载以减小包体积。
  • 🔍 交互式诊断:
    • 悬停高亮:在 DevTools 中将鼠标悬停在问题上,即可在页面上高亮显示对应的元素。
    • 点击检查:点击即可在代码编辑器中直接打开组件源文件。
  • 💡 可操作的控制台警告:清晰简洁的控制台消息,引导您采用最佳实践并进行性能改进。

Devtools 内部可视化界面

Nuxt Hints 在 Nuxt DevTools 面板内提供了一个丰富且交互式的界面。

主页

一个中心枢纽,可概览所有检测到的问题。

hints devtools homepage screenshot

Web 指标

深入了解核心 Web 指标。查看 LCP、INP 和 CLS 的详细归因,检查出现问题的元素,并获取针对具体上下文的建议。

hints devtools web vitals screenshot

注水(Hydration)检查器

使用强大的并排差异对比视图调试注水不匹配问题。查看服务端渲染的 HTML 与客户端结果之间的精确差异。

hints devtools hydration screenshot

第三方脚本

分析页面上的所有第三方脚本。仪表板会显示加载时间、渲染阻塞状态和安全属性,帮助您识别并缓解性能瓶颈。

hints devtools third-party screenshot

未使用导入组件检测(懒加载)

识别在 SSR 或初始注水期间从未渲染的静态导入组件。模块建议将其转换为懒加载组件,以减少最终用户的初始包体积。

hints devtools lazy-load screenshot

工作原理

性能监控

Nuxt Hints 使用 web-vitals 来收集核心 Web 指标,并自动记录任何需要改进的指标。它会监听 INP、LCP 和 CLS,并为每一项提供详细的归因。

注水(Hydration)不匹配检测

该模块挂载到 Vue 的注水过程中,用于比较服务端渲染的 DOM 和客户端 DOM。当检测到不匹配时,它会捕获注水前后的 HTML 以供检查。

第三方脚本分析

结合使用 Nitro 插件和客户端观察器,Nuxt Hints 会追踪页面上加载的每一个脚本,测量其性能并分析其属性。

未使用组件检测(懒加载)

在构建时,Vite 插件会分析您的组件导入,识别静态导入的 .vue 组件。在运行时,模块会追踪哪些组件在 SSR 和初始注水期间真正进行了渲染。页面加载完成后,任何未被渲染的导入组件都会被标记为懒加载候选对象。

建议会报告到控制台,并通过服务器发送事件(Server-Sent Events)发送到 DevTools UI,您可以在那里按路由查看它们并忽略已处理的条目。建议的修复方法是在组件前添加 Lazy 前缀(例如 <LazyHeavyComponent>),或者使用 defineAsyncComponent,这样它只会在需要时下载。

HTML Validate 集成

Nuxt Hints 内置了由 html-validate 提供支持的 HTML 验证功能。对于每一个服务端渲染的响应,该模块都会拦截 HTML 输出并运行 html-validate 进行检测。

hints html-validate screenshot

控制台输出示例

当 Nuxt Hints 检测到问题时,您会在浏览器控制台中看到清晰的警告。

[@nuxt/hints:performance] LCP Element should not have `loading="lazy"`
Learn more: https://webdev.org.cn/optimize-lcp/#optimize-the-priority-the-resource-is-given
[@nuxt/hints] Third-party script "https://cdn.example.com/script.js" is missing crossorigin attribute.
Consider adding crossorigin="anonymous" for better security and error reporting.

开发

# Install dependencies
pnpm install

# Generate type stubs
pnpm run dev:prepare

# Develop with the playground
pnpm run dev

# Build the playground
pnpm run dev:build

# Run ESLint
pnpm run lint

# Run Vitest
pnpm run test
pnpm run test:watch

# Release new version
pnpm run release