2022年11月,折腾了一早上,才用vite搭好了vue2项目,踩的坑,全记在了这篇实战里,看完,能帮你省下半天时间。

初始化项目选对版本是关键

npm init vite@2.8.0

很多人通过直接运用vite create vue来创建项目,所得到的是vue3版本,若想搭建vue2则必须转换思路。在我实际进行操作时,所使用的是vite 2.8.0版本,借助npm create vite@2.8.0 my-project -- --template vanilla来创建原生项目。在此特别需要提醒的是,并非要去追逐最新版vite,因为我曾尝试使用新版进行创建,结果后续配置出现报错,致使困扰了我二十分钟。

编程入门Vite_vite创建vue2项目教程_vite搭建vue2项目实战过程

// 1.进入项目
cd vite-vue2
// 2.安装依赖
npm install
// 3.启动项目
npm run dev

项目骨架生成完毕后,首要之事便是对结构予以调整,于根目录构建src文件夹,之后将main.js移入其中,index.html需对入口文件路径加以修改,把script标签的src指向/src/main.js,完成这一步骤后,项目的基础架子已然搭建妥当,前前后后总共耗费了不到五分钟的时间。

vite搭建vue2项目实战过程_编程入门Vite_vite创建vue2项目教程

插件安装与版本锁定不能马虎

// 注意:vite-plugin-vue2的版本为1.9.3
npm install vite-plugin-vue2@1.9.3 -D

构建工具vite针对vue2的支持,完全依赖于@vitejs/plugin-vue2此插件。npm install @vitejs/plugin-vue2 -D乃是其安装指令。完成安装后,于根目录创建vite.config.js文件,录入import { defineConfig } from 'vite',以及import vue from '@vitejs/plugin-vue2',随后凭借plugins: [vue()]进行注册。

import { defineConfig } from 'vite' // 动态配置函数
import { createVuePlugin } from 'vite-plugin-vue2'
import { resolve } from 'path'
export default () =>
	defineConfig({
		plugins: [createVuePlugin()],
		server: {
			open: true, //自动打开浏览器
			port: 1567 //端口号
		},
		resolve: {
            // 别名
			alias: [
				{
					find: '@',
					replacement: '/src'
				}
			]
		}
	})

当时我没指定版本直接用npm install vue命令,结果给我安装了vue3.2.0,导致使用该版本npm install vue必须将版本锁定在2.x才能让项目正常运行,不然项目跑起来就都会出现报错。正确的做法是使用npm install vue@2.6.14进行安装。建议安装完成后立刻检查package.json,要保证vue版本是以2开头,否则之后回头排查问题会非常费劲。

npm install vue@2.x vue-template-compiler@2.x -S	

路由配置分模块管理更清晰

import Vue from 'vue'
import App from './App.vue'
new Vue({
	render: h => h(App)
}).$mount('#app')

需要在安装vue-router时指定版本,即通过命令npm install vue-router@3.5.2 -S来进行安装。vue2所对应的是路由3.x版本,要是安装成4.x版本就会直接出现报错情况。要在src下面创建router文件夹,在该文件夹里面放置index.js作为主入口。秉持习惯上的做法,会将路由表进行拆分放置,创建modules文件夹,其中home.js和user.js各自管理一部分,最终借助concat进行合并导出。

// index.html
  

将页面组件放置于views目录之中,举例而言,构建views/home/Index.vue,撰写一个最为简单的template用以进行测试,在main.js里引入路由,即import router from './router',接着运用Vue.use(router),于App.vue里添加router-view标签,当这一系列流程全部完成之后,页面跳转便畅通无阻了。

  
Hello Vite Vue2

状态管理按需引入不臃肿

npm run dev

按照同样的锁版本方式安装vuex:通过npm install vuex@3.6 .2 -S来进行。对于小项目而言实际上是可以不使用的,但是我这个用于练习的项目随后存在组件通信方面的需求,所以还是将其添加进去了。在src下面创建store目录,在index.js里面写入Vue.use(Vuex),接着export default new Vuex.Store({}),先在state中放置若干测试数据。

vite搭建vue2项目实战过程_vite创建vue2项目教程_编程入门Vite

在main.js之中导入store,而后将其挂载到根实例之上,如此一来所有组件均可通过this.$store进行访问,vuex配置自身并不复杂,十分钟便能够完成搞定,要是项目规模较小,建议评估一下是否真的存在必要,以此避免代码出现臃肿情况。

npm install vue-router@3.5.2 -S

组件库按需引入节省体积

源于ant - design - vue 1.x版本具备与vue2的兼容性,其安装命令为npm install ant - design - vue@1.7.8,官方文档表明进行按需引入时需配置babel - plugin - import,然而经本人一番折腾后发觉在vite环境下无需如此繁琐,可直接于src目录下创建plugin/antd.js文件,在其中按需import所需组件,诸如Button、Table等,随后通过Vue.component进行注册。

// /src/router/module/home.js
export const home = [
	{
		path: '/home',
		meta: { title: '首页' },
		component: () => import('@/views/home/Index.vue')
	}
]

在main.js之中,通过import './plugin/antd'这种操作,便达成了全局注册的相关事宜。于页面里面,直接书写a-button就能够予以使用该功能了。一旦进行按需引入的操作,那么打包体积会显著减小,经过实际测量,从原本的1.2MB下降至大约800KB的程度。在组件库这一方面,投入的时间是最长的,原因是网络上的资料大部分呈现的是vue3+vite的配置方式这个情况。

// /src/router/module/index.js
import { home } from './home'
export const module = [...home]

网络请求封装统一管理接口

// /src/router下index.js
import { module } from './module/index'
import VueRouter from 'vue-router'
import Vue from 'vue'
// 使用VueRouter
Vue.use(VueRouter)
const routes = [
	...module
]
const router = new VueRouter({
	mode: 'history',
	base: '/',
	routes
})
export default router

Axios进行安装时,采取使用npm install axios的方式。于src范围内创建http目录,将request.js用于开展基础配置。设置baseURL,设定超时时间,在请求拦截器中添加token,并针对响应拦截器处理错误码。此后按照业务模块来拆分接口文件,像是在home.js当中export各个API函数。

  
Home

调用页面时,从'@/http/home'导入{getUserInfo},通过async await获取数据。封装之后,代码变得整洁许多,更改接口域名之地需要更改一处。我习惯为每个接口单独try catch,如此错误提示更加精准。完成这一步后,整个项目的工程化骨架便完整了。

搭建老项目使用vite之际,你所遇到格外头疼的兼容性问题究竟是什么呢?欢迎于评论区去分享个人的踩坑经历,若感觉文章具备用处,那就点出一个赞来进行支持一番。

import Vue from 'vue'
import App from './App.vue'
import router from './router/index.js'
 
new Vue({
  router,
  render: h => h(App)
}).$mount('#app')