admin 管理员组

文章数量: 1184232

文章目录

  • 项目地址
  • 安装环境 自行安装
  • 命令行
  • 目录结构
  • 自动导入配置
  • 安装环境 自行安装
  • 命令行
  • 目录结构
  • 自动导入配置
  • 配置 `eslint.config.mjs`
  • 新增`prettier.config.mjs`
  • 安装Element Plus
    • ```main.ts```增加Element Plus 配置
    • 自动导入
  • UNOCSS
    • 安装 `npm install -D unocss`
    • 配置自动导入 修改 `vite.config.ts`
    • 修改`main.ts`
    • 新增`unocss.config.ts`
  • vueuse
    • 安装
    • 配置自动导入 修改 `vite.config.ts`

项目地址

项目地址

安装环境 自行安装

命令行

npm create vue@latest

都选是,端到端随便选,也用不到
参考:

按照提示的命令执行就可以

npm install 时记得换源,要快一些,推荐使用nrm继续换源

目录结构

自动导入配置

安装环境 自行安装

命令行

npm create vue@latest

都选是,端到端随便选,也用不到
参考:

按照提示的命令执行就可以

npm install 时记得换源,要快一些,推荐使用nrm继续换源

目录结构

自动导入配置

npm install unplugin-auto-import unplugin-vue-components --save-dev 

修改 vite.config.ts

import { fileURLToPath, URL } from 'node:url' // 从 node 的 url 模块中导入工具,用于处理文件路径
import { defineConfig } from 'vite' // 从 Vite 中导入配置函数,用于定义 Vite 配置
import vue from '@vitejs/plugin-vue' // 从 Vite 插件库导入 vue 插件,用于支持 Vue 3 的单文件组件(SFC)
import vueJsx from '@vitejs/plugin-vue-jsx' // 导入 Vue JSX 插件,支持 Vue 组件中的 JSX 语法
// 自动导入插件,用于自动导入库中的方法
import AutoImport from 'unplugin-auto-import/vite' 
// 组件自动注册插件,用于自动扫描并注册 Vue 组件
import Components from 'unplugin-vue-components/vite'

// https://vite.dev/config/
// 使用 defineConfig 函数来定义和导出 Vite 的配置
export default defineConfig({
  // 配置 Vite 插件
  plugins: [
    vue(), // 启用 vue 插件,支持 Vue 单文件组件的编译
    vueJsx(), // 启用 vue-jsx 插件,支持 JSX 语法的编写

    // 自动导入 UI 库或其他常用工具函数,页面中可以直接使用而无需显式导入
    AutoImport({
      resolvers: [], // 可以配置特定库的解析器,自动导入库中的方法,目前为空
      imports: ['vue', 'vue-router'], // 自动导入 vue 和 vue-router 的函数,例如 `ref`, `reactive` 等
      dts: 'types/auto-imports.d.ts', // 自动生成的类型声明文件路径,用于给 TypeScript 提供提示
      dirs: [''], // 该选项可以指定自动导入自定义的工具函数的目录,目前未配置
      vueTemplate: true, // 启用该选项后,在 Vue 模板中也可以使用自动导入的函数
    }),

    // 自动注册 Vue 组件,允许在页面中直接使用组件,而无需手动导入
    Components({
      dirs: ['src/components/'], // 指定扫描组件的目录,默认会递归扫描该目录下的所有 Vue 组件
      dts: 'types/components.d.ts', // 自动生成的组件类型声明文件路径,用于 TypeScript 提供提示
      include: [/\.vue$/, /\.vue\?vue/, /\.md$/], // 匹配需要自动注册的文件类型,包括 .vue 文件和 markdown 文件
      resolvers: [], // 可以配置组件库的解析器,用于支持自动导入第三方组件库,目前为空
    }),
  ],

  // 配置模块解析相关选项
  resolve: {
    alias: {
      // 配置路径别名,`@` 代表项目根目录的 src 文件夹,方便在项目中使用绝对路径
      '@': fileURLToPath(new URL('./src', import.meta.url)),
    },
  },
})

