发布·  

介绍 Nuxt DevTools

通过 Nuxt 释放开发者体验,以前所未有的方式深入了解您的应用。
Anthony Fu

Anthony Fu

@antfu

我们在Nuxt DevToolsVue Amsterdam 2023大会上宣布了预览版,这是一个旨在帮助您理解 Nuxt 应用并进一步改善开发者体验的新工具。今天,我们发布了新的次要版本v0.3.0,带来了大量更新和改进。

在本文中,我们将探讨创建 Nuxt DevTools 背后的原因、它如何增强您的开发体验,以及未来值得期待的内容。

开发者体验

近年来,人们越来越关注开发者体验(DX)。各种工具和框架都在努力改善 DX。在此过程中,Nuxt 引入了许多创新的功能和约定,使您的日常开发更加简单高效。

在 Nuxt 3 中,我们将Vite作为开发期间即时热模块替换(HMR)的默认打包器,为您的工作流程创建了更快的反馈闭环。此外,我们还引入了Nitro,这是一个全新的服务器引擎,允许您将 Nuxt 应用部署到任何托管服务,例如Vercel, Netlify, Cloudflare等等更多 且零配置.

Nuxt 内置了许多通用实践

  • 在整个代码库中开箱即用地编写 TypeScript 和 ESM。
  • 构建单页应用(SPA)、服务端渲染(SSR)、静态站点生成(SSG)或 按路由混合渲染 —— 无需任何显式设置,即可同构使用同一代码库。
  • 使用 useStateuseAsyncData 等多个组合式函数(Composables),用于在服务器和客户端之间共享状态。
  • 利用 SEO 工具,如 useHeaduseSeoMeta,让 meta 标签的管理变得轻而易举。

此外,布局系统插件、路由 中间件 等功能,让应用创建变得更简单,代码库也更有组织性。

基于文件的路由基于文件的服务器 API等约定,使路由设置直观且轻松。

组件自动导入 功能使得创建在任何 Vue 文件中直接可用的共享组件变得非常容易。与全局组件不同,它们会被代码分割。我们还引入了 组合式函数自动导入,所有的 Vue API 均可直接使用。Nuxt 模块也可以提供自定义的组合式函数供自动导入,您自己的 本地组合式函数 也是如此。

最近,我们引入了仅限客户端和仅限服务器的组件,只需在文件名后添加 .client.server 即可使用。所有这些约定都有完整的类型定义,开发人员在进行路由导航或从 API 获取数据时,甚至可以获得类型自动补全。这些约定显著减少了样板代码,避免了重复,并提高了生产力。

在生态系统方面,Nuxt 拥有庞大的开发者社区,他们围绕 Nuxt 构建了 数百个高质量模块。模块允许开发人员获取所需功能的集成,而无需担心配置或最佳实践。

问题所在

Nuxt 能够轻松创建大规模应用,但存在一个问题:缺乏透明度

我们引入的每一个新功能和约定,都在框架中增加了更多的抽象层。

抽象是转移实现复杂性并使构建时更易于专注的好东西。但另一方面,它们也增加了用户学习和理解底层原理的负担。这也导致了隐式性,比如自动导入的组件来自哪里,或者某个组件被多少个模块使用等。这也会使得调试变得困难。

这或许是任何工具在权衡后的结果,您必须学习和理解工具才能高效地使用它。尽管我们改进了文档并提供了更多示例,我们仍然认为这是一个提高透明度的机会

介绍 Nuxt DevTools

Nuxt DevTools它是一个可视化工具,旨在帮助您理解 Nuxt 应用并进一步提升开发者体验。它的创建是为了提供 Nuxt 和您应用的更好透明度,发现性能瓶颈,并帮助您管理应用和配置。

它作为实验性模块发布,并直接在您的应用内提供视图。安装后,它会在应用底部添加一个图标。点击它将打开 DevTools 面板。

要试用它,请参阅安装指南.

概览

它展示了应用的快速概览,包括您正在使用的 Nuxt 版本、页面、组件、模块和插件。它还会检查您的 Nuxt 版本,并允许您一键升级。

页面

页面标签页显示了当前的路由并提供快速导航方式。对于动态路由,它还提供了一个表格,可以交互式地填写每个参数。您还可以使用文本框来调试和测试每个路由是如何匹配的。

组件

组件标签页展示了您在应用中使用的所有组件以及它们的来源。您还可以搜索它们并跳转到源代码。

它还提供了一个关系图视图,展示了组件之间的关联。您可以过滤组件来查看特定组件的依赖项。这有助于识别意外的依赖关系,并优化页面的性能和包体积。

您还可以使用“检查器”(Inspector)功能来查看 DOM 树,并查看是哪个组件在渲染它。点击即可跳转到编辑器中的特定行。这使得修改代码变得更加容易,无需深入了解项目结构。

