记录一下vue3+vite+pinia搭建过程

搭建vue3+vite+pinia项目步骤 搭建 vue3+vite+pinia 项目超详细步骤 阅读详情

前言

好久没有搭建vue3项目了搞忘了,今天记录一下这个过程

文章目录

前言

目录

一、搭建前的准备

二、创建vite+Vue3基础项目

1、初始化项目

2、进入项目并且按照依赖

3、启动开发服务器

三、安装配置pinia

1、安装Pinia

2、配置Pinia(全局注册)

3、创建第一个Pinia Store

4、在组件中使用Pinia

四、路由配置

1、安装Vue-Router

​编辑

2、创建路由

3、全局注册路由

五、配置别名@/

六、安装scss

七、安装Axios

1、封装Axios

2、管理接口

3、启用 “erasableSyntaxOnly” 时,不允许使用此语法。

4、使用接口

八、Element-puls安装

1、完整引入

2、按需引入-自动导入(推荐)


目录

一、搭建前的准备

首先确保你的电脑上已经安装了 Node.js (建议版本 16.0 及以上) 和 npm/yarn/pnpm

  • 检查 Node.js 版本:打开终端,输入 node -v,能显示版本号即安装成功。

  • 我这里用的是pnpm(速度快、磁盘占用少),也可以用 npm/yarn

二、创建vite+Vue3基础项目

1、初始化项目

  • pnpm:
pnpm create vite@latest

  • 项目名称(Project name):默认是 vite-project,可自定义,我这里就用默认的了
  • 框架选择(Select a framework):支持Vue、React等等,咋们选择Vue
  • 语言选择(Select a variant):选择TypeScript
  • 是否使用测试版(Use Vite 8 beta (Experinental)?):选择No,当然也可以体验一下
  • 是否安装pnpm并且运行项目(Install with pnpm and start now):Yes

2、进入项目并且按照依赖

# 进入项目目录
cd vite-project

# 安装基础依赖
pnpm install

3、启动开发服务器

pnpm dev

三、安装配置pinia

Pinia 是 Vue 官方推荐的状态管理库,替代了 Vuex,用法更简洁。

1、安装Pinia

pnpm add pinia

2、配置Pinia(全局注册)

  •  在 src 下创建 stores 目录,新建index.ts

代码如下:

// 导入 Pinia
import { createPinia } from "pinia";
// 创建Pinia实例
const pinia  = createPinia()
// 将创建好的实例导出
export default pinia

  • 在项目的 src 目录下,找到 main.ts

修改代码如下:

//src/main.ts
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
// Pinia
const pinia = './store' //导入Pinia


const app =  createApp(App)
app.use(pinia)//注册Pinia
app.mount('#app')

3、创建第一个Pinia Store

store文件下创建,userInfo.ts(以用户信息为例)

// 导入 defineStore函数
import { defineStore } from "pinia";

// 定义导出Store,命名规则usexxxxx
export const useUserInfo = defineStore("userinfo", {
  state: () => ({
    userName: "",
    sex: 0,
    age: 0,
  }),
  //   计算属性
  getters: {
    augmentAge: (state) => (age: number) => state.age + 1,
  },
  //   修改 state 的逻辑,支持同步/异步,类似 Vue 的 methods
  actions: {
    // 同步
    setSex() {
      this.sex = 1;
    },
    // 批量修改state
    resetInfo() {
      this.$patch({
        sex: 0,
        age: 0,
      });
    },
  },
});

4、在组件中使用Pinia

<template>
  <div>我是App.vue</div>
  <div>我的名字{{ userName }}</div>
  <div>我的性别{{ age }}</div>
  <div>我的年龄{{ sex }}</div>
 <button @click="setSex">切换我的性别</button>
 <button @click="addAge">年龄加1</button>
 <button @click="Reset">重置性别年龄</button>
</template>

<script setup lang="ts">
// 导入定义的Store
import { useUserInfo } from "./store/userInfo";
// 导入 pinia 的辅助函数(按需)
import { storeToRefs } from "pinia";
// 获取 Store 实例
const userInfo = useUserInfo();
// 方法1:使用 storeToRefs 解构
const { userName, age, sex } = storeToRefs(userInfo);

// 方法2:直接访问
// 调用 actions 中的方法
const setSex = () => {
  userInfo.setSex(1)
};


const addAge=()=>{
  userInfo.age +=1
  console.log(userInfo.augmentAge(userInfo.age));
}


const Reset =()=>{
  userInfo.resetInfo()
}

</script>

<style scoped></style>

四、路由配置

