Vue 生态系统(2024版本)

1,440 阅读10分钟

原文链接:The Vue Ecosystem in 2024, 2024 年 5 月 2 日, by BEN HONG。翻译时有删改。

自 2014 年 2 月推出以来,Vue 已成为构建和维护 Web 应用程序的最受欢迎的 JavaScript 框架之一,因为它有很好的理念:入手简单、性能良好而且功能丰富,可以帮助我们很方便地构建一个可扩展的应用程序。

一旦你选择 Vue 来构建应用程序,接下来就要考虑应使用哪些工具和库来帮助更快地完成功能并交付给用户。虽然这些年来发生了很多变化,但 Composition API 等新功能的添加为生态系统带来了许多令人兴奋的新变化。下面,我们就来看看当前 Vue 社区中流行的一个工具和库吧!

开始使用

构建 Vue 应用程序目前主要有以下 3 种方式:

  1. 通过 CDN
  2. 通过构建工具
  3. 通过元框架(meta-framework),如 Nuxt

CDN

虽然大多数 JavaScript 框架需要构建工具链才能使用,但 Vue 的一大优点是它不需要构建工具,也能直接添加到页面上。

<!-- unpkg -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

<!-- jsdelivr -->
<script src="https://cdn.jsdelivr.net/npm/vue@3.4.25/dist/vue.global.min.js"></script>

或者你可以使用 ES 模块方式引入:

<script type="module">
  import { createApp, ref } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
  // or 'https://esm.sh/vue'

  createApp({
    setup() {
      const message = ref('Hello Vue!')
      return {
        message
      }
    }
  }).mount('#app')
</script>

你可以查看官方文档,可以了解这块的更多信息。

构建工具

当你的项目准备使用构建工具(例如 Vite、Rollup、webpack),或是要使用单文件组件 (Single-File Components,简称 SFC,以 *.vue 后缀结尾) 时,最好的方式是使用 Vite 创建 Vue 3 项目。

为什么是 Vite?因为它充分利用了现有 Web 生态的发展趋势:浏览器中原生 ES 模块支持,以及使用别的语言编译出来的 JavaScript 打包工具(译注: 是指 Vite 内部使用的打包工具 esbuild,它是使用 Go 语言编写的一款 JavaScript 打包工具)。

另外,Vite 是由 Evan You(Vue 创始人)编写的,最开始是为了搭建 Vue 项目而创建,不过在开发的过程中,发现可以变成一个通用工具,才有了现在的局面。

npm create vue@latest

你可以查看官方文档,了解更多有关使用 Vite 创建 Vue 应用程序的信息。

元框架

对于那些有需求将 Vue 应用扩展到客户端渲染之外其他领域的用户(比如静态站点生成(SSG)、服务器端渲染(SSR)和其他渲染方法),那么就需要使用流行元框架脚手架(比如 Nuxt)。

通过下面的命令就可以创建一个 Nuxt 项目:

npx nuxi@latest init <project-name>

你可以查看Nuxt 官方入门文档,了解更多信息。

与 Nuxt 功能类似的还有一个 Quasar,它也是一个元框架,不过与 Nuxt 只支持 Web 项目不同,Quasar 支持跨平台开发。Quasar 通过内置的构建模式可以让你开发 SPA、SSR、PWA、移动应用程序、桌面应用程序、浏览器扩展在内的各种类型项目。

最后是 VitePress,这是一款 Vite + Vue 驱动的静态站点生成器(替代之前的 VuePress),简单几个 Markdown 文件即可在几分钟内创建很漂亮的文档。

路由

当谈到 Vue 中的路由解决方案时,就是一个比较简单的选择了,因为有官方方案 Vue-Router

当然,上面介绍的元框架 Nuxt 也内置了路由方案:基于文件的路由。同时,在一个页面中,你也不需要做一些其他配置,就能直接使用 Vue Router 能力。

最后,Vue Router 也即将推出的一个新的扩展 unplugin-vue-router,这个扩展能让你实现获得 TS 支持的同时实现基于文件的路由,有兴趣的同学可以关注或贡献。

状态管理

与路由类似,Vue 也提供了官方状态管理方案,让你能更轻松的管理项目中的全局状态,以下是社区中流行的一些选项。

Pinia

Pinia(以前用 Vuex,不再推荐),是 Vue 的官方状态管理库。除了对 TypeScript 友好之外,无需再显式定义突变(mutations),因此比传统的 Redux 模式实现了巨大的飞跃。换句话说,仍然是声明式代码,但会少些很多。

TanStack Query

开发人员在状态管理方面面临的主要挑战之一是异步调用上下文中的粒度状态管理。TanStack Query 是社区中流行的选择,可帮助管理此问题。

值得一提的是,TanStack Query 前身是 React Query,是 React 社区里很受欢迎的一套方案。在 V4 版本后,被设计成了与框架无关的通用解决方案。

XState

对于熟悉状态机的人来说,你可以会使用 XSt‘ate 来作为你项目管理状态的工具。在 XState 背后,它有一支出色的团队支持,并且一直受到社区的喜爱。

Composables

通过添加 Composition API,Vue 使开发人员能够比以往更轻松地使用组合式函数(Composables)创建自己的状态管理解决方案。虽然这在某些情况下很有用,但建议使用 Pinia 这样的标准来确保跨团队模式的一致。

你可以基于目前项目的现状,有针对性的选择上面适合你团队的解决方案。

组件库

选择正确的组件库取决于你的项目的要求。这里有一些流行的库,为你提供可访问的组件,而且有良好的英文文档的支持。