配置 eslint.config.mjs

修改内容

import pluginVue from 'eslint-plugin-vue' // 引入 ESLint 的 Vue 插件,提供 Vue 文件的 linting 规则
import vueTsEslintConfig from '@vue/eslint-config-typescript' // 引入 Vue 与 TypeScript 的 ESLint 配置,支持 Vue 项目中的 TypeScript
import pluginVitest from '@vitest/eslint-plugin' // 引入 Vitest 插件,用于 Vitest 测试的 linting
import pluginPlaywright from 'eslint-plugin-playwright' // 引入 Playwright 插件,用于 E2E 测试的 linting
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting' // 引入 Prettier 跳过格式化的配置
import parser from 'vue-eslint-parser' // 引入 Vue 的 ESLint 解析器,用于解析 Vue 文件中的代码

export default [
  // 配置需要进行 Lint 检查的文件
  {
    name: 'app/files-to-lint',
    files: ['**/*.{ts,mts,tsx,vue}'], // 需要 lint 的文件类型,包括 TypeScript、TSX 和 Vue 文件
  },

  // 配置需要忽略的文件或目录
  {
    name: 'app/files-to-ignore',
    ignores: [
      '**/dist/**', // 忽略构建输出目录
      '**/dist-ssr/**', // 忽略服务器端渲染的构建输出目录
      '**/coverage/**', // 忽略测试覆盖率目录
      '.DS_Store', // 忽略 Mac 系统的 .DS_Store 文件
      'node_modules', // 忽略 node_modules 目录
      'dist', // 忽略 dist 目录
      'dist-ssr', // 忽略 dist-ssr 目录
      '*.local', // 忽略本地配置文件
      '.vscode', // 忽略 VSCode 配置目录
      '.idea', // 忽略 WebStorm 等 IDE 的配置目录
      '*.md', // 忽略 Markdown 文件
      '*.sh', // 忽略 Shell 脚本文件
    ],
  },

  // 使用 Vue 插件的基础配置,提供 Vue 项目的必要 lint 规则
  ...pluginVue.configs['flat/essential'],

  // 使用 Vue 的 TypeScript 配置,集成 Vue 和 TypeScript 的 lint 规则
  ...vueTsEslintConfig(),

  // Vitest 推荐的 ESLint 配置,用于测试文件的 linting
  {
    ...pluginVitest.configs.recommended,
    files: ['src/**/__tests__/*'], // 只对测试文件应用此规则
  },

  // Playwright 推荐的 ESLint 配置,用于 E2E 测试文件的 linting
  {
    ...pluginPlaywright.configs['flat/recommended'],
    files: ['e2e/**/*.{test,spec}.{js,ts,jsx,tsx}'], // 只对 E2E 测试文件应用此规则
  },

  // 通用的 ESLint 配置,适用于所有的 JS、TS 和 Vue 文件
  {
    files: ['**/*.{js,ts,vue}'], // 适用于 JS、TS、Vue 文件
    languageOptions: {
      parser: parser, // 使用 vue-eslint-parser 来解析 Vue 文件中的代码
      ecmaVersion: 2021, // 使用 ECMAScript 2021 版本的语法
      sourceType: 'module', // 使用 ES 模块的语法
      parserOptions: {
        parser: '@typescript-eslint/parser', // 对 TypeScript 代码使用 @typescript-eslint/parser 解析器
        ecmaFeatures: {
          jsx: true, // 支持 JSX 语法
        },
      },
      globals: {
        browser: true, // 全局启用浏览器相关的变量
        node: true, // 全局启用 Node.js 相关的变量
        es6: true, // 全局启用 ES6 相关的变量
      },
    },
    rules: {
      // TypeScript 相关的 lint 规则
      '@typescript-eslint/no-unused-expressions': 'off', // 关闭未使用的表达式检查
      '@typescript-eslint/no-explicit-any': 'off', // 允许使用 `any` 类型
      'no-debugger': 'off', // 允许使用 `debugger` 语句进行调试
      '@typescript-eslint/explicit-module-boundary-types': 'off', // 关闭强制显式声明模块边界类型的规则
      '@typescript-eslint/ban-types': 'off', // 允许使用一些不推荐的 TypeScript 类型
      '@typescript-eslint/ban-ts-comment': 'off', // 允许使用 TypeScript 注释
      '@typescript-eslint/no-empty-function': 'off', // 允许定义空函数
      '@typescript-eslint/no-non-null-assertion': 'off', // 允许使用非空断言(`!`)
      '@typescript-eslint/no-unused-vars': [
        'error',
        {
          argsIgnorePattern: '^_', // 忽略以 `_` 开头的函数参数未使用警告
          varsIgnorePattern: '^_', // 忽略以 `_` 开头的变量未使用警告
        },
      ],
      'no-unused-vars': [
        'error',
        {
          argsIgnorePattern: '^_', // 忽略以 `_` 开头的未使用变量
          varsIgnorePattern: '^_',
        },
      ],
      // Vue 相关的 lint 规则
      'vue/no-v-html': 'off', // 允许使用 `v-html` 指令
      'vue/require-default-prop': 'off', // 不强制为每个 prop 提供默认值
      'vue/require-explicit-emits': 'off', // 不强制显式声明组件的 `emits` 事件
      'vue/multi-word-component-names': 'off', // 允许组件名为单个单词
      'vue/html-self-closing': [
        'error',
        {
          html: {
            void: 'always', // 强制 HTML 空元素使用自闭合写法
            normal: 'always', // 强制常规 HTML 标签自闭合
            component: 'always', // 强制组件自闭合
          },
          svg: 'always', // 强制 SVG 标签自闭合
          math: 'always', // 强制 MathML 标签自闭合
        },
      ],
      // Prettier 相关的 lint 规则
      'prettier/prettier': [
        'error',
        {
          endOfLine: 'auto', // 自动识别并使用系统的换行符
        },
      ],
    },
  },

  // 跳过 Prettier 格式化规则,与 Prettier 结合使用时跳过格式化检查
  skipFormatting,
]