1、安装Vue-Router

pnpm install vue-router@4

2、创建路由

在项目src目录下,创建view和router文件夹

  • view:页面组件仓库(创建login.vue登录页)
  • router:路由配置中心(创建index.tx)
<!-- router/index.ts -->
import { createRouter, createWebHistory } from "vue-router";

import LOGIN from "../view/login.vue";

const routes = [
  {
    path: "/Login",
    name: "login",
    component: LOGIN,
  },
];

const router = createRouter({
    history:createWebHistory(),
    routes
})

export default router

3、全局注册路由

在项目src目录下main.ts中修改,修改如下

<!-- main.ts -->
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
// Pinia
import  pinia from './store'//导入Pinia
// router
import router from './router'//导入router

const app =  createApp(App)
app.use(pinia)//注册Pinia
app.use(router)//注册router
app.mount('#app')

五、配置别名@/

用来替代冗长的相对路径(比如 ../),让代码中的导入路径更简洁规范

  • 首先在项目根目录找到 vite.config.ts,引入 path 模块并配置 resolve.alias

  • 然后在 tsconfig.json 中同步配置,否则 TS 会提示路径找不到

  • 然后就可以在项目中使用@/来指向src目录

六、安装scss

我一直用scss,所以就用这个了

pnpm add scss

七、安装Axios

pnpm add axios

1、封装Axios

在项目sec目录下面新建api文件夹,并且在api文件夹下创建request.ts用来封装Axios

// 导入 axios 库
import axios from "axios";

/**
 * 创建 axios 实例并配置基础参数
 * axios.create() 会返回一个新的 axios 实例
 */
const request = axios.create({
  // 基础请求地址
  baseURL: "",
  // timeout: 5000, // 请求超时时间(毫秒)
  // headers: { 'Content-Type': 'application/json' } // 默认请求头
});

/**
 * 请求拦截器(请求发送前执行)
 * 作用:统一处理请求配置(如添加 token、设置请求头、加载动画等)
 */
request.interceptors.request.use(
  // 成功拦截:修改/补充请求配置
  (config) => {
    // 示例:请求发送前添加 token 到请求头(实际开发中可从本地存储获取)
    // const token = localStorage.getItem('token');
    // if (token) {
    //   config.headers.Authorization = `Bearer ${token}`;
    // }
    return config; // 必须返回配置对象,否则请求会中断
  },
  // 失败拦截:处理请求发送前的错误(如配置错误)
  (error) => {
    console.error("请求拦截器错误:", error);
    return Promise.reject(error); // 抛出错误,供后续 catch 处理
  },
);

/**
 * 响应拦截器(服务器返回响应后执行)
 * 作用:统一处理响应数据、统一捕获错误(如 401 未授权、500 服务器错误等)
 */
request.interceptors.response.use(
  // 成功拦截:处理正常响应(状态码 2xx)
  (response) => {
    // 示例:只返回响应体中的 data 部分,简化业务层调用
    // return response.data;
    return response; // 返回完整响应对象,供业务层使用
  },
  // 失败拦截:处理响应错误(如 4xx/5xx 状态码、网络错误等)
  (error) => {
    // 示例:根据不同错误类型给出统一提示
    if (error.response) {
      // 服务器返回了响应,但状态码不是 2xx
      const status = error.response.status;
      switch (status) {
        case 401:
          console.error("未授权,请重新登录");
          // 可添加跳转到登录页的逻辑
          break;
        case 403:
          console.error("权限不足,无法访问");
          break;
        case 404:
          console.error("请求地址不存在");
          break;
        case 500:
          console.error("服务器内部错误");
          break;
        default:
          console.error(`请求失败,状态码:${status}`);
      }
    } else if (error.request) {
      // 请求已发送,但未收到响应(如网络错误、超时)
      console.error("网络异常,请检查网络连接");
    } else {
      // 请求配置阶段出错
      console.error("请求配置错误:", error.message);
    }
    return Promise.reject(error); // 抛出错误,供业务层 catch 处理
  },
);

/**
 * 封装 GET/POST 请求方法
 * 目的:简化业务层调用,统一请求参数格式,无需重复处理 Promise
 */
