【Vue3 + TS + Vite】从0到1搭建后台管理系统

news2024/12/23 10:43:28

前言

没搭建过Vue3的项目,从0开始搭建一下,记录一下自己的步骤。
技术栈vue3 + ts + scss + pinia + vite
我尽量写的详细一些,后续也会记录我在项目过程中,遇到的一些问题。

文章目录

  • 前言
  • 环境搭建
    • 一、创建项目
        • 1. 使用 Vite 创建 Vue 3 + TypeScript 项目:
        • 2. 进入项目目录:
        • 3. 安装项目依赖:
    • 二、项目结构规划
        • 1.项目的初始结构
        • 2. 通常可以创建以下目录结构:
    • 三、配置 Pinia
        • 1. 安装 Pinia:
        • 2. 创建 Pinia 实例:
        • 3. 在`main.ts`文件中引入 Pinia 实例:
        • 4. 在`src/store`文件夹下创建不同的 store 文件,例如`userStore.ts`用于管理用户状态:
        • 5. 在组件中使用 store:
    • 四、路由配置
        • 1. 安装`vue-router`:
        • 2. 创建路由模块:
    • 五、安装 less/scss
        • 1. 安装 scss and sass 依赖
        • 2. 安装 less 依赖
    • 六、安装 Element Plus
        • 1. 安装 Element Plus(一个流行的 Vue UI 组件库):
        • 2. 引入 Element Plus:在 main.ts 文件中引入并配置。
    • 七、请求数据(Axios 为例)
        • 1. 安装 Axios:
        • 2. 创建请求封装:
        • 3. 在 store 或组件中使用请求:
    • 八、构建和部署
        • 1. 开发完成后,可以使用以下命令进行构建:
        • 2. 根据你的部署环境进行相应的部署操作,如将构建后的文件部署到服务器上。

环境搭建

在搭建之前请确认几点:
1.创建的项目将使用基于 Vite 的构建设置;
2.确保安装了最新版本的 Node.js,可以从官方网站下载并安装;
3.当前工作目录正是打算创建项目的目录。

一、创建项目

1. 使用 Vite 创建 Vue 3 + TypeScript 项目:
  • npm:
   npm create vite@latest
  • yarn:
yarn create vite

在这里插入图片描述

  • Project name : 自己写一个就行,用英文(这个原因不用说吧)
  • Select a framework:用键盘上下键选择就行,选到 Vue 回车
  • Select a variant:我想尝试一下ts,所以这里选了 typescript,按照自己的需求选择
    这里我用 yarn ,命令创建项目,后面安装一些依赖,也是用 yarn

大家注意统一,要么一直用 npm , 要么一直用 yarn

2. 进入项目目录:
cd my_demo_proj
3. 安装项目依赖:
yarn

在这里插入图片描述

二、项目结构规划

1.项目的初始结构

在这里插入图片描述

2. 通常可以创建以下目录结构:
  • src/components :存放可复用的组件。
  • src/views :存放页面组件,例如Dashboard.vue用于仪表盘页面等。
  • src/api :用于封装与后端 API 的交互。
  • src/router :路由配置。
  • src/store :状态管理。
  • src/styles :全局样式。
    按照自己的习惯来,且合理就行。还是把我创建的目录结构贴在这,方便我后期看。
    在这里插入图片描述

三、配置 Pinia

1. 安装 Pinia:
  • npm:
   npm install pinia
  • yarn:
yarn add pinia

在这里插入图片描述

pinia 拥抱 ts 会比 vuex 好一些,pinia中文官网

2. 创建 Pinia 实例:

在项目的src目录下创建一个名为store的文件夹,然后在该文件夹中创建一个index.ts文件,添加以下内容:

import { createPinia } from 'pinia';

const pinia = createPinia();

export default pinia;
3. 在main.ts文件中引入 Pinia 实例:
import { createApp } from 'vue';
import App from './App.vue';
//pinia
import { createPinia } from 'pinia' 
const pinia = createPinia()

const app = createApp(App);
app.use(pinia);
app.mount('#app');
4. 在src/store文件夹下创建不同的 store 文件,例如userStore.ts用于管理用户状态:
 import { defineStore } from 'pinia';

 export const useUserStore = defineStore('user', {
   state: () => ({
     username: '',
     // 其他用户相关状态
   }),
   actions: {
     setUsername(username: string) {
       this.username = username;
     },
   },
 });
5. 在组件中使用 store:
 <script setup lang="ts">
 import { useUserStore } from '../store/userStore';
 const userStore = useUserStore();

 userStore.setUsername('admin');
 </script>

四、路由配置

1. 安装vue-router
  • npm:
  npm install vue-router@4
  • yarn:
 yarn add vue-router@4 

在这里插入图片描述