新增prettier.config.mjs

内容:

/**
 * 修改配置后重启编辑器
 * 配置项文档:https://prettier.io/docs/en/configuration.html
 * @type {import("prettier").Config}
 */

export default {
  /** 每一行的宽度 */
  printWidth: 120,
  /** 在对象中的括号之间是否用空格来间隔 */
  bracketSpacing: true,
  /** 箭头函数的参数无论有几个,都要括号包裹 */
  arrowParens: 'always',
  /** 换行符的使用 */
  endOfLine: 'auto',
  /** 是否采用单引号 */
  singleQuote: false,
  /** 对象或者数组的最后一个元素后面不要加逗号 */
  trailingComma: 'none',
  /** 是否加分号 */
  semi: false,
}


安装Element Plus

Element Plus 官网

安装
npm install element-plus --save

main.ts增加Element Plus 配置

内容

import './assets/main.css' // 引入全局样式文件,应用全局样式

import { createApp } from 'vue' // 从 Vue 中引入 createApp 函数,用于创建 Vue 应用实例
import { createPinia } from 'pinia' // 引入 Pinia,Pinia 是 Vue 3 的状态管理库
import ElementPlus from 'element-plus' // 引入 Element Plus 组件库
import 'element-plus/dist/index.css' // 引入 Element Plus 的全局样式文件
import App from './App.vue' // 引入根组件 App.vue,作为应用的根组件
import router from './router' // 引入 Vue Router 配置文件,管理应用的路由

// 创建 Vue 应用实例,将根组件 App 作为入口
const app = createApp(App)

