当前位置:首页 > 技术分析 > 正文内容

基于Vue3做了个管理后台,分享一下碰到的坑(一)

ruisui883个月前 (02-03)技术分析19

之前因为一个项目的原因,接触了Vue+ElementUI,通过已有的脚手架结构搭建了一个管理后台的前端程序。这次又有一个外包的项目需要一个管理后台,本着学习的态度,我打算不用脚手架直接从零开始搭建一个管理后台的框架,不单便于在过程中熟悉整个框架所需的一些库的应用,也同时可以结合自己的功能,便于之后再复用的时候可以得心应手一些。

这次既然打算直接从零开始,也就不再重新造轮子了,之前使用的vue-element-admin还是蛮不错的,不过是基于Vue2的,那么这次就直接用Vue3来作为整体的基础,虽然都是Vue而且很多机制还是类似,但是Vue2和Vue3还是有不少不同的地方的,因为之前Vue2的经验,在这次直接使用Vue3的过程中还是碰到了一些坑,接下来会说。至于样式,这次还是使用了Element-UI,不过因为要支持Vue3,所以使用了element-plus。其他还用到了Vuex来管理一些应用状态、Vue Router来管理路由、Axios来作为异步通讯的底层、file-saver和xlsx来开发数据导出功能、以及echarts5来做数据展示。

安装vue3js

首先第一步还是在本地系统上安装Vue3,这个基本上还是非常简单的,和安装其他npm的库一样

npm install vue@next

创建vite 项目


不错这次初始化项目的区别是不再直接使用Vue CLI来搭建空的脚手架了,而是提供了一个新的编译工具Vite,可以直接通过执行下面的指令来搭建一个最基础的空的基于Vue3的Vite项目:

NPM的指令,需要Node.js 12.0.0以上的版本:

$ npm init @vitejs/app <project-name>
$ cd <project-name>
$ npm install
$ npm run dev

Yarn的指令:

$ yarn create @vitejs/app <project-name>
$ cd <project-name>
$ yarn
$ yarn dev

这样基本上就算是完成了最基础的一步,创建出来基础脚手架结构如下:

整体来说还是非常直接的,分成三个文件夹和一些配置文件,分别是存放第三方模块的nodemodules、存放导出时的静态文件的public以及存放源代码的src,配置文件包括了库的配置文件packages.json和Vite的配置文件vite.config.js。这个和之前的vue.config.js已经完全不同了,虽然使用vite最大的一个坑就是文档不是太齐全,不过感觉上去功能还是蛮强大的。

添加element-plus

添加elment-plus的时候也碰到了一个比较有意思的地方,虽然element-plus支持了vue3,但是在添加的时候还是出现了错误,先通过下面的方式添加elemen-plus到项目中,

vue add element-plus

安装过程中,有如下三个问题,来完成安装最后的配置:

安装运行后可能出现中文扩展不可加载的情况,如下

这个就需要在vite.config.js下面加一个深度加载依赖项的配置,在根目录下vite.config.js中添加:

optimizeDeps:{ 
  include: [ "element-plus/lib/locale/lang/zh-cn" ] 
}

这个可能是为了编译效率的原因,对于比较大的一些依赖项会需要独立添加,这个因为Vite文档不多的坑,还是费了不少时间查解决方案的。

添加路由功能

至此算是有个简单的空脚手架了,不过还只能是开发单页应用,所以作为管理后台还需要路由功能,就直接使用了官方库,vue-router,还是第一步直接安装

npm install vue-router

不过出现了下面的错误

查了不少资料后发现,因为安装vue-router的时候没有指定版本,安装的版本是vue-router 3,然而vue-router在版本4之后才全面支持Vue3,所以才出现了上面的问题,然后通过指定版本号重新安装了vue-router

npm install vue-router@4

安装完vue-router@4之后,又出现了一个新的错误:

不过这个坑并不是vue- router的问题,是因为Vue3的引入机制改变了,从之前的插件引入,变成了ES模块构建的导入,不过一开始没有意识到这个问题,所以直接看了一些vue-router的export文件,没有了之前的export mordule default,而是变成如下的导出方式

export { 
	NavigationFailureType, 
  RouterLink, 
  RouterView, 
  START_LOCATION_NORMALIZED as START_LOCATION, 
  createMemoryHistory, 
  createRouter, 
  createRouterMatcher, 
  createWebHashHistory, 
  createWebHistory, 
  isNavigationFailure, 
  matchedRouteKey, 
  onBeforeRouteLeave, 
  onBeforeRouteUpdate, 
  parseQuery, 
  routeLocationKey, 
  routerKey,
  routerViewLocationKey, 
  stringifyQuery, 
  useLink, 
  useRoute, 
  useRouter, 
  viewDepthKey 
};