2. 创建路由模块:
  • src/views文件夹中创建 Dashboard.vue 文件;
  • src/router文件夹中创建index.ts文件,配置路由:
    import { createRouter, createWebHistory } from 'vue-router';
    import Dashboard from '../views/Dashboard.vue';
    
    const routes = [
      {
        path: '/',
        name: 'Dashboard',
        component: Dashboard,
      },
      // 添加其他路由
    ];
    
    const router = createRouter({
      history: createWebHistory(),
      routes,
    });
    
    export default router;
    

五、安装 less/scss

这里我安装了 SCSS(因为没有用过这个,想试试),大家按需安装就行。

1. 安装 scss and sass 依赖
  • npm:
npm add -D sass 
  • yarn:
yarn add sass

在这里插入图片描述

2. 安装 less 依赖
  • npm:
 npm add -D less 
  • yarn:
 yarn add less 

六、安装 Element Plus

1. 安装 Element Plus(一个流行的 Vue UI 组件库):
  • npm :
npm install element-plus --save
  • yarn:
yarn add element - plus

在这里插入图片描述

2. 引入 Element Plus:在 main.ts 文件中引入并配置。
import { createApp } from 'vue';
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
import App from './App.vue';

const app = createApp(App);
app.use(ElementPlus);
app.mount('#app');

七、请求数据(Axios 为例)

这里先简单的介绍一下,具体的我封装好的接口请求文件的代码,会单独出一篇分享出来。(这也是我第一次封装axios请求)

1. 安装 Axios:
  • npm:
npm install axios
  • yarn:
yarn add axios

在这里插入图片描述

2. 创建请求封装:

src目录下创建api文件夹,在该文件夹中创建http.ts文件封装 Axios 请求:

import axios from 'axios';

const instance = axios.create({
  baseURL: 'your-api-base-url',
});

export default instance;
3. 在 store 或组件中使用请求:
import http from '../api/http';

export const useDataStore = defineStore('data', {
  state: () => ({
    data: [],
  }),
  actions: {
    async fetchData() {
      const response = await http.get('/your-api-endpoint');
      this.data = response.data;
    },
  },
});

八、构建和部署

1. 开发完成后,可以使用以下命令进行构建:
  • npm:
npm run build
  • yarn:
yarn run build
2. 根据你的部署环境进行相应的部署操作,如将构建后的文件部署到服务器上。

以上是总结的大概步骤,更详细的步骤后面还会写,第一次自己搭建项目挑战真的大。办法总比困难多!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2198059.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用IOT-Tree Server制作一个边缘计算设备(Arm Linux)

最近实现了一个小项目&#xff0c;现场有多个不同厂家的设备&#xff0c;用户需要对此进行简单的整合&#xff0c;并实现一些联动控制。 我使用了IOT-Tree Server这个软件轻松实现了&#xff0c;不外乎有如下过程&#xff1a; 1&#xff09;使用Modbus协议对接现有设备&#…

探索循环神经网络RNN:解锁序列数据的奥秘

在这个数据驱动的时代&#xff0c;机器学习模型已经深入到我们生活的方方面面&#xff0c;从智能推荐系统到自然语言处理&#xff0c;无一不彰显其强大的能力。在众多模型中&#xff0c;循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;以其独特的结构和对序…

Java日志(总结)

一、logback日志 Logback是由log4j创始人设计的又一个开源日记组件。logback当前分成三个模块&#xff1a;logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J …

elasticsearch创建索引

1对比关系型数据库&#xff0c;创建索引就等同于创建数据库 在postman中&#xff0c;向ES服务器发PUT请求 显示已经创建成功了 http://192.168.1.108:9200/shopping 请求方式get http://192.168.1.108:9200/shopping 请求全部的index的url地址 get 请求 http://192.168.1.10…

OpenHarmony(鸿蒙南向开发)——轻量系统内核(LiteOS-M)【扩展组件】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… C支持 基本概念 C作为目前使用最广泛的编程语言之一&#xff0c;…

同样的颜色在iOS和Flutter中显示不一样?色域差异解析

同样的颜色在iOS和Flutter中显示不一样&#xff1f;色域差异解析 在移动应用开发中&#xff0c;颜色的一致性对于提供良好的用户体验至关重要。然而&#xff0c;开发者有时会遇到一个令人困惑的问题&#xff1a;为什么同样的颜色代码在iOS的xib和Flutter的Container中显示的效…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-09

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-09 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-09目录1. Can LLMs plan paths with extra hints from solvers?摘要创新点算法模型实验效果重要数据与结论 推荐阅读指数 2. Sc…

数据库软题8-数据库的控制功能

一、事务管理 题1-事物的四个特性&#xff08;原子、一致、隔离、永久&#xff09; 1.隔离性 2.持久性 3.原子性 二、数据库的备份与恢复 题1-数据库恢复就是回到故障发生前的状态 题2 题3 三、并发控制 题1-排它锁 选D题2.共享锁排他锁 1. 加了排他锁&#xff0c;不能再加…

毕设 深度学习语义分割实现弹幕防遮(源码分享)

