【从零到一手撕脚手架 | 第一节】配置基础项目结构 Vite + TypeScrpit + Vue3 初始化项目
【从零到一手撕脚手架 | 第一节】配置基础项目结构 Vite + TypeScrpit + Vue3 初始化项目
hello大家好我是雪人⛄,不知不觉断更好久了😄,经过了长时间的学习,终于踏入了前端工程化的大门,大家再日常开发中总是会用到一个开发工具:脚手架,大家在使用其他人的脚手架或者一些官方脚手架的时候,可能只懂得使用并不懂得如何实现,看到一些代码只是知其然不知其所以然,今天为大家带来一套教程,教大家入门“脚手架”,相信你一定会有所收获。
- GitHub:LonelySnowman/sv3-template
- 官方文档:SV3-Family | Vue3
- 前置知识:Vue全家桶,了解Vite或WebPack等构建工具,Node.js
- 您将收获到:从零到一构建一个规范的 Vue3+TS+Vite 脚手架
项目使用的依赖:
- 使用 Vite 进行项目构建
- 使用 TypeScript
- 使用 Sass 编写样式
- 对 pinia,vue-router,axios 进行模块化封装
- 使用 CommitLint,ESLint,StyleLint,Prettier,LintStage 进行团队项目规范
- 使用 Mock.js 模拟数据,使用 plop 快速生成开发模板
- 使用 ElementPlus 组件库
确定项目目录结构
- 首先列出目录结构,大家根据目录结构直接创建目录即可,后续会给大家详解这些目录。
下面是我学习到的一些项目目录结构,大家可以参考,学习完毕后可以根据自己的习惯进行更改。
1 | sv3-template/ |
- 接下来讲解一个基本的Vue3脚手架需要具备哪功能
Vue3全家桶
- 我们既然要开发Vue项目,Vue全家桶当然是最重要的,使用pinia进行状态管理,使用vue-router进行路由管理,axios进行http请求等等。
- 下面会讲解全家桶的安装与基础配置,模块化的封装将会在下一节讲解。
安装依赖
- 这里我推荐大家使用pnpm进行依赖管理,pnpm的优点大家可在网上查阅,这里就不进行概述了。
1 | pnpm install axios pinia pinia-plugin-persistedstate vue vue-router nprogress |
下面简单介绍一下这些依赖的作用,大家根据个人习惯选择安装即可。
- vue:(⊙﹏⊙)这个应该不用多说
- axios:vue官方推荐http请求库
- pinia:vue官方推荐状态管理工具
- pinia-plugin-persistedstate:pinia数据持久化插件
- vue-router:路由管理工具
- typescript:使用TS语言
- sass:css预处理
- element-plus:亲民老牌组件库
- nprogres:简洁美观的进度加载条组件
首先应该搭建一个基础的Vue项目结构
- 新建以下目录
1 | sv3-template/ |
vue
index.html
- 对页面进行基础配置
1 |
|
/src/App.vue
- 编写项目的主组件
1 | <template> |
/src/styles/_reset.scss
_reset.scss
是进行一个对基础HTML默认样式的重置- 这部分也是根据个人习惯配置即可
- 这里引用一个开源项目:minireset.css
1 | html, |
/src/main.ts
- 引入样式文件,挂载Vue
1 | import { createApp } from 'vue'; |
/views/xxx.vue
创建页面结构
1 | views/ |
我们这里可以随便写一个简单的组件
1 | <template> |
vue-router
- 然后我们需要进行对路由的配置
/src/router/index.ts
- 这里路径中用到了
@
是我们配置的别名,指向了src,在后面会讲解到如何配置
1 | import { createRouter, createWebHashHistory, RouteRecordRaw, RouteRecordRaw } from 'vue-router'; |
/src/main.ts
- 在main.ts中,令app使用router插件
1 | import { createApp } from 'vue'; |
pinia
/src/store/index.ts
1 | import { createPinia } from 'pinia'; |
/src/main.ts
- 在main.ts中,令app使用store插件
1 | import { createApp } from 'vue'; |
axios
/src/utils/http/index.ts
1 | import axios from 'axios'; |
构建工具
- 我们已经将vue3的基础项目结构搭建完毕,那么我们怎么才能让这个项目跑起来呢?
- 因为浏览器是不能识别Vue,TS,Sass这些语言的,所以我们需要一个工具将它们转变成浏览器可以识别的语言:Html,CSS,JS。Vite就可以做到这些事情,接下来教大家配置Vite帮助我们构建项目。
安装依赖
1 | pnpm install -D vite @vitejs/plugin-vue @vitejs/plugin-vue-jsx |
- vite:项目构建工具
- @vitejs/plugin-vue:使vite能够编译vue组件
- @vitejs/plugin-vue-jsx:使vite能够编译jsx组件
- @types/node:node类型包,使ts支持node
- @types/nprogress:nprogress的类型支持
- vue-tsc:vue文件的类型检查工具
vite环境变量
Vite官方文档对环境变量的介绍:环境变量和模式 | Vite 官方中文文档 (vitejs.dev)
- Vite 在一个特殊的
import.meta.env
对象上暴露环境变量。 - 我们为了配置方便,可以将一些配置项写在环境变量中。
我们在项目根目录下新建三个文件:.env
,.env.production
,.env.development
- .env:所有情况下都会加载
- .env.[mode]:只在指定模式下加载
npm run dev 会加载 .env 和 .env.development 内的配置
npm run build 会加载 .env 和 .env.production 内的配置
mode 可以通过命令行 –mode 选项来重写。
.env
- 注意:环境变量名称必须与VITE作为前缀,前缀可以在Vite配置中修改
1 | # axios请求的 baseURL |
- 剩下的
.env.[mode]
之后会介绍到,这里我们就先配置这一项即可
/src/utils/http/index.ts
1 | const service: AxiosInstance = axios.create({ |
环境变量类型支持
我们在开发过程中,环境变量可能会越来越多,我们可能想要获得智能的TypeScript语法提示来让我们知道有哪些环境变量。
在项目根目录下新建types
文件夹
/types/env.d.ts
1 | /// <reference types="vite/client" /> |
vite配置文件
vite.config.ts
- 在项目根目录下创建
vite.config.ts
文件 - 下面的配置项的解释均已注释
- 官网有更加详细的配置介绍:配置 Vite | Vite 官方中文文档 (vitejs.dev)
1 | import { defineConfig, loadEnv } from 'vite'; |
ts配置文件
- 项目根目录下新建
tsconfig.json
/tsconfig.json
1 | { |
指令配置
- 最后我们将构建指令加入 package.json中
/package.json
1 | "scripts": { |
结语
接下来我们就可以运行项目吧项目跑起来啦!
1 | pnpm run dev |
一个基础的 Vue3+TypeScrpit+Vite 的项目就此构造完毕!
系列文章:
- 【从零到一手撕脚手架 | 第一节】配置基础项目结构 Vite + TypeScrpit + Vue3 初始化项目
- 【从零到一手撕脚手架 | 第二节】模块化封装 降低耦合度 封装 axios pinia router
- 【从零到一手撕脚手架 | 第三节】项目集成CommitLInt+ESLint+Prettier+StyleLint+LintStaged
- 【从零到一手撕脚手架 | 第四节】加速开发效率 使用plop生成开发模板 使用mock进行数据模拟
- 【从零到一手撕脚手架 | 第五节】自定义命令行下载cli工具
参考学习项目:
如果有任何不正确的地方请指正,我会及时更改。
更文不易,如果对你有帮助的话,请给我点个赞吧👍
关注我,后续文章不迷路⛄