所以直接修改一下模块引用的方式:

import {createRouter,createWebHashHistory} from 'vue-router'

这个最开始接触Vue3的时候,因为Vue2的经验还是有点不习惯的。

添加less

这次和之前vue-element-admin不同的是,我选择使用less来作为预处理css编译语言,算是一次新的尝试,安装过程还是比较简单的

npm i -D less less-loader

不过因为这次使用了Vite作为编译工具,所以配置预处理器还是花了点时间研究的,主要是Vite的文档对于配置项的案例并不多。最终通过几次尝试,在vite.config.js下添加css预处理的配置,理论上是可以通过additioalData这个属性来设置全局引入的less文件,但是尝试了几次都没有成功获取到相应的less变量,最终还是在项目的根页面layout里面手动加入的主题样式,便于调用。

css: { 
  cssPreprocessOptions: { 
    less: { 
      additionalData: '@import "/@/styles/theme.less";', // 添加公共样式 
    },
  } 
}

到这里基本上就可以算是把一个多页面管理后台的脚手架搭建好了,虽然不是太复杂,但是对于比较新接触到Vue3的我来说还是花了一些时间摸索的。接下来就是根据管理后台的需求来完成一个框架,会包括基于Axios库的开发一个简单的Request模块、使用Vuex来管理页面的状态、使用file-saver和xlsx来到处表格数据以及引入echart5来展现数据。

总结

总的来说,虽然没有完全对vite和vue3摸索透彻,但是看到不少非常有意思的功能,应该可以理解之后Vue3会完全脱离Vue2,而且功能会比Vue2更强大和稳定。但是目前来说,文档还是比较匮乏的,官方文档还有不少只有英文版,Vue3的官方文档也是这几个月才出中文版,不过可以逐步迭代完善的。

之后我还会给这个脚手架加入一些核心功能,如果感兴趣的话,可以关注我后续的文章,也可以在评论区留下你觉得需要的一些管理后台功能,我也会尝试去添加的。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/652.html

标签: node xlsx
分享给朋友:

“基于Vue3做了个管理后台,分享一下碰到的坑(一)” 的相关文章

vue3中父子传值、defineProps用法、defineEmits用法

Vue3中新增了一个 script setup 语法糖模式,可以在单文件组件中更简洁地编写组件逻辑。使用 script setup 语法后,props、data、computed、methods 等选项不再需要独立定义,而是可以直接在 setup 函数中声明,代码结构更加清晰,并且可以更方便地使用响...

7 招教你轻松搭建以图搜图系统

作者 | 小龙责编 | 胡巍巍当您听到“以图搜图”时,是否首先想到了百度、Google 等搜索引擎的以图搜图功能呢?事实上,您完全可以搭建一个属于自己的以图搜图系统:自己建立图片库;自己选择一张图片到库中进行搜索,并得到与其相似的若干图片。Milvus 作为一款针对海量特征向量的相似性检索引擎,旨在...

「干货」FPGA设计中深度约束技巧及调试经验总结

今天跟大家分享的内容很重要,也是我们调试FPGA经验的总结。随着FPGA对时序和性能的要求越来越高,高频率、大位宽的设计越来越多。在调试这些FPGA样机时,需要从写代码时就要小心谨慎,否则写出来的代码可能无法满足时序要求。另外,最近跟网友聊天时,有谈到公众号寿命的问题,我觉得网络交换FPGA公众号应...

微信研发新功能,或许有你最期待的

微信在我们日常社交中担任着非常重要的角色,不管是用于学习还是工作,我们越来越离不开微信,微信的任何一个小的变化都会影响到现如今超过12亿的微信用户。就在前一段时间,微信更新了一个“拍一拍”的功能,只要双击好友头像,头像就会有抖动并带有文字提示,一时间众多网友在朋友圈疯狂刷屏,虽然觉得这个功能毫无用处...

电机中“同步”、“异步”的区别到底在哪?

想要了解同步和异步的区别和工作原理必须知道“同步”是啥?定子电流产生的旋转磁场绑在(把磁场想象成一个实物)转子这块磁铁或电磁铁,一起“嗨”起来,两者速度相同...“异步”是啥?定子电流产生的旋转磁场自带几把刷子,旋转的时候对着转子一顿狂刷,利用“摩擦摩擦”将转子带起来,两者速度不同,产生差异(转差率...

异步电动机和同步电动机有什么区别?

有很多电工朋友在日常工作当中,会遇到很多种不同类型的电动机,比如直流电机、高低压交流电机、步进电机和伺服电机等等。其中交流电机还可以分为异步电动机和同步电动机两种,那么同步电动机和异步电动机到底有什么区别呢?下面就为大家简单的介绍一下:一、转速的区别:看这个题目就能知道,它们最大的区别就在于“同步和...