Vue3项目实战:从0到1开发企业级中后台系统(2):10分钟上手!用Vite从0到1搭建你的第一个企业级项目

专栏介绍

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

技术选型

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

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

构建配置:让项目能够跑起来

第一步:安装依赖

组装我们的"工具包"

# 安装Vite和Vue插件
npm install -D vite @vitejs/plugin-vue @vitejs/plugin-vue-jsx

# 安装TypeScript相关依赖
npm install -D @types/node @types/nprogress vue-tsc

依赖介绍

vite
  • 作用:Vite 是一个现代化的前端构建工具,由 Vue 作者尤雨溪开发。
  • 特点
    • 开发时基于浏览器原生 ES 模块导入,启动速度快,热更新(HMR)极快。
    • 生产环境使用 Rollup 打包。
    • 支持 Vue、React、Svelte 等框架。
  • 使用场景:替代 Webpack,用于开发和构建前端项目。

📌 简单说:它是你项目的“开发服务器 + 构建工具”。


@vitejs/plugin-vue
  • 作用:为 Vite 提供对 .vue 单文件组件(SFC)的支持。
  • 功能
    • 解析 <template><script><style> 块。
    • 支持 Vue 的编译时特性(如 definePropsdefineEmits 等)。
    • 支持 HMR(热模块替换)。
  • 必须安装:如果你的项目使用 .vue 文件,这个插件是必需的。

📌 相当于 “Vite 如何理解 .vue 文件”的桥梁。


@vitejs/plugin-vue-jsx
  • 作用:为 Vite 提供对 Vue 中使用 JSX/TSX 语法的支持。
  • 功能
    • 允许你在 .tsx.jsx 文件中写 Vue 组件。
    • 支持 h()createVNode 等 JSX 渲染方式。
  • 使用场景
    • 你使用 render 函数或 JSX 写组件。
    • 一些库(如组件库)常用 JSX 来构建复杂逻辑。

📌 如果你不用 JSX,可以不装;如果用,就必须装。


@types/node
  • 作用:为 Node.js 提供 TypeScript 类型定义。
  • 为什么需要
    • 如果你的项目中有 .ts 文件使用了 Node.js 的 API(如 process.envrequire__dirname 等),TypeScript 需要知道这些全局变量的类型。
    • 常用于 vite.config.tsnuxt.config.tsserver 端代码等。
  • 注意:仅在开发时需要(-D),因为类型定义不打包到生产环境。

📌 没它,TS 会报错:Cannot find name 'process'


@types/nprogress
  • 作用:为 nprogress(一个轻量级页面加载进度条库)提供 TypeScript 类型支持。
  • 使用场景
    • 你在项目中使用了 nprogress,例如:
      import NProgress from 'nprogress'
      NProgress.start()
      
    • 安装类型后,TS 才能识别 NProgress 的方法和属性,提供自动补全和类型检查。

vue-tsc
  • 作用:Vue 的 TypeScript 类型检查工具,相当于 Vue 版的 tsc(TypeScript Compiler)。
  • 功能
    • 检查 .vue 文件中的 <script> 块的 TypeScript 类型。
    • 支持生成 .d.ts 类型声明文件(用于发布组件库)。
    • 在构建或 CI/CD 中进行类型检查。
  • 常见用途
    • vue-tsc --noEmit:只做类型检查,不输出文件(用于 CI)。
    • vue-tsc --emitDeclarationOnly:生成 .d.ts 文件(用于发布 npm 包)。

📌 相当于 “让 TypeScript 能看懂 .vue 文件里的 TS 代码”。


第二步:设置环境变量

根目录创建环境变量文件,就像给项目设置不同的"工作模式":

.env - 全局通用配置(所有环境都会加载)
# axios请求的 baseURL
VITE_APP_API_BASEURL = /api
.env.production - 生产环境配置(上线时启用)

npm run build时加载这个文件的配置

VITE_APP_API_BASEURL = /api
.env.development - 开发环境配置(本地开发时启用)

npm run dev时加载这个文件的配置

VITE_APP_API_BASEURL = /api

🚨 重要提醒:环境变量名必须用VITE_开头,这是Vite的"暗号",不然它可不认哦!

第三步:环境变量类型声明