PrimeVue

PrimeVue 是由 Vue.js 驱动的一套完整 UI 套件,由一组丰富的 UI 组件、图标、块和项目模板构成。通过提供可重用的解决方案来提高开发人员的工作效率,也方便作为内部库进行调整和自定义。

PrimeVue 支持两种模式设计;有样式或无样式。样式模式基于预皮肤组件,具有固执己见的主题,例如 Material、Bootstrap 或 PrimeOne 主题。另一方面,无样式模式将样式留给你,不必担心功能实现和可访问性。无样式模式通过可插拔架构让你在 Tailwind CSS、Bootstrap、Bulma 等 CSS 库或你的自定义 CSS 中选择,从而提供对样式的完全控制,没有边界——这种设计是面向未来的。

Vuetify

Vuetify是一套 Material 风格的组件库,在 Vue 社区长期受到欢迎,拥有出色的文档。

Radix Vue

Radix Vue 是一套无样式且可访问的组件构成,用于在 Vue 中构建高质量的设计系统和 Web 应用程序。

NuxtLabs UI

NuxtLabs UI 为使用 Nuxt 的用户提供完全样式化和可定制的组件。

Quasar Components

Quasar Components 是为使用 Quasar 的用户提供符合 Material Guidelines 的用户界面组件。

荣誉提名

Buefy

Buefy 是基于 Bulma 的一套 Vue UI 组件,目前针对 Vue 3 的版本正在积极开发中。

BootstrapVue

BootstrapVue 是基于 Bootstrap 的一套 Vue UI 组件,刚发布了对 Vue 3 版本的支持。

Element Plus

Element 是由中国的一个企业开源的 UI 库,拥有强大的中英文社区。基于 Vue 3 版本的 Element Plus 则是由社区驱动的。

测试

以下是关于 Vue 项目测试方面的一些工具的快速概述。

单元测试

Vue 社区单元测试中,Vitest 是绝对选择。与 Vue 项目一样,也采用 Vite 驱动,与 Jest 兼容,同时内置了 TypeScript / JSX 支持,性能又有极大的提升。

组件测试

组件测试有 3 个选择。

一个是前面介绍的 Vitest,除了单元测试,对无头渲染的组件或组合式函数同样适应。

还有另外 2 个。

Vue Testing Library

Vue 测试库是用于测试 Vue 组件的轻量级解决方案,它在 @vue/test-utils 之上提供轻量级实用功能。

Cypress Component Testing

Cypress 非常适合用来测试组件是否正确渲染了样式或是触发了本机 DOM 事件,进而判断组件行为是否符合预期。

E2E

虽然其他类型测试很重要,但我的一位“导师”喜欢说,对于任何代码库来说,只有两个测试很重要。

  1. 用户能登录吗?
  2. 用户能付款吗?

其他一切都是可选的。

这就是端到端(E2E)测试发挥作用的地方。选择 E2E 测试框架时,有两个主要候选框架可供选择:

Cypress

Cypress 凭借其直观的 API 以及直接在浏览器中运行和调试测试的能力,长期以来一直受到社区的喜爱。

Playwright

Playwright 已成为社区中的另一个流行选择,因为它能够使用单一 API 跨任何浏览器或平台进行测试。

移动开发

Capacitor

你可能听说过 Ionic,这是一个流行的开源 UI 工具包,用于使用 Web 技术构建移动应用程序。而 Ionic 就是基于 Capacitor 构建的。

它还得到了 Vue 社区优秀合作伙伴团队的支持。如果你想使用 Vue 构建移动应用程序,绝对值得一试。

您可以在官网 Capacitor + Vue 部分了解更多信息。

NativeScript

Vue 社区没有像 React 那样有官方支持的 React Native,不过 NativeScript 可以是一个选择。

注意:它目前处于候选版本 (RC) 状态,尚未正式投入生产,但它过去一直是 Vue 2 应用程序的最爱,因此将它作为 Capacitor 的替代品包含在内。

要了解更多信息,可以查看 NativeScript 的官方 Vue 仓库,目前处于 Beta 版本。

福利库

以下这些库没有自己的独特类别,不过某些项目中也有使用的场景,值得一提并称赞。

VueUse

在工具库方面,VueUse 由于提供了项目中使用的大量常见功能(例如复制到剪贴板、暗/亮模式、本地存储等)在我们的这个分类中夺得 MVP 奖。

FormKit

面对现实吧。无论你喜欢还是不喜欢,表单是大多数项目的重要组成部分。FormKit 是一个表单库,通过提供表单结构、生成、验证等标准来简化表单的构建流程。

Petite-Vue

对于那些只需要 Vue 功能子集并且只想在页面上添加一些交互性的人来说,可以看看 petite-vue,它只有 ~6kb!

TresJS

TresJS 是一个 3D 动画库,旨在让使用 Three.js 和 Vue 构建 3D 体验变得更加容易。

展望未来

以上我重点介绍了 Vue 生态系统中的一些流行的解决方案。不过,值得强调的是,这绝对不是标准答案,归根结底,你有基于团队现有的项目状况选择正确的解决方案。如果你或你的团队正在使用的解决方案没有出现在此列表中,也不会降低其有效性。

最后,现实世界是不断变化中的,这些工具和库也是。虽然看起来某些具体问题“已经得到了解决”,但敢保证,现有方案在未来难以避免还是会被新的想法和改进挑战。

好了,本文就到这里。希望对你的工作有所帮助,感谢你的阅读。