export default {
  /**
   * GET 请求封装
   * @param path 请求路径(拼接在 baseURL 后,如 "/user/list")
   * @param data 请求参数(会自动拼接到 URL 后,如 ?id=1&name=test)
   * @returns Promise 对象,业务层可通过 .then/.catch 处理结果
   */
  get: function (path: string, data: object) {
    return new Promise((resolve, reject) => {
      request
        .get(path, {
          params: data, // GET 请求的参数通过 params 传递
        })
        .then((response) => {
          resolve(response); // 请求成功,将结果返回给业务层
        })
        .catch((error) => {
          reject(error); // 请求失败,将错误返回给业务层
        });
    });
  },

  /**
   * POST 请求封装
   * @param path 请求路径(拼接在 baseURL 后,如 "/user/add")
   * @param data 请求体参数(会以 JSON 格式发送到服务器)
   * @returns Promise 对象,业务层可通过 .then/.catch 处理结果
   */
  post: function (path: string, data: object) {
    return new Promise((resolve, reject) => {
      request
        .post(path, data) // POST 请求的参数直接作为第二个参数(请求体)
        .then((response) => {
          resolve(response); // 请求成功,将结果返回给业务层
        })
        .catch((error) => {
          reject(error); // 请求失败,将错误返回给业务层
        });
    });
  },
};

2、管理接口

例:在api文件下创建loginApi.ts(登录相关接口),之后登录相关的接口写在这里,

import request from './request'

// 使用枚举管理接口

enum API {
  USER_LOGIN = '',
}
// 登录
export const login = (data:any) => request.get(API.USER_LOGIN, data)

3、启用 “erasableSyntaxOnly” 时,不允许使用此语法。

这个错误可以在tsconfig.node.json和tsconfig.app.json文件中将erasableSyntaxOnly改为false就可以了

4、使用接口

// 方法一
import { login,logout } from "@/api/loginApi";
const goLogin = async () => {
  let data = {};
  const result = await login(data);
};
// 方法二
import * as loginAppi from '@/api/loginApi'
const goLogin2 = async () => {
  let data = {};
  const result = await loginAppi.login(data);
};

八、Element-puls安装

pnpm install element-plus

1、完整引入

2、按需引入-自动导入(推荐)

element-puls官网,指南模块-快速这块有详细教程

pnpm install -D unplugin-vue-components unplugin-auto-import

vue3:vue3+vite+ts+pinia 输入名字后,这里出现了几个选项,不清楚都是干啥的,下来研究。经过测试不需要安装sass-loader,安装了会报错。查看url已经有参数了,,查看查询结果,生效,ok。参数要一致,不一致就会报错。问题得到处理,不报错了。 阅读详情

相关推荐

前端实战日记:用Vue3和ECharts从零搭建AI交易面板

前端开发中,数据可视化与实时交互是构建复杂应用的核心挑战,而K线图则是金融行情场景下的经典可视化形态。通过一个完整的实战项目,可以串起Vue3组合式API、ECharts图表配置、工程化架构设计、接口层封装等关键技能。掌握这些能力,不仅能支撑交易面板、数据看板等场景的开发,也能帮助开发者理解从零搭建业务应用的完整链路。本文以一个名为AiTrader的AI辅助交易分析面板为落点,记录项目Day1的实操过程:从Vite初始化、Vue Router路由划分,到ECharts K线图组件的实现与数据mock层的设计

weixin_42552410的博客 293

Vue3--Vite和Pinia

这里是vue3.0中pinia和vite的具体应用。

qq_44930306的博客 5902

Java+Vue在线考试系统毕业设计:从环境搭建到防作弊策略

在线考试系统是软件工程中典型的Web应用,其核心在于将传统线下考试流程数字化,涉及高并发处理、数据一致性和系统安全性等关键技术。系统通常采用前后端分离架构,后端使用Spring Boot框架提供RESTful API,前端使用Vue.js构建交互界面,MySQL作为数据持久层。这种架构模式能有效解耦业务逻辑与用户界面,提升开发效率和系统可维护性。在实现层面,需要重点解决用户认证授权、实时数据提交、事务管理以及防止考试作弊等工程问题。例如,通过JWT实现无状态认证,利用防抖技术优化高频答案保存请求,结合切屏检

weixin_34129696的博客 512

项目实战 之 vue3 + vite + pinia

项目实战 之 vue3 + vite + pinia

玄鱼殇 7020

解决‘GLIBC_2.28 not found‘错误:手把手教你升级glibc到最新版(附中文乱码修复)

本文提供了一份详尽的Linux系统glibc升级实战指南,旨在解决常见的'GLIBC_2.28 not found'错误。文章不仅涵盖从风险评估、环境准备到编译安装的完整流程,还特别加入了精简本地化数据以修复中文乱码的实用技巧,帮助管理员和开发者在安全可控的前提下完成系统核心库的升级。

a1b2c3d的博客 1341