// 使用 Element Plus 组件库
app.use(ElementPlus)

// 使用 Pinia 状态管理库
app.use(createPinia())

// 使用 Vue Router 进行路由管理
app.use(router)

// 将 Vue 应用挂载到 HTML 文件中的 id 为 `#app` 的 DOM 元素上
app.mount('#app')

自动导入

修改 vite.config.ts
完整内容

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
// 自动配置
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
// Element Plus
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' // 增加

// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    // 自动导入 UI 库,页面直接使用
    AutoImport({
      resolvers: [ElementPlusResolver()],
      imports: ['vue', 'vue-router'], // 导入vue和vue-router
      dts: 'types/auto-imports.d.ts', // 生成自动导入类型声明文件
      dirs: [''], // 自动导入的方法等
      vueTemplate: true,
    }),
    // 自动注册组件,页面直接使用
    Components({
      dirs: ['src/components/'], // 扫描的文件夹
      dts: 'types/components.d.ts', // 生成自动注册类型声明文件
      include: [/\.vue$/, /\.vue\?vue/, /\.md$/], // 匹配文件
      resolvers: [ElementPlusResolver()], // 配置组件库的解析器
    }),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
    },
  },
})

UNOCSS

安装 npm install -D unocss

配置自动导入 修改 vite.config.ts

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
// 自动配置
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
// Element Plus
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// UnoCSS
import UnoCSS from 'unocss/vite'
// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    // UnoCSS
    UnoCSS(),
    // 自动导入 UI 库,页面直接使用
    AutoImport({
      resolvers: [ElementPlusResolver()],
      imports: ['vue', 'vue-router'], // 导入vue和vue-router
      dts: 'types/auto-imports.d.ts', // 生成自动导入类型声明文件
      dirs: [''], // 自动导入的方法等
      vueTemplate: true,
    }),
    // 自动注册组件,页面直接使用
    Components({
      dirs: ['src/components/'], // 扫描的文件夹
      dts: 'types/components.d.ts', // 生成自动注册类型声明文件
      include: [/\.vue$/, /\.vue\?vue/, /\.md$/], // 匹配文件
      resolvers: [ElementPlusResolver()], // 配置组件库的解析器
    }),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
    },
  },
})

修改main.ts

完整内容

import './assets/main.css' // 引入全局样式文件,应用全局样式

import { createApp } from 'vue' // 从 Vue 中引入 createApp 函数,用于创建 Vue 应用实例
import { createPinia } from 'pinia' // 引入 Pinia,Pinia 是 Vue 3 的状态管理库
import ElementPlus from 'element-plus' // 引入 Element Plus 组件库
import 'element-plus/dist/index.css' // 引入 Element Plus 的全局样式文件
import App from './App.vue' // 引入根组件 App.vue,作为应用的根组件
import router from './router' // 引入 Vue Router 配置文件,管理应用的路由
import 'uno.css' // 引入 UnoCSS,一个 CSS 框架,用于快速开发 Vue 应用

// 创建 Vue 应用实例,将根组件 App 作为入口
const app = createApp(App)

// 使用 Element Plus 组件库
app.use(ElementPlus)

// 使用 Pinia 状态管理库
app.use(createPinia())

// 使用 Vue Router 进行路由管理
app.use(router)

// 将 Vue 应用挂载到 HTML 文件中的 id 为 `#app` 的 DOM 元素上
app.mount('#app')

新增unocss.config.ts

内容

import { defineConfig, presetAttributify, presetUno } from "unocss"

/**
 * 使用 `defineConfig` 定义 Unocss 的配置,主要配置预设、规则和快捷方式等。
 */
