【Vue3 + TS + Vite】从0到1搭建项目框架

news2024/12/23 20:36:17

前言

没搭建过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
这里给大家推荐一个博主原创的博客 —— 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/2203980.html

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

相关文章

JUC-线程池

阻塞队列 概述和架构 分类和核心方法 这里是在讲 为了区分在不同场景下 调用的不同组实现方法 核心方法演示 package com.example.juc.queue;import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Tim…

数据结构哈夫曼树-哈夫曼树代码构造实现(C语言)

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdlib.h> #include<stdio.h> #define N 30 //叶子结点的最大值 #define M 2*N-1 // 结点总数 typedef struct HTNode {int weight;int parent;int Lchild;int Rchild;int flag; }HTNode,HuffmanTree[M1];//Huffman…

2024年腾讯外包面试题(微创公司)

笔试&#xff1a; 1、判断异步执行顺序console.log(1);setTimeout(()>{Promise.resolve().then(()>{console.log(2);})console.log(3);},0);new Promise ((resolve)>{for(let i0; i<1000;i ){if(i1000){resolve();}}console.log(4);}).then(()>{console.log(5);…

不用PS!patchwork快速解决多子图组合问题~~

如果现在你还是将自己制作的图表放在PS或者PPT中进行随意组合的化&#xff0c;那么这篇文章你就得好好看看了&#xff0c;今天小编就给大家安利一个超强的突变自由组合包-patchwork&#xff0c;让你轻松实现多图的自由组合。 更多详细的数据可视化教程&#xff0c;可订阅我们的…

粗糙表面仿真和处理软件

首款基于粗糙表面的仿真和处理软件&#xff0c;该软件具有三种方法&#xff0c;主要是二维数字滤波法&#xff0c;相位频谱法和共轭梯度法。可以分别仿真具有高斯和非高斯分布的粗糙表面&#xff0c;其中非高斯表面利用Johnson转换系统进行变换给定偏度和峰度。对生成的粗糙表面…

怎么把视频转换成音频?深受大家喜欢的6个转换方法

怎么把视频转换成音频&#xff1f;在这个数字化迅速发展的时代&#xff0c;视频和音频已经成为我们生活中不可或缺的一部分。我们通过各种平台观看电影、听音乐、学习知识&#xff0c;视频内容承载着丰富的信息和情感。然而&#xff0c;有时候我们并不需要画面&#xff0c;而仅…

SpringBoot美发门店系统:智能库存管理

3系统分析 3.1可行性分析 通过对本美发门店管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本美发门店管理系统采用SSM框架&#xff0c;JAVA作为开发语…

JavaScript 常量/数据类型/类型转换 简单学习

目录 1. 常量 1.1 常量概述 1.2 案例 1.3 总结 2. 数据类型 2.1 概述 2.2 分类 2.2.1 基本数据类型 2.2.1 基本数据类型——number (数值/字型) 2.2.1 数字型——算术运算符 2.2.1 基本数据类型——String (字符串类型) 2.2.1 字符串拼接 2.2.1 模板字符串 2.2.1…

数据中心运维挑战:性能监控的困境与智能化解决方案的探寻

随着数字化进程的加速&#xff0c;数据中心已成为企业信息架构的核心支撑&#xff0c;其运维管理的复杂度和重要性也随之提升。运维团队需应对设备老化、资源分配失衡、性能波动等多重难题&#xff0c;以确保数据中心持续高效运行。 其中&#xff0c;性能监控作为运维管理的关键…

如何实现异地组网?最简单的方法与实用技巧

随着远程办公、跨地域团队协作以及家庭网络需求的增加&#xff0c;异地组网已成为许多人关注的焦点。异地组网的目的是让位于不同地点的设备可以通过互联网实现安全、稳定的连接&#xff0c;从而共享数据和资源。本文将详细介绍几种常见且简便的异地组网方法&#xff0c;包括使…

智慧园区平台项目建设方案