/types/env.d.ts

/// <reference types="vite/client" />

interface ImportMetaEnv {
  // 我们每次添加完新的环境变量就在此添加一次ts类型
  // 这样我们就能在使用 import.meta.env 时获得ts语法提示
  readonly VITE_APP_API_BASEURL: string;
}

interface ImportMeta {
  readonly env: ImportMetaEnv;
}

这样配置后,你在代码中使用import.meta.env时就会有智能提示了,再也不用担心拼写错误!

第四步:Vite配置文件

在根目录创建vite.config.ts

import { defineConfig, loadEnv } from 'vite';
import type { UserConfig, ConfigEnv } from 'vite';
import { fileURLToPath } from 'url';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';

export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
  // 获取当前工作目录
  const root = process.cwd();
  // 获取环境变量
  const env = loadEnv(mode, root);
  return {
    // 项目根目录 
    root,
    // 项目部署的基础路径
    base: '/',
    publicDir: fileURLToPath(new URL('./public', import.meta.url)), // 无需处理的静态资源位置
    assetsInclude: fileURLToPath(new URL('./src/assets', import.meta.url)), // 需要处理的静态资源位置
    plugins: [
      // Vue模板文件编译插件
      vue(),
      // jsx文件编译插件
      vueJsx(),
    ],
    // 运行后本地预览的服务器
    server: {
      // 是否开启https
      https: false,
      // 指定服务器应该监听哪个 IP 地址。 如果将此设置为 0.0.0.0 或者 true 将监听所有地址,包括局域网和公网地址。
      host: true,
      // 开发环境预览服务器端口
      port: 3000,
      // 启动后是否自动打开浏览器
      open: false,
      // 是否开启CORS跨域
      cors: true,
      // 代理服务器
      // 帮助我们开发时解决跨域问题
      proxy: {
        // 这里的意思是 以/api开头发送的请求都会被转发到 http://xxx:3000
        '/api': {
          target: 'http://xxx:9000',
          // 改变 Host Header
          changeOrigin: true,
          // 发起请求时将 '/api' 替换为 ''
          rewrite: (path) => path.replace(/^\/api/, ''),
        },
      },
    },
    // 打包配置
    build: {
      // 关闭 sorcemap 报错不会映射到源码
      sourcemap: false,
      // 打包大小超出 400kb 提示警告
      chunkSizeWarningLimit: 400,
      rollupOptions: {
        // 打包入口文件 根目录下的 index.html
        // 也就是项目从哪个文件开始打包
        input: {
          index: fileURLToPath(new URL('./index.html', import.meta.url)),
        },
        // 静态资源分类打包
        output: {
          format: 'esm',
          chunkFileNames: 'static/js/[name]-[hash].js',
          entryFileNames: 'static/js/[name]-[hash].js',
          assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
        },
      },
    },
    // 配置别名
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url)),
        '#': fileURLToPath(new URL('./types', import.meta.url)),
      },
    },
  };
});

这个配置文件就像项目的"大脑",控制了构建、开发服务器、打包等所有行为。

第五步:TypeScript配置

在根目录创建tsconfig.json