文章目录 0 简介1 课题背景2 技术原理和方法2.1基本原理2.2 技术选型和方法 3 实例分割4 实现效果最后 0 简介 今天学长向大家分享一个毕业设计项目 毕业设计 深度学习语义分割实现弹幕防遮(源码分享) &#x1f9ff; 项目分享:见文末! 1 课题背景 弹幕是显示在视频上的评论…

设计模式、系统设计 record part04

结构型模式 结构型模式分为&#xff1a; 1.类结构型模式 2.对象结构型模式 3。类结构型&#xff0c;使用继承机制&#xff0c;耦合度高&#xff0c;不灵活 4.对象结构型&#xff0c;使用组合、聚合关系&#xff0c;耦合低&#xff0c;灵活 代理模式 1.代理就是中介 2.静态代理&…

64.DDR3读写控制器的设计与验证(1)(MIG IP核的配置)

&#xff08;1&#xff09;DRAM-动态随机存储器&#xff0c;SDRAM-同步动态随机存储器 DDR3 SDRAM- 第三代双倍速率同步动态随机存储器 双倍速率指的是时钟上升沿和下降沿都可以传输数据。同步指的是数据写入或读取时&#xff0c;是按时钟同步的。动态指的是硬件使用电容去存…

C# 自适应屏幕分辨率

一、新增AutoSizeFormClass.cs class AutoSizeFormClass{//(1).声明结构,只记录窗体和其控件的初始位置和大小。public struct controlRect{public int Left;public int Top;public int Width;public int Height;}//(2).声明 1个对象//注意这里不能使用控件列表记录 List nCtr…

云手机哪款好用?2024年云手机推荐对比指南

随着云手机市场的快速扩展&#xff0c;消费者在选择云手机时面临着众多选择。为了帮助大家找到最适合自己的云手机&#xff0c;小编特意整理了一份当前市场上几款备受关注的云手机品牌对比&#xff0c;大家一起往下看吧。 1. Ogphone云手机 Ogphone云手机是近年来海外业务版块迅…

图解C#高级教程(五):枚举器和迭代器

本章主要介绍 C# 当中枚举器、可枚举类型以及迭代器相关的知识。 文章目录 1. 枚举器和可枚举类型2. IEnumerator 和 IEnumerable 接口2.1 IEnumerator 接口2.2 IEnumerable 接口 3. 泛型枚举接口4. 迭代器4.1 使用迭代器创建枚举器4.2 使用迭代器创建可枚举类4.3 迭代器作为属…

谈论 MultiPHP

许多网站服务器提供商有大量客户&#xff0c;这些客户对他们的在线项目有各种需求。MultiPHP Manager界面可以帮助您轻松管理cPanel账户和域名的PHP和PHP-FPM配置&#xff0c;适用于运行EasyApache 4的系统。MultiPHP Manager界面提供了多种功能&#xff0c;包括&#xff1a; 服…

软考系统分析师知识点五:数据通信与计算机网络

前言 今年报考了11月份的软考高级&#xff1a;系统分析师。 考试时间为&#xff1a;11月9日。 倒计时&#xff1a;32天。 目标&#xff1a;优先应试&#xff0c;其次学习&#xff0c;再次实践。 复习计划第一阶段&#xff1a;扫平基础知识点&#xff0c;仅抽取有用信息&am…

安卓如何实现双击触摸唤醒点亮屏幕功能-源码分析linage os高通平台

背景&#xff1a; 前面文章已经有讲解过双击亮屏在一些方案调研情况&#xff0c;刚好linage os手机本身也有这个功能&#xff0c;刚好也有整体开源源码&#xff0c;所以今天带大家来对双击亮屏的源码部分进行剖析&#xff0c;本篇文章会一直分析到hal操作驱动节点。 设置作为…

有点晕,inline, crossinline,noinline小计

inline 主要用于展开铺平函数&#xff0c;用于高频访问但是代码不是很多的方法&#xff0c;减少函数对象的定义 fun <T> List<T>.normalForeach(action:(T)->Unit){for(item in this){action(item)} }inline fun <T> List<T>.inlinedForeach(action…

易图讯军用VR三维电子沙盘系统

深圳易图讯军用VR三维电子沙盘系统是一种集成了虚拟现实&#xff08;VR&#xff09;技术、三维建模技术、大数据分析、实时动态更新以及高度安全可靠的综合性军事指挥平台。该系统通过高精度三维模型真实再现战场环境&#xff0c;为指挥员提供沉浸式体验和交互操作的可能性&…

使用CANFD路由实现CAN与CANFD互通

随着科技的发展&#xff0c;汽车电子和工业领域中CAN通信需要承载数据量也越来越大&#xff0c;传统CAN通信有了向CANFD通信过渡的倾向。在实现过渡的过程中可能会出现自己设备是CAN通信&#xff0c;客户设备是CANFD通信的情况&#xff0c;或者自己设备是CANFD通信&#xff0c;…