Vue.js是用于构建用户界面的JS框架
Vue核心库只关注图层,同时易于与其他库或已有项目整合,另一方面,Vue能驱动Vue生态系统下的单文件组件或复杂的单页应用。
此外,还可以集成mpvue、uni-app、vue-mini等框架,开发者可以利用Vue的语法与组件化思想来开发小程序。
Vue Cli的安装与配置
使用全局构建版本
所有顶层API都以属性的形式暴露在全局Vue对象上
1 | <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script> |
直接下载并用 <script> 引用,Vue会被注册为一个全局变量
通过CDN使用Vue
借助 <script> 标签,可以使用任何提供 npm 包服务的 CDN,例如 jsdelivr 或 cdnjs。
- 不涉及“构建步骤”
- 但无法使用单文件组件语法
1 | 对于制作原型或学习,可以这样使用最新版本: |
启用import maps
可以使用导入映射表 (Import Maps) 来告诉浏览器如何定位到导入的 vue
1 | <script type="importmap"> |
使用npm安装
安装webpack模块
Webpack是一个打包工具,将前端所有资源文件(js/json/css/img/less/…)当做模块处理,根据模块的依赖关系进行静态分析,生成对应的静态资源
1 | npm webpack -v |
webpack 4x以上,webpack将命令相关的内容都放到了webpack-cli,所以还需要安装webpack-cli
1 | npm install webpack-cli -g |
安装VueCli
Vue CLI 是一个基于 Vue.js 进行前端快速开发的脚手架
1 | 打开终端 |
安装vue-router V4
Vue.js的官方路由管理器,负责管理 页面跳转 ,用户在不同视图间切换时,无需刷新整个页面
1 | npm install vue-router@4 -g |
使用create-vue这个脚手架,能创建一个基于Vite的项目,并包含加入Vue Router的选项
1 | npm create vue@latest |
使用包管理器的项目通常会使用 ES 模块来访问 Vue Router,例如 import { createRouter } from 'vue-router'。
卸载
vue 或 vue-cli 的卸载
1 | npm uninstall vue-cli -g(3.0以下版本卸载) |
卸载本地的webpack-cli
1 | npm uninstall -g webpack-cli |
创建Vue项目
基于webpack创建vue项目
前提条件:
- npm install —save-dev webpack
- npm install vue
- npm install @vue/cli –g
在工作路径下,打开终端,否则,项目默认会创建到 C:\Users\Administrator
1 | vue 2.0 |
当 Typescript与Router同时选中,会出现问题
1
2 TS7016: Could not find a declaration file for module 'vue-router'. 'E:/web/test/vue3webpack/node_modules/vue-router/index.js' implicitly has an 'any' type.
Try `npm i --save-dev @types/vue-router` if it exists or add a new declaration (.d.ts) file containing `declare module 'vue-router';`解决方案:
在 /path/to/project/src/shims-vue.d.ts 中,添加
1 declare module 'vue-router';在 /path/to/project/src/router/index.ts 中添加
1 type RouteRecordRaw = typeof RouteRecordRaw
运行项目
1 | npm run server |
在本地浏览器,http://localhost:8080/
项目结构
1 | │ |
- index.html:如果是一级页面模板的话,App.vue就是二级页面模板。所有的其他Vue.js页面都作为该模板的一部分被渲染出来。
- main.js:没有实际的业务逻辑,而是为了支撑整个Vue.js框架,作为程序的入口存在。
- dist:项目构建打包后的默认输出目录
通过create-vue创建vue项目
进入工作路径
1 | 安装并执行 create-vue |
初始化完成后,执行
1 | npm install |
启动服务
1 | npm run dev |
请注意,生成项目中的示例组件,使用的是组合式 API 和 <script setup>,而非选项式 API。
当你准备将应用发布到生产环境时,请运行:npm run build
- 此命令会在 ./dist 文件夹中为你的应用创建一个生产环境的构建版本。
搭建一个Vite+vue项目
1 | npm 6.x |
1 | E:\web\test>npm create vite@latest vuevite -- --vue |
vite+vue项目结构
1 | ├── .vscode |
dist:项目构建打包后的默认输出目录。
index.html 与项目根目录,在一个 Vite 项目中,index.html 在项目最外层而不是在 public 文件夹内。这是有意而为之的:在开发期间 Vite 是一个服务器,而 index.html 是该 Vite 项目的入口文件。
Vite 将 index.html 视为源码和模块图的一部分。Vite 解析
<script type="module" src="...">(指向 JS 源码)。此外,内联引入 JS 的<script type="module">和引用 CSS 的<link href>也能利用 Vite 解析。另外,index.html 中的 URL 将被自动转换,不再需要%PUBLIC_URL%占位符。
与静态 HTTP 服务器类似,Vite 也有 “根目录” 的概念,即服务文件的位置,以 <root> 代称。源码中的绝对 URL 路径将以项目的 “根” 作为基础来解析,因此可以像在普通的静态文件服务器上一样编写代码
Vite 也支持多个 .html 作入口点的 多页面应用模式。
Vite.config.ts配置
- 配置和pinia,router,axios,ref,reactive引入等等
- 配置代理
- 配置.ts,.vue,.tsx等等文件别名
- 配置antdV按需加载
- 配置antdV主题色+全局引入less+全局颜色变量
- 配置vue使用tsx写法
- 配置测试环境保留打印
1 | import { defineConfig, loadEnv } from 'vite' |
vite与webpack创建项目的区别
| 工具 | 底层机制 |
|---|---|
| Webpack | 基于webpack 5的完整配置 |
| Vite | 基于原生ESM的极速开发服务器 |
核心架构差异
Webpack(Vue Cli)
- 开发时:打包所有模块(Node.js)->生成bundle->浏览器加载
- 热更新:重新编译修改的模块->替换bundle即可
- 启动时间:随着项目增大而显著增加
- 冷启动:需要打包整个应用
Vite
- 开发时:基于原生 ES Module,无需打包,浏览器直接按需加载模块
- 热更新:毫秒级响应
- 启动时间:几乎恒定,与项目大小无关
- 立即启动,按需变异,
特性对比
| 特性 | Webpack (Vue CLI) | Vite |
|---|---|---|
| 启动速度 | 慢(需打包整个应用) | ⚡ 极快(原生 ESM,毫秒级) |
| 热更新 (HMR) | 较慢(重新编译 bundle) | ⚡ 极快(模块级别精准更新) |
| 生产构建 | 成熟优化,代码分割完善 | 基于 Rollup,输出更高效 |
| 配置复杂度 | 复杂,需要理解 loader/plugin | 极简,约定优于配置 |
| 生态兼容性 | 极其丰富,10年积累 | 快速增长,现代库优先支持 |
| 浏览器支持 | 支持 IE11(需配置) | 仅支持现代浏览器(ESM) |
| TypeScript | 需配置 ts-loader | 原生支持,开箱即用 |
| CSS 处理 | 需配置 css-loader 等 | 内置 PostCSS、CSS Modules |
| 静态资源 | 需配置 file-loader/url-loader | 内置支持,直接引用 |
| SSR 支持 | 较复杂 | 原生支持,配置简单 |
| 库模式 | 可配置 | 内置 build.lib 配置 |
创建基于TypeScript的Vue3项目
要使用TypeScript开发Vue3的代码,所以不能直接使用Vue2、Vue3默认模版创建,所以选择初始化项目时,需要选择第三项 [Manually select features]
1 | vue create [项目名] |
选择TypeScript特性后,回车进入下一层选择
1 | Vue CLI v5.0.8 |
增加typescript
1 | vue add typescript |
Vue目录结构
1 | Vue开发实践之目录结构 |
public :静态资源目录,不会被编译,直接复制到编译输出目录
assets:全局资源目录,存放源码中用到的静态资源,会和源码一起被编译
components:项目通用组件目录
1 | components/ |
- 一个组件一个目录,方便后期迁移,独立成一套业务UI组件库
layouts:布局组件目录
1 | layouts/ |
mocks:本地模拟数据的目录
1 | mocks/ |
store:vues目录,推荐的目录形式
1 | store/ |
services:项目的数据请求目录,api从项目中移除,如果后端提供了swagger文档,将使用pont自动生成JS代码
1 | ├── services/ # 全局数据请求 |
router:vue-router 目录,推荐的目录形式如下
1 | router/ |
main.js:项目的入口文件,用于对应用进行全局配置
.env:环境变量文件,详见 模式和环境变量
.browserslistrc:在不同前端工具之间共享目标浏览器和 Node.js 版本的配置。
.editorconfig:统一编辑器的缩进等配置
.prettierrc:代码美化工具
.eslintrc.js:代码检查工具
babel.config.js:语法转换工具,将最新的 JS API 降级为低版本浏览器兼容的代码
vue.config.js:CLI 配置文件
jsconfig.json:VSCode 支持的配置文件,和 tsconfig.json 互斥
tsconfig.json:VSCode 支持的配置文件,和 jsconfig.json 互斥
package.json:Node 项目的清单文件
Vue组件的创建与使用
在Vue项目中,通过.vue文件来定义组件
一个组件通常包含模块(template)、脚本(script)和样式(style)三部分。
1 | <!--脚本--> |
通过 <template> 标签中的 <component-name> 来引用该组件
1 | <script setup lang="ts"> |