别再折腾Windows了!Ubuntu 22.04下USRP X310 + RFNoC + Vivado 2021.1开发环境保姆级搭建指南

本文提供Ubuntu 22.04下USRP X310 + RFNoC + Vivado 2021.1开发环境的详细搭建指南,涵盖系统优化、UHD驱动编译、Vivado配置及硬件验证等关键步骤,帮助射频工程师高效构建稳定的开发环境,显著提升FPGA开发效率。

weixin_29168675的博客 255

Vue3+Vite+Pinia 项目的搭建以及常用方法介绍

Vue3+Vite+Pinia 项目的搭建以及常用方法介绍

专注前端开发领域,深耕 Python AI Agent应用开发,热爱探索 Web 与人工智能的前沿技术。 1332

致远OA公文管理模块相关操作

致远oa协同办公系统 公文管理模板 相关操作

weixin_59666050的博客 4268

vite + vue3 + elementui + pinia搭建

vite + vue3 + elementui + pinia搭建

qq_41465138的博客 1595

innovus:addRepeaterByRule用法

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?addRepeaterByRule不管transition/timing violation,只根据约束的length/cap/fanout等等去给net 插buffer。

m0_61544122的博客 1088

推荐系统[九]项目技术细节讲解z2:搜索Query理解[Term Weight、Query 改写、同义词扩写]和语义召回技术

在 pooling 方法上,我们也尝试过不同层 pooling,或者在多层上增加 attention 聚合 BERT 多层结果,效果和最后一层所有 token 做 average pooling 相当。损失函数方面,在排序阶段使用pairwise比 pointwise 损失函数的效果会更好。

丨汀、的博客 1109

vue3 + ts + vite + pinia + element-plus 项目搭建及报红问题解决(工作笔记二)

摘要:本文详细介绍了如何使用Vite搭建Vue3+TypeScript项目并配置常用插件。内容包括:1)项目初始化及依赖安装;2)vite.config.ts和tsconfig配置;3)集成vue-router路由管理;4)安装Less/Sass预处理器;5)配置Pinia状态管理;6)Element Plus按需自动导入;7)Axios请求封装及接口调用。同时提供了后端Express服务搭建示例,并演示了前后端联调过程。文中还给出了常见报错解决方案,如@types/node安装和VSCode重启修复问题。

weixin_42342855的博客 2136

一文掌握 Playwright 的详细使用

Playwright 是一个功能强大的浏览器自动化工具,适用于网页自动化测试、数据抓取和网页交互。通过掌握其基础用法和高级功能,你可以轻松实现各种浏览器自动化任务。Playwright 支持多浏览器、多语言,并且具有高效的异步操作能力,是现代浏览器自动化的首选工具之一。

数据知道的博客 1万+

Vite+pnpm构建Vue3+TypeScript+vue-class-component+Vue router+pinia+ESLint(prettier)+sass

RT

GIS小虫的博客 3414

ADT MCP Server 把 ABAP 开发带进 Agent 模式

今天讨论 ADT MCP Server,不能只把它看成 Visual Studio Code 里多出来的一个开关。它真正有意思的地方,在于它把 ABAP 后端开发里那些原本需要手工点击、手工创建、手工激活、手工查服务元数据的动作,包装成一组可以被 GitHub Copilot 这类 coding agent 调用的工具。SAP 在 RAP130 练习里把它描述为运行在 ADT for Visual Studio Code 扩展内部的本地 HTTP Server,它实现的是 Model Context Pro

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 181

【2024遥感应用组一等奖】基于时空融合和水量平衡法的若尔盖高原水源涵养功能评价

考虑到水源涵养的概念和尺度特征、数据的可获得性、模型的模拟精度等,构建了一种基于遥感、气象和水量平衡原理的草原湿地水源涵养评价方法,估算若尔盖湿地近23年(2000-2022)来的水源涵养量。若尔盖湿地是我国黄河源区的重要水源地,所以本研究以若尔盖湿地的水源涵养功能评估为科学问题,基于遥感数据、GIS数据等,利用水量平衡原理,发展计算简单、便捷、数据易获取的“水源涵养估算方法”,科学估算若尔盖湿地水源涵养服务量,探究其时空动态变化趋势及其影响因素;公式中,Z1和Z2为两个不同高度面的高度,u为摩擦速率;

JData_Engineer的博客 239

vue3搭建实战项目笔记

Vue3搭建实战项目笔记一

xiaoxiannvh的博客 1281

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

vue3项目搭建

vue3项目搭建

