Vue3 + Vite+ Element-Plus + TypeScript 搭建系统

Vue3+Vite+Element-Plus+TS搭建系统实践
本文介绍了如何使用Vue3、Vite、Element-Plus和TypeScript搭建一个前端项目,包括项目初始化、配置别名、按需引入组件、整合SVG图标、Pinia状态管理、环境变量、跨域处理、Axios请求库以及国际化设置等关键步骤,详细讲解了每个环节的实现方法和注意事项。

项目预览

环境准备

名称 备注
开发工具 vscode 版本: 1.84.2(可使用其他版本)
开发环境 node node版本: v16.6.1(可使用其他版本)

项目开发

1. 项目初始化

项目使用vite,按照 vite官网项目初始化 说明,执行以下步骤:

npm init vite@latest blog-system --template vue-ts
  • blog-system: 自定义的项目名称
  • vue-ts: vue + typescript 模板的标识,查看create-vite来获取每个模板的更多细节:vanilla,vanilla-ts, vue, vue-ts,react,react-ts,react-swc,react-swc-ts,preact,preact-ts,lit,lit-ts,svelte,svelte-ts,solid,solid-ts,qwik,qwik-ts

项目初始化完成后,进入项目,安装依赖后启动:

  cd blog-system
  npm install
  npm run dev

项目预览:
在这里插入图片描述
项目目录:
在这里插入图片描述

2. src路径设置别名

相对路径别名配置,使用 @ 代替 src