导入 (Imports)

导入标签页显示了所有注册到 Nuxt 的自动导入。您可以查看是哪些文件导入了它们,以及它们来自哪里。一些条目还提供了简短的描述和文档链接。

模块

模块标签页显示了您已安装的所有模块,并提供了指向其文档和源代码的链接。您可以在 Nuxt 模块 页面找到更多可用模块。

最近我们引入了实验性的升级功能,让您可以轻松升级 Nuxt 或模块。通过终端标签页 (Terminal tab),它清晰地显示了升级过程的输出。

资产

资产标签页显示了您所有的静态资产及其信息。您可以复制资产路径或使用它们的代码片段。未来,通过集成Vercel 上使用 Nuxt Image,您甚至可以一键优化图像。

插件

插件标签页显示了您在应用中使用的所有插件。由于插件在应用挂载前运行,因此每个插件耗时应保持最小,以避免阻塞应用渲染。提供的每个插件的耗时信息有助于发现性能瓶颈。

钩子 (Hooks)

钩子标签页可以帮助您监控客户端和服务器端每个钩子的耗时。您还可以看到每个钩子注册了多少监听器,以及它们被调用了多少次。这有助于发现性能瓶颈。

应用配置 (App Config)

您可以在 DevTools 中检查和修改应用配置,尝试不同的配置并立即查看效果。

负载与数据 (Payload & Data)

此标签页显示了由 useStateuseAsyncDatauseFetch 创建的状态。这有助于理解数据是如何获取的以及状态是如何管理的,或者通过响应式修改它们来观察它们是否影响您的应用。对于 useAsyncDatauseFetch,您还可以手动触发重新获取。

终端 (Terminals)

在某些集成中,可能需要运行子进程来执行特定任务。在 DevTools 之前,您要么完全隐藏子进程的输出并吞掉潜在的警告/错误,要么将其管道传输到标准输出(stdout),导致终端被大量的输出信息淹没。现在,您可以在 DevTools 中为每个进程查看独立且隔离的输出。

虚拟文件 (Virtual Files)

虚拟文件标签页显示了 Nuxt 和 Nitro 为了支持各项约定而生成的虚拟文件。这对于高级调试非常有用。

检查 (Inspect)

检查页面暴露了vite-plugin-inspect集成,允许您检查 Vite 的转换步骤。这有助于理解每个插件是如何转换您的代码的,并发现潜在问题。

VS Code

得益于VS Code Server,我们能够在 DevTools 中集成一个功能齐全的 VS Code 实例。您可以安装扩展并同步设置。这使您可以实现更紧密的反馈闭环,在不离开浏览器的情况下更改代码并立即查看结果。

模块贡献视图 (Module Contributed View)

考虑到生态系统,Nuxt DevTools 被设计为灵活且可扩展的。模块可以向 DevTools 贡献它们自己的视图,为它们的集成提供交互式数据和演练场。以下是几个示例:

VueUse 模块 提供了一个搜索页面来查找可用的组合式函数并查看其文档。

UnoCSS 模块 提供了一个交互式检查器,查看每个模块如何贡献最终的 CSS。

Nuxt 图标模块 为所有可用图标提供了一个搜索引擎。

Nuxt Vitest 模块为与您的 Nuxt 应用使用相同管道运行的测试提供了 Vitest UI。

致模块作者

随着 v0.3.0 的发布,我们改进了模块作者为 DevTools 做出贡献的能力。

它包括:

  • 模块贡献视图
  • 访问客户端应用的上下文和 devtools 的工具函数
  • 用于服务器和客户端之间通信的自定义 RPC 函数
  • 子进程生成和输出流处理
  • @nuxt/devtools-kit- 一套帮助您将模块与 DevTools 集成的工具函数
  • @nuxt/devtools-ui-kit- DevTools 中使用的 UI 组件,使您的模块视图与 DevTools 其余部分保持一致
  • 用于创建带有 DevTools 集成的模块的入门模板

请查阅Devtools 模块作者指南了解更多信息。

未来期待什么?

这仅仅是旅程的开始。我们计划为 DevTools 添加更多功能,同时探索以更直观和有趣的方式呈现数据。

Nuxt DevTools 的目标是:

  • 提高约定的透明度
  • 检查性能与分析
  • 交互式且有趣
  • 个性化文档
  • 轻松管理和构建应用
  • 提供见解和改进建议
  • 让开发体验更愉悦

您可以查看我们的项目路线图并分享您的想法与建议,帮助我们让 DevTools 变得更好。

您可以通过对我们的GitHub 仓库加星标,并关注Nuxt 官方 Twitter.

感谢您的阅读,我们期待您的反馈和贡献!