i_am_a_div的博客 1155

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Vue3实战项目搭建:组合式API与组件通信全记录

Vue3已成为现代前端新项目的默认选择,其组合式API与Proxy响应式机制重塑了组件逻辑的组织方式。通过ref、reactive、computed等核心API,开发者能更高效地管理状态与派生数据,而computed的缓存特性则避免了不必要的重复计算。基于Vite的极速构建与Pinia的轻量状态管理,配合Element Plus组件库,可快速搭建后台管理系统骨架。从环境配置到路由布局,再到defineProps/defineEmits实现父子组件通信,这套实践覆盖了日常开发高频场景。理解响应式丢失的边界条件

weixin_30542979的博客 254

day18|前端框架和算法学习

可以讲应用程序的状态保存到本地储存里,在应用程序重启后会保留状态,对于登录等场景很有用。当用户登录成功时:设置userStore中用户的登录状态为已登录,并设置过期时间。int(num1[ i])访问字符串num1中的索引i的字符,将它转化为整数。新建的vite和之前的项目是不一样的,pinia那些包需要重新在终端下载引入。当用户退出登录时:修改userStore用户登录状态为未登录,并删除过期时间。pinia轻量级状态管理库,用于管理应用程序全局状态的工具。“abf”“123”2、简化组件之间的通信。

universe_01的博客 696

创新项目实训开发日志1

核心工作内容:完成基于Vue3 + Vite的前端框架搭建,建立符合团队协作规范的目录结构工作时间:第六周。

c335000的博客 795

前(vue3)后(node.js)端项目实战

前后端项目实战

mygoes 2277

2026山东大学软件学院项目实训个人blog(一)

前端框架的搭建与核心工具库集成,落地前端工程化规范与通用组件封装,为后续业务开发提供稳定、可扩展的开发环境。:Vite 构建时对动态导入模块进行哈希命名,浏览器缓存了旧的模块映射。:遇到路由懒加载、样式污染等问题时,能独立查阅资料并解决。:学会按"页面-组件-状态-接口"分层设计前端架构。:通过统一目录结构和命名规范,降低团队协作成本。实现懒加载,页面刷新后偶现组件加载失败。:开发对话界面,集成 SSE 实时进度推送。构建工具,搭建现代化的前端开发环境。:多个组件使用相同类名,样式相互覆盖。

2301_80377270的博客 588

基于SpringBoot2+Vue3+MyBatis-Plus的车辆管理系统从零搭建实战

在Java Web开发与前端工程化实践中,如何选择一套兼顾开发效率与维护性的技术栈是许多团队面临的现实问题。SpringBoot2凭借对JDK8的良好兼容与稳定生态,成为企业级后端的主流选择;Vue3配合Composition API与Vite构建工具,则显著提升了前端开发体验与构建性能。MyBatis-Plus作为优秀的数据持久层增强框架,通过逻辑删除、自动填充、乐观锁等特性,大幅简化了单表CRUD与并发控制逻辑。结合MySQL8.0的窗口函数与utf8mb4字符集,这套组合可高效支撑车辆管理、调度、维保

weixin_30231327的博客 279

SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0 CRM系统搭建实战

前后端分离架构已成为现代Java Web开发的主流模式,SpringBoot2、Vue3、MyBatis-Plus和MySQL8.0的组合更是构建企业级管理系统的经典技术栈。SpringBoot2提供稳定的服务端能力,Vue3以组合式API提升前端开发效率,MyBatis-Plus简化数据持久层操作,MySQL8.0则带来更强的查询性能和数据管理能力。这套技术体系能够支撑客户关系管理系统的完整业务链路,涵盖客户信息维护、跟进记录、销售机会和权限分配等功能。从数据库设计、接口开发、前端交互到生产部署,其中涉及

weixin_33428613的博客 179

Python Web前端现代化:从Layui重构到Vue3+TypeScript实战

前后端分离已成为现代Web开发的普遍趋势,传统服务端渲染模式在复杂后台系统中逐渐暴露维护成本高、状态管理混乱等问题。Vue3作为渐进式前端框架,配合TypeScript类型系统,为工程化提供坚实基础,尤其适合后端团队平滑过渡。本文从Python Web项目视角出发,结合实际重构案例,详细解析如何将基于Layui的多页面后台改造为Vue3+TypeScript的单页应用(SPA),涵盖工程结构设计、组件复用、接口对接、登录态处理及Nginx部署等关键技术点,并总结踩坑经验,为面临前端技术升级的Python开发

weixin_27943395的博客 225
上一篇: Vite+Vue3+Ts项目搭建
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值