{
    "compilerOptions": {
        // 编译出JS的目标ES版本
        "target": "esnext",
        // 使用的ES版本
        "module": "esnext",
        "allowJs": false,
        // 用于选择模块解析策略,有'node'和'classic'两种类型
        "moduleResolution": "node",
        // 开启严格模式
        "strict": true,
        // 强制代码中使用的模块文件名必须和文件系统中的文件名保持大小写一致
        "forceConsistentCasingInFileNames": true,
        // 允许使用 xxx 代替 * as xxx 导入
        "allowSyntheticDefaultImports": true,
        // 指定 jsx 代码的生成: 'preserve', 'react-native', or 'react'
        "jsx": "preserve",
        // 用来指定编译时是否生成.map文件
        "sourceMap": true,
        // 通过为导入内容创建命名空间,实现CommonJS和ES模块之间的互操作性
        "esModuleInterop": true,
        // 是否可以导入 json module
        "resolveJsonModule": true,
        // 是否检测定义了但是没使用的变量
        "noUnusedLocals": true,
        // 是否检查是否有在函数体中没有使用的参数
        "noUnusedParameters": true,
        // 是否启用实验性的装饰器特性
        "experimentalDecorators": true,
        // ts中可以使用的库 这里配置为 dom 与 es模块
        "lib": [
            "dom",
            "esnext"
        ],
        // 不允许变量或函数参数具有隐式any类型
        "noImplicitAny": false,
        // 启用阻止对下载库的类型检查
        "skipLibCheck": true,
        // types用来指定需要包含的模块
        "types": [
            "vite/client",
            "element-plus/global"
        ],
        // 编译的时候删除注释
        "removeComments": true,
        // 使用绝对路径时使用baseUrl去解析导入路径
        "baseUrl": ".",
        // 为导入路径配置别名
        "paths": {
            "@/*": [
                "src/*"
            ],
            "#/*": [
                "types/*"
            ]
        },
        // 配置虚拟目录
        "rootDirs": []
    },
    // 指定需要编译文件
    "include": [
        "src/**/*.ts",
        "src/**/*.d.ts",
        "src/**/*.tsx",
        "src/**/*.vue",
        "types/**/*.d.ts",
        "types/**/*.ts",
        "build/**/*.ts",
        "build/**/*.d.ts",
        "mock/**/*.ts",
        "vite.config.ts"
    ],
    // 指定不需要编译的文件
    "exclude": [
        "node_modules",
        "dist",
        "**/*.js"
    ]
}

这个配置文件告诉TypeScript如何理解你的代码,就像给JS戴上了"智能眼镜"。

第六步:指令配置

在package.json中添加脚本命令:

"scripts": {
   "dev": "vite --mode development",
   "build": "vite build --mode production"
}

现在你可以通过简单的命令来控制项目了!

第七步:启动项目

# 启动开发服务器
npm run dev

在这里插入图片描述
在浏览器里输入localhost:3000/将会看到下面这个页面
在这里插入图片描述

如果一切顺利,你会看到Vite快速启动,并在浏览器中打开你的项目。

项目打包

# 构建生产版本
npm run build

执行这个命令后,Vite会把你的代码优化、压缩,准备好上传到服务器。


🎉 恭喜!你已经成功配置了一个企业级的Vite + Vue3 + TypeScript项目!

这就像组装好了一辆高性能跑车的所有部件,现在只差点火启动了。到这里,这个项目已经能够真正"跑起来了"。

记得动手实践一下哦,光看不练假把式!遇到问题欢迎在评论区留言或文章末尾右下角联系哦!备注"csdn"免费答疑~

【四旋翼无人机】具备螺旋桨倾斜机构的全驱动四旋翼无人机:建模与控制研究(Matlab代码、Simulink仿真实现)内容概要:本文围绕具备螺旋桨倾斜机构的全驱动四旋翼无人机展开研究,重点探讨其系统建模与控制策略,结合Matlab代码与Simulink仿真实现。文章详细分析了无人机的动力学模型,特别是引入螺旋桨倾斜机构后带来的全驱动特性,使其在姿态与位置控制上具备更强的机动性与自由度。研究涵盖了非线性系统建模、控制器设计(如PID、MPC、非线性控制等)、仿真验证及动态响应分析,旨在提升无人机在复杂环境下的稳定性和控制精度。同时,文中提供的Matlab/Simulink资源便于读者复现实验并进一步优化控制算法。; 适合人群:具备一定控制理论基础和Matlab/Simulink仿真经验的研究生、科研人员及无人机控制系统开发工程师,尤其适合从事飞行器建模与先进控制算法研究的专业人员。; 使用场景及目标:①用于全驱动四旋翼无人机的动力学建模与仿真平台搭建;②研究先进控制算法(如模型预测控制、非线性控制)在无人机系统中的应用;③支持科研论文复现、课程设计或毕业课题开发,推动无人机高机动控制技术的研究进展。; 阅读建议:建议读者结合文档提供的Matlab代码与Simulink模型,逐步实现建模与控制算法,重点关注坐标系定义、力矩分配逻辑及控制闭环的设计细节,同时可通过修改参数和添加扰动来验证系统的鲁棒性与适应性。
评论
成就一亿技术人!
拼手气红包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、付费专栏及课程。

余额充值