import {
   
    defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import path from "path";

const pathSrc = path.resolve(__dirname, "src");

// https://vitejs.dev/config/
export default defineConfig({
   
   
  plugins: [vue()],
  resolve: {
   
   
    alias: {
   
   
      "@": pathSrc,
    },
  },
});

import path from ‘path’
编译器报错: TS2307: Cannot find module ‘path’ or its corresponding type declarations.

npm install @types/node --save-dev

使用:

<script setup lang="ts">
// import HelloWorld from "./components/HelloWorld.vue"; 
import HelloWorld from "@/components/HelloWorld.vue";
</script>

3. unplugin按需引入

Element Plus 官方文档中推荐 按需自动导入 的方式,首先你需要安装unplugin-vue-components 和 unplugin-auto-import这两款插件。

npm install -D unplugin-vue-components unplugin-auto-import
插件名 概念 自动导入对象
unplugin-auto-import 按需自动导入API ref,reactive,watch,computed 等API
unplugin-auto-import 按需自动导入组件 Element Plus 等三方库和指定目录下的自定义组件

vite.config.ts设置配置

import {
   
    defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import path from "path";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";

const pathSrc = path.resolve(__dirname, "src");

// https://vitejs.dev/config/
export default defineConfig({
   
   
  plugins: [
    vue(),
    AutoImport({
   
   
      // 自动导入 Vue 相关函数,如:ref, reactive, toRef 等
      imports: ["vue"],
      eslintrc: {
   
   
        enabled: true, // 是否自动生成 eslint 规则,建议生成之后设置 false
        filepath: "./.eslintrc-auto-import.json", // 指定自动导入函数 eslint 规则的文件
      },
      dts: path.resolve(pathSrc, "types", "auto-imports.d.ts"), // 指定自动导入函数TS类型声明文件路径
    }),
    Components({
   
   
      dts: path.resolve(pathSrc, "types", "components.d.ts"), // 指定自动导入组件TS类型声明文件路径
    }),
  ],
  resolve: {
   
   
    alias: {
   
   
      "@": pathSrc,
    },
  },
});

.eslintrc.cjs - 自动导入函数 eslint 规则引入(后续添加eslint时)

"extends": [
    "./.eslintrc-auto-import.json"
],

tsconfig.json - 自动导入TS类型声明文件引入

{
   
   
  "include": ["src/**/*.d.ts"]
}

效果:
在这里插入图片描述

4. 引入Element UI Plus

npm install element-plus --save

修改vite.config.ts
加入resolvers: [ElementPlusResolver()],

// https://vitejs.dev/config/
export default defineConfig({
   
   
  plugins: [
    vue(),
    AutoImport({
   
   
      // 自动导入 Vue 相关函数,如:ref, reactive, toRef 等
      imports: ["vue"],
      eslintrc: {
   
   
        enabled: true, // 是否自动生成 eslint 规则,建议生成之后设置 false
        filepath: "./.eslintrc-auto-import.json", // 指定自动导入函数 eslint 规则的文件
      },
      // 自动导入 Element Plus 相关函数,如:ElMessage, ElMessageBox... (带样式)
      dts: path.resolve(pathSrc, "types", "auto-imports.d.ts"), // 指定自动导入函数TS类型声明文件路径
      // 自动导入 Element Plus 相关函数,如:ElMessage, ElMessageBox... (带样式)
      resolvers: [ElementPlusResolver()],
    }),
    Components({
   
   
      // 自动导入 Element Plus 组件
      resolvers: [ElementPlusResolver()],
      dts: path.resolve(pathSrc, "types", "components.d.ts"), // 指定自动导入组件TS类型声明文件路径
    }),
  ],
  resolve: {
   
   
    alias: {
   
   
      "@": pathSrc,
    },
  },
});

项目中使用组件和提示信息(无需再次引入)

<script setup lang="ts">
ElMessage({
     
     
  message: h("p", null, [
    h("span", null, "Message can be "),
    h("i", {
     
      style: "color: teal" }, "VNode"),
  ]),
});
</script>

<template>
  <div>
    <el-input placeholder="Please input" />
  </div>
</template>

<style scoped>
</style>

5. 整合svg图标(iconfont)

iconfont官网

5.1 icon单个使用
  1. 创建账号并登陆
  2. 下载文件到本地
    在这里插入图片描述
    在这里插入图片描述
  3. 引入静态图片到项目中
<img src="图片路径" />
5.2 unicode 引用

unicode是字体在网页端最原始的应用方式,特点是:

  • 兼容性最好,支持ie6+,及所有现代浏览器。
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • 但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。

选择图标进入购物车,后进入自己的管理页面
iconfont管理

  1. 点击在线链接,生成unicode引入代码
    在这里插入图片描述
  2. 新建/src/styles/iconfont.scss, 在index.scss中引入
    在这里插入图片描述
  3. 再在iconfont.scss中定义iconfont的样式
.iconfont {
   
   
  font-family: "iconfont" !important;
  font-size: 1.2rem;
  font-style: normal;
  -webkit-font-smoothing: antialiased;
  -webkit-text-stroke-width: 0.2px;
  -moz-osx-font-smoothing: grayscale;
}

  1. 复制内容到项目
    在这里插入图片描述
    <i class="iconfont">&#xe6a8;</i>
    <p>使用元素不限制i,div,span等标签都可以</p>
    <p>在iconfont.scss中定义iconfont的样式, 我们需要使用这个样式,所以需要加上这个class</p>
    <p>复制的代码放在标签中间</p>
  1. 显示
    在这里插入图片描述
5.3 font-class 引用

font-class是unicode使用方式的一种变种,主要是解决unicode书写不直观,语意不明确的问题。

与unicode使用方式相比,具有如下特点:

兼容性良好,支持ie8+,及所有现代浏览器。

  • 相比于unicode语意明确,书写更直观。可以很容易分辨这个icon是什么。
  • 因为使用class来定义图标,所以当要替换图标时,只需要修改class里面的unicode引用。
  • 不过因为本质上还是使用的字体,所以多色图标还是不支持的。
  1. 点击在线链接,生成css引入代码
    在这里插入图片描述
    2.在index.scss中引入
    在这里插入图片描述
  2. 使用
    <i class="iconfont icon-lianxiwomen"></i>

在这里插入图片描述

5.3 Sysmbol引用

Sysmbol引入支持颜色

  1. 点击在线链接,生成Sysmbol
    在这里插入图片描述

2.在main.ts中引入
在这里插入图片描述

  1. svg组件封装
<!-- src/components/SvgIcon/index.vue -->
<script setup lang="ts">
const props = defineProps({
   
   
  prefix: {
   
   
    type: String,
    default: "icon",
  },
  iconClass: {
   
   
    type: String,
    required: false,
  },
  color: {
   
   
    type: String,
  },
  size: {
   
   
    type: String,
    default: "1em",
  },
});

const symbolId = computed(() => `#${
     
     props.prefix}-${
     
     props.iconClass}`);
</script>

<template>
  <svg
    aria-hidden="true"
    class="svg-icon"
    :style="'width:' + size + 
### 回答1: Vue3 是一种用于构建用户界面的开源JavaScript 框架。它提供了许多功能和工具,使用户能够更轻松地创建可交互、响应式的应用程序。Vue3 采用了一些新的语法和技术,使其在性能和开发效率方面有了明显的改进。 Vite4 是一个基于原生ES模块解析的构建工具。它具有快速冷启动和快速热更新的能力,使开发人员能够更快速地进行开发和调试。与传统的打包工具不同,Vite4 通过在浏览器运行时进行模块解析,避免了不必要的打包和编译步骤,提供了更加流畅的开发体验。 Element Plus 是一个基于Vue3 的组件库,提供了丰富的UI组件和交互式工具,可以帮助开发人员快速构建出现代化的Web界面。Element PlusElement UI 的升级版,针对Vue3 进行了优化和改进,提供了更好的性能和更丰富的功能。 TypeScript 是一种强类型的JavaScript 超集,允许开发人员在JavaScript 代码中添加静态类型注解。这样可以在开发过程中提早发现错误并提供更好的代码提示。Vue3 通过与TypeScript 的集成,使开发人员能够使用类、接口、泛型等高级特性来构建更健壮的应用程序。 综上所述,Vue3Vite4、Element PlusTypeScript 的结合,可以提供一个高效、灵活和强大的开发环境。开发人员可以利用Vite4 的快速构建能力和热更新功能,结合Element Plus 提供的丰富组件,通过TypeScript 的类型检查和提示,更加轻松地构建出现代化的Vue 应用程序。 ### 回答2: Vue 3 是一款非常流行的 JavaScript 框架,用于构建现代化的用户界面。它的核心思想是组件化开发,通过将界面拆分成独立的组件,使开发者能够更好地管理和重用代码。 Vite 4 是 Vue 3 的一个新型构建工具,用于快速构建现代化的前端应用。相比传统的打包工具,Vite 4 支持开箱即用的单文件组件,可以进行更快的热重载和快速启动,从而提高开发效率。 Element Plus 是一套基于 Vue 3 的UI组件库,它提供了大量的高质量的组件,可以用于构建漂亮、响应式的用户界面。Element Plus 的组件易于使用,灵活且高度可定制,适合开发各种类型的应用。它还提供了强大的工具和样式库,使开发者能够更轻松地定制和管理应用的外观和风格。 TypeScript 是一个强类型的 JavaScript 超集,它为开发者提供了更强大的类型检查和代码提示功能。与 JavaScript 不同,TypeScript 在编码过程中能够捕获一些常见的错误,帮助开发者提高代码的质量和可维护性。TypeScript 还支持最新的 JavaScript 特性,并且可以与 Vue 3Vite 4 和 Element Plus 等工具和库完美集成。 综合上述所述,结合 Vue 3Vite 4、Element PlusTypeScript 可以实现一种高效、可维护和易于定制的开发方式。开发者可以使用 Vite 4 快速创建 Vue 3 项目,同时借助 Element Plus 的丰富组件库来构建出漂亮的用户界面。而 TypeScript 则提供了更强大的类型检查和代码提示,避免一些潜在的bug,提高开发效率。通过组合使用这些工具和库,可以实现更快速、更可靠的前端开发体验。 ### 回答3Vue3是一种流行的JavaScript框架,它具有响应式和组件化的特性,使开发者可以轻松构建现代化的Web应用程序。Vite4是Vue3的一个新的构建工具,旨在提供更快的启动和热重载,以及更好的开发体验。 Element Plus是一个基于Vue3的UI库,它提供了一套美观、易用和高性能的组件,用于构建优雅的用户界面。它使用了TypeScript来提供类型检查和智能提示,这使得在使用Element Plus时能更加轻松地进行开发。 TypeScript是一种由微软开发的编程语言,它是JavaScript的超集,添加了静态类型支持。它允许开发者在编写代码时进行类型检查,并提供了更好的代码补全和智能感知功能。在Vue3Element Plus使用TypeScript可以提高代码的可读性和可维护性,并减少错误和调试时间。 综上所述,Vue3Vite4、Element PlusTypeScript是一组强大的工具和库,可以帮助开发者更快速、高效地构建现代化的Web应用程序。它们的结合提供了优秀的开发体验,并能够轻松满足各种UI需求。无论是构建大型企业应用还是小型个人项目,它们都是很好的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值