随着信息技术的飞速发展&#xff0c;智慧园区作为智慧城市的重要组成部分&#xff0c;正逐渐成为推动城市可持续发展的关键力量。本文旨在探讨智慧园区平台项目的建设内容&#xff0c;以期为相关领域的专家学者和决策者提供参考。 1. 智慧园区的定义与重要性 智慧园区是指运用…

C++设计模式——代理模式

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 引言代理模式的定义代理模式的具体实现 引言 我们经常听到代理服务器「代理服务器是一个中间服务器&#xff0c;能够接收客户端的请求&#xff0c;并代表客户端向服务器发起请求&#xff0c;然后将服…

计算、通信、感知与量子技术国际学术会议

第三届计算、通信、感知与量子技术国际会议&#xff08;CCPQT 2024&#xff09;将于2024年10月25日-10月27日在中国珠海召开&#xff0c;聚焦感知、绿色通信等领域&#xff0c;邀请国内外专家探讨前沿动态&#xff0c;旨在促进学术交流与产学研合作&#xff0c;推动学科融合发展…

YOLOv11改进策略【损失函数篇】| 利用MPDIoU,加强边界框回归的准确性

一、背景 目标检测和实例分割中的关键问题&#xff1a; 现有的大多数边界框回归损失函数在不同的预测结果下可能具有相同的值&#xff0c;这降低了边界框回归的收敛速度和准确性。 现有损失函数的不足&#xff1a; 现有的基于 ℓ n \ell_n ℓn​范数的损失函数简单但对各种尺度…

【LLM论文日更】| BGE经典论文-CPACK

论文&#xff1a;https://arxiv.org/pdf/2309.07597代码&#xff1a;GitHub - FlagOpen/FlagEmbedding: Retrieval and Retrieval-augmented LLMs机构&#xff1a;BAAI领域&#xff1a;embedding model发表&#xff1a;SIGIR 2024 ​ 研究背景 研究问题&#xff1a;这篇文章…

第十一章:规划过程组(11.18规划风险管理--11.24规划干系人参与)

前面几次考试几乎都考了风险管理的相关内容和试题~&#xff01;尤其是下午题所以感觉还是挺重要的&#xff01; 11.18 规划风险管理 11.18.1 风险基本概念 每个项目都在两个层面上存在风险:一是每个项目都有会影响项目达成目标的单个风险;二是由单个风险和不确定性的其他来源联…

RandLA-Net PB C++

tensorflow pb 模型 实现 c++ 部署 Code: https://github.com/QingyongHu/RandLA-Net RandLA-Net PB C++ randlanet_tf.h #ifndef RANDLANET_TF_H_

人工智能在免疫组化以及虚拟多重免疫荧光染色中的应用|文献速递·24-10-10

小罗碎碎念 这期推文准备了四篇文章&#xff0c;覆盖了AI在免疫组化、多重免疫组化以及虚拟多重免疫荧光染色中的应用。 目前来看&#xff0c;免疫组化这些技术大多用于验证&#xff0c;那么我们是否可以把从免疫组化分析得到的结论作为模型的先验知识&#xff0c;或者直接进…

vue3中 a-table设置某一个单元格的背景颜色

需求&#xff1a;根据某一个单元格中的某个条件不同&#xff0c;设置动态的颜色&#xff1b; 思路&#xff1a;通过官方文档提供的customCell进行判断设置不同的颜色背景&#xff0c;案例中进行了简单的行列判断&#xff0c;同学们可以根据自己的需求修改判断条件&#xff0c;动…

知乎信息流广告开户是啥政策?

作为国内领先的知识分享平台&#xff0c;知乎以其高质量的内容和精准的用户群体&#xff0c;成为了品牌营销的新蓝海。为了帮助更多企业抓住这一机遇&#xff0c;云衔科技正式推出知乎信息流广告开户及代运营服务&#xff0c;旨在为企业提供一站式的营销解决方案。 一、为什么…