Vue3项目实战:从0到1开发企业级中后台系统(1):颠覆认知!这才是搭建Vue3项目的“正确姿势”

专栏介绍

  • “本专栏将手把手带你实战一个标准的企业级中后台管理系统,你学到的不是零散的知识点,而是一套完整的、可复用的开发流程和解决方案。”
  • “从项目搭建、架构设计到核心业务模块开发,我会分享每一步的最佳实践和十年总结的避坑心得。更重要的是,在专栏最后,我会教你如何从‘程序员’思维转变为‘工程师’思维,抽象封装属于自己的业务组件,这才是你职场进阶的关键。”
  • “无论你是想深入学习Vue3生态,还是渴望在工作中独立承担项目,这个专栏都将为你提供巨大的帮助。”

技术选型

要打造一个企业级项目,选择合适的“装备”至关重要。我们的选择是:

  • 构建工具: Vite (进行项目构建)
  • 语言:TypeScript (开发语言)
  • 样式: less (编写样式 )
  • 状态管理: pinia(vuex的进化版,更简单,更友好)
  • 路由:vue-router(单页应用的导航系统,不可或缺)
  • HTTP客户端:axios (数据请求)
  • 代码规范: CommitLint + ESLint + StyleLint + Prettier + LintStage 进行团队项目规范
  • UI库: ElementPlus 组件库(由饿了么技术团队开发)

基础框架搭建

第一步:初始化package.json

新建一个空文件夹,使用命令工具打开,我是windows系统,使用的是cmd

npm init

在这里插入图片描述

这个命令会在我们的文件夹里生成一个package.json文件,记录项目的基本信息和依赖。

第二步:搭建目录结构

使用vscode打开我们的项目按照下面的目录结构创建好文件结构。一个好的结构就像是好的户型,住起来舒心,改起来顺心!

demo-admin/
    |- mock/        # 数据模拟(前端开发者的"后端替身")
    |- public/      # 静态资源(这里的文件直接躺平,不参加打包)
    |- types/       # TS类型定义(给JavaScript戴上紧箍咒)
    |- src/         # 主要代码区(我们的主战场)
        |- api/           # 接口管理(和后端对接的"外交部")
        |- assets/        # 资源文件(图片、字体等"军火库")
        |- components/    # 通用组件(可复用的"乐高积木")
        |- router/        # 路由管理(网站的"导航系统")
        |- store/         # 状态管理(全局数据的"中央仓库")
        |- styles/        # 样式文件(项目的"美容院")
        |- utils/         # 工具函数(各种"瑞士军刀")
            |- request/   # axios封装(网络请求的"专属司机")
        |- views/         # 页面组件(不同的"房间页面")

在这里插入图片描述

第三步:安装依赖

安装主要依赖,这些都是项目的“基础设施”

npm install axios pinia pinia-plugin-persistedstate vue vue-router

在这里插入图片描述

安装组件库(不需要手动造轮子,直接开干)

npm install element-plus @element-plus/icons-vue

在这里插入图片描述

安装typeScript 和 less,typeScript负责js开发,less负责css开发。

npm install -D typescript less

在这里插入图片描述

依赖介绍

  • vue:一款用于构建用户界面的 JavaScript 框架
  • axios:vue官方推荐http请求库
  • pinia:vue官方推荐状态管理工具
  • pinia-plugin-persistedstate:pinia数据持久化插件
  • vue-router:路由管理工具
  • typescript:使用TS语言
  • less:css预处理
  • element-plus:基于 Vue 3,面向设计师和开发者的组件库

第四步:创建基础文件

index.html

在根目录下创建,是项目的门面,对页面进行基础配置

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" href="/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>vue3中后台企业级解决方案</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.ts"></script>
  </body>
</html>

/src/App.vue

项目的根组件

<template>
  <!-- 路由匹配到的组件将渲染在这里 -->
  <router-view></router-view>
</template>
<script setup></script>

/src/styles/reset.less

css重置,让不同浏览器表现一致,告别兼容性头疼。

html,
body,
p,
ol,
ul,
li,
dl,
dt,
dd,
blockquote,
figure,
fieldset,
legend,
textarea,
pre,
iframe,
hr,
h1,
h2,
h3,
h4,
h5,
h6 {
  margin: 0;
  padding: 0;
}

h1,
h2,
h3,
h4,
h5,
h6 {
  font-size: 100%;
  font-weight: normal;
}

ul {
  list-style: none;
}

button,
input,
select {
  margin: 0;
}

html {
  box-sizing: border-box;
}

*, *::before, *::after {
  box-sizing: inherit;
}

