Skip to content

大家好,我是村长!

这将是我们这个模块的最后一节,主题是 Nuxt 项目工程化。

实际上 Nuxt 已经帮我们完成了大部分任务,例如:项目创建、自动导入、路由生成、ts支持、服务端整合/渲染、打包等等。 美中不足的是,Nuxi 目前还比较弱,没有 create-vue 那样丰富个性化的配置,例如代码规范和测试支持。另外,项目开发时也需要一些额外的三方库、工具函数等,例如 HTTP 请求封装、图标库使用等等。

因此,我们本节计划完成如下任务:

  • 代码规范;
  • 代码测试;
  • 整合 unocss;
  • 使用图标;
  • 使用模版项目。

最终,我们会得到一个不错的 starter 项目,作为起始,便于后续项目开发。如果你不关心该项目的搭建过程,可以直接跳到最后一步,学习如何以该项目为模版创建新项目即可。

代码规范

通常代码规范这块的配置是非常繁琐的,例如我们通常需要结合 ESLint + Prettier,这需要两个配置,还要有额外插件的安装。这里我给大家推荐的方案是 @antfu/eslint-config,优点是配置非常简单,支持 ts,单独使用不依赖 Prettier。

安装

需要安装依赖:

bash
    yarn add -D eslint @antfu/eslint-config typescript

配置 .eslintrc

创建 .eslintrc:

typescript
    {
      "extends": "@antfu"
    }

添加脚本 package.json

添加lintlint:fix两个命令脚本:

typescript
    {
      "scripts": {
        "lint": "eslint .",
        "lint:fix": "eslint . --fix"
      }
    }

自动格式化

配置 VS Code 可以实现自动格式化代码:

typescript
  {
    "prettier.enable": false,
    "editor.formatOnSave": false,
    "editor.codeActionsOnSave": {
      "source.fixAll.eslint": true
    }
  }

代码测试

在 Nuxt3 中,可以使用官方提供的@nuxt/test-utils编写单测。

安装

bash
    yarn add --dev @nuxt/test-utils vitest

编写测试

创建 test/index.spec.ts:

typescript
    import { describe, expect, test } from 'vitest'
    import { $fetch, setup } from '@nuxt/test-utils'
    
    describe('My test', async () => {
      await setup({
        // test context options
      })
    
      test('index page should be work', async () => {
        const html = await $fetch('/')
        expect(html).toMatch('<h1>Index Page</h1>')
      })
    })

如何使用 vitest 编写单测:https://vitest.dev/guide/

添加脚本 package.json

添加一个 test:unit 命令执行测试:

typescript
    {
      "scripts": {
        "test:unit": "vitest"
      }
    }

执行测试,效果如下:

整合 UnoCSS

下面整合 UnoCSS,这是一个按需原子化 CSS 引擎,比起直接使用 TailwindCSS 更轻更快!

安装

安装模块 @unocss/nuxt:

bash
    yarn add @unocss/nuxt -D

配置

配置模块,nuxt.config.ts:

typescript
    export default {
      modules: [
        '@unocss/nuxt',
      ],
      unocss: {
        uno: true, // enabled `@unocss/preset-uno`
        icons: true, // enabled `@unocss/preset-icons`
        attributify: true, // enabled `@unocss/preset-attributify`,
        // core options
        shortcuts: [],
        rules: [],
        safelist: [],
      },
    }

测试效果,index.vue

vue
    <h1 class="bg-blue-200">
      Index Page
    </h1>

效果如下:

使用图标

由于前面引入了 UnoCSS,因此图标的使用遵循它的规则即可:

  • Icônes 或者 Iconify 搜索图标;

  • 安装所属图标集;

  • 按照<prefix><collection>-<icon>规则使用图标。

搜索图标

可以在 Icônes 或者 [Iconify](https://icon- sets.iconify.design/) 搜索图标,例如我们想要找一个 nuxt 图标,在下面地址搜索该关键字:https://icones.js.org/collection/all

安装图标集

我们选择 vscode-icons 图标集:

安装该依赖:

bash
    yarn add @iconify-json/vscode-icons -D

使用图标

按照<prefix><collection>-<icon>规则使用图标。

例如上面的 nuxt 图标规则为:i-vscode-icons-file-type-nuxt,就可以像下面这样使用:

vue
    <div class="i-vscode-icons-file-type-nuxt" />

更多相关知识:https://github.com/unocss/unocss/tree/main/packages/preset-icons/

整合组件库

整合NaiveUI 在前面课程已有演示,不再赘述。

整合 Pinia

整合Pinia 在前面课程已有演示,不再赘述。

使用模版项目

到目前为止,我们的模版已经基本做好了,大家可以将项目推送到 github 以备后续使用,使用方法如下:

bash
    npx nuxi init -t gh:org/name

上面的 gh 是 github 缩写,org 为组织名或者用户名,name 为项目名,比如我的 github 用户名为 57code,项目名称为 nuxt3-starter,则初始化项目可以使用下面命令:

bash
    npx nuxi init -t gh:57code/nuxt3-starter

总结

工程化相关的内容就跟大家先说到这里了,工程化总体上是从项目创建 -> 开发 -> 测试 -> 部署 -> 维护的一系列任务。这里面有一些任务还未涉及,但是主要的任务都给大家介绍到了,一些特殊的需求也欢迎大家一起来总结分享经验。

下次预告

从下一节开始,我们将探讨服务端端开发相关的知识,包括数据库、接口、Node.js 等知识。

Released under the MIT License.