export default defineConfig({
  /**
   * 预设(presets)
   * 预设是 Unocss 提供的一系列预定义的样式规则和功能,你可以通过引入不同的预设来增强或修改框架的行为。
   */
  presets: [
    /**
     * presetAttributify:属性化模式
     * 允许在 HTML 元素的属性中直接书写样式,不需要通过类名定义样式,例如 `<div text="red"></div>`。
     * 这是一种简洁的书写方式,非常适合快速原型开发。
     */
    presetAttributify(),

    /**
     * presetUno:默认预设
     * UnoCSS 的核心预设,包含常见的实用工具类,比如 `flex`、`padding`、`margin` 等。
     * 这是最基础的预设,几乎所有项目都会引入它。
     */
    presetUno()
  ],

  /**
   * 自定义规则(rules)
   * 规则是你可以自定义的 CSS 样式规则,每条规则是一个数组,包含一个类名和对应的样式定义。
   */
  rules: [
    /**
     * 定义自定义类名 `uno-padding-20`,对应的样式为 `padding: 20px`
     * 使用方法:在元素上添加 `uno-padding-20` 类名
     * 例如:<div class="uno-padding-20"></div>
     */
    ["uno-padding-20", { padding: "20px" }]
  ],

  /**
   * 自定义快捷方式(shortcuts)
   * 快捷方式允许你将多个实用工具类组合为一个类名,从而简化代码的书写。
   */
  shortcuts: {
    /**
     * 定义 `uno-wh-full`,表示 `w-full h-full`,即宽高都为 100%* 使用方法:在元素上添加 `uno-wh-full` 类名
     * 例如:<div class="uno-wh-full"></div>
     */
    "uno-wh-full": "w-full h-full",

    /**
     * 定义 `uno-flex-center`,表示 `flex justify-center items-center`,即使用 `flexbox` 布局,且子元素水平居中和垂直居中。
     * 使用方法:在元素上添加 `uno-flex-center` 类名
     * 例如:<div class="uno-flex-center"></div>
     */
    "uno-flex-center": "flex justify-center items-center",

    /**
     * 定义 `uno-flex-x-center`,表示 `flex justify-center`,即使用 `flexbox` 布局,且子元素水平居中。
     * 使用方法:在元素上添加 `uno-flex-x-center` 类名
     * 例如:<div class="uno-flex-x-center"></div>
     */
    "uno-flex-x-center": "flex justify-center",

    /**
     * 定义 `uno-flex-y-center`,表示 `flex items-center`,即使用 `flexbox` 布局,且子元素垂直居中。
     * 使用方法:在元素上添加 `uno-flex-y-center` 类名
     * 例如:<div class="uno-flex-y-center"></div>
     */
    "uno-flex-y-center": "flex items-center"
  }
})

vueuse

官网

安装

npm i @vueuse/core

配置自动导入 修改 vite.config.ts

完整内容

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
// 自动配置
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
// Element Plus
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// UnoCSS
import UnoCSS from 'unocss/vite'
// VueUse
import {
  VueUseComponentsResolver,
  VueUseDirectiveResolver,
} from 'unplugin-vue-components/resolvers'
// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    // UnoCSS
    UnoCSS(),
    // 自动导入 UI 库,页面直接使用
    AutoImport({
      resolvers: [ElementPlusResolver()],
      imports: ['vue', 'vue-router'], // 导入vue和vue-router
      dts: 'types/auto-imports.d.ts', // 生成自动导入类型声明文件
      dirs: [''], // 自动导入的方法等
      vueTemplate: true,
    }),
    // 自动注册组件,页面直接使用
    Components({
      dirs: ['src/components/'], // 扫描的文件夹
      dts: 'types/components.d.ts', // 生成自动注册类型声明文件
      include: [/\.vue$/, /\.vue\?vue/, /\.md$/], // 匹配文件
      resolvers: [
        ElementPlusResolver(), // 自动导入 Element Plus
        VueUseComponentsResolver(), // 自动导入 VueUse
        VueUseDirectiveResolver(), // 自动导入 VueUse 的指令
      ], // 配置组件库的解析器
    }),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
    },
  },
})

本文标签: 项目 comprehensivetools