img,
video {
  height: auto;
  max-width: 100%;
}

iframe {
  border: 0;
}

table {
  border-collapse: collapse;
  border-spacing: 0;
}

td,
th {
  padding: 0;
}

/src/main.ts

项目的入口文件

import { createApp } from 'vue';
import App from './App.vue';
import './styles/reset.less';
const app = createApp(App);
app.mount('#app');

/src/views/home/index.vue

创建第一个页面,项目的首页。

<template>
  <div class="hello-world">
    <div class="gradient-text">Welcome to the Vue world</div>
  </div>
</template>
<script lang="ts" setup></script>
<style lang="less" scoped>
.hello-world {
  background-color: #2a2a2a;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  margin: 0;
  font-family: "Arial", sans-serif;
}

.gradient-text {
  width: 100%;
  height: 100vh;
  line-height: 100vh;
  font-size: 68px;
  font-weight: bold;
  text-align: center;
  // background-color: #2a2a2a;
  background: linear-gradient(90deg, #00e6ff, #ffffff);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  border-radius: 5px;
  box-shadow: 0 0 10px rgba(0, 230, 255, 0.5),
    inset 0 0 10px rgba(0, 230, 255, 0.5);
}
</style>

第五步:配置路由

项目的导航系统。

/src/router/index.ts

import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router';
// 配置路由
const routes: Array<RouteRecordRaw> = [{
  path: '/',
  name: 'Home',
  component: () => import('@/views/home/index.vue'),
  meta: {},
  children: [],
}];

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

router.beforeEach(async (_to, _from, next) => {
  next()
});

router.afterEach((_to) => {
  
});

export default router;

在main.ts里引入路由

import { createApp } from 'vue';
import App from './App.vue';
import router from '@/router'; // ++
import './styles/reset.less';
const app = createApp(App);
app.use(router); // ++
app.mount('#app');

第六步:状态管理

项目的中央数据中心。

/src/store/index.ts

import { createPinia } from 'pinia';
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
const pinia = createPinia();
// 使用pinia数据持久化插件
pinia.use(piniaPluginPersistedstate);
export default pinia;

在main.ts中引入状态管理

import { createApp } from 'vue';
import App from './App.vue';
import router from '@/router';
import pinia from '@/store'; // 引入状态管理
import './styles/reset.less';
const app = createApp(App);
app.use(router);
app.use(pinia); // 使用状态管理
app.mount('#app');

第七步:请求管理

/src/utils/request.ts

import axios from 'axios';
import type {
  AxiosInstance,
  AxiosRequestConfig,
  AxiosResponse,
  AxiosError,
  InternalAxiosRequestConfig,
} from 'axios';

const service: AxiosInstance = axios.create({
  baseURL: '/'
    timeout: 15000, // 超时时间(15秒后还没响应就放弃)
  });

// 请求拦截器(发请求前的预处理)
service.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    return config;
  },
  (error: AxiosError) => {
    return Promise.reject(error);
  }
);

// 响应拦截器(收到响应后的“后处理”)
service.interceptors.response.use(
  (response: AxiosResponse) => {
    // 这里可以统一处理响应数据
    return response;
  },
  (error: any) => {
    // 这里可以统一处理错误
    return Promise.reject(error)
  }
);

export default service

总结


🎉 大功告成!我们来盘点一下这一期的"战果"

通过以上七个步骤,我们共同完成了:

本期成果清单

  1. 项目初始化 - 办好了项目的"身份证"(package.json)
  2. 目录架构设计 - 画好了项目的"户型图",建立了清晰有序的文件夹结构
  3. 依赖安装 - 给项目"添置家具",安装了核心依赖和开发工具
  4. 基础文件创建 - 搭好了项目的"骨架",包括HTML入口、根组件、样式重置和首个页面
  5. 路由系统配置 - 安装了项目的"导航系统",支持页面跳转和进度条显示
  6. 状态管理中心建设 - 建立了全局数据的"中央仓库",并配置了数据持久化功能
  7. 网络请求模块封装 - 组建了项目的"后勤部",统一处理所有API请求

下一期预告:让项目跑起来!

现在我们的项目还只是个"静态模型",下篇文章我们将继续配置构建工具,让它跑起来,实现我们的第一个Hello World!敬请期待《前端场景实战(2):10分钟上手!用Vite从0到1搭建你的第一个企业级项目》

P.S. 记得动手实践一下哦,光看不练假把式!遇到问题欢迎在评论区留言或文章末尾右下角联系哦~

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sherry Tian

打赏1元鼓励作者

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值