百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

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

bigegpt 2024-09-14 00:18 36 浏览

之前因为一个项目的原因,接触了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的官方文档也是这几个月才出中文版,不过可以逐步迭代完善的。

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

相关推荐

最全的MySQL总结,助你向阿里“开炮”(面试题+笔记+思维图)

前言作为一名编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的。对于求职者来说,MySQL又是面试中一定会问到的重点,很多人拥有大厂梦,却因为MySQL败下阵来。实际上...

Redis数据库从入门到精通(redis数据库设计)

目录一、常见的非关系型数据库NOSQL分类二、了解Redis三、Redis的单节点安装教程四、Redis的常用命令1、Help帮助命令2、SET命令3、过期命令4、查找键命令5、操作键命令6、GET命...

netcore 急速接入第三方登录,不看后悔

新年新气象,趁着新年的喜庆,肝了十来天,终于发了第一版,希望大家喜欢。如果有不喜欢看文字的童鞋,可以直接看下面的地址体验一下:https://oauthlogin.net/前言此次带来得这个小项目是...

精选 30 个 C++ 面试题(含解析)(c++面试题和答案汇总)

大家好,我是柠檬哥,专注编程知识分享。欢迎关注@程序员柠檬橙,编程路上不迷路,私信发送以下关键字获取编程资源:发送1024打包下载10个G编程资源学习资料发送001获取阿里大神LeetCode...

Oracle 12c系列(一)|多租户容器数据库

作者杨禹航出品沃趣技术Oracle12.1发布至今已有多年,但国内Oracle12C的用户并不多,随着12.2在去年的发布,选择安装Oracle12c的客户量明显增加,在接下来的几年中,Or...

flutter系列之:UI layout简介(flutter-ui-nice)

简介对于一个前端框架来说,除了各个组件之外,最重要的就是将这些组件进行连接的布局了。布局的英文名叫做layout,就是用来描述如何将组件进行摆放的一个约束。在flutter中,基本上所有的对象都是wi...

Flutter 分页功能表格控件(flutter 列表)

老孟导读:前2天有读者问到是否有带分页功能的表格控件,今天分页功能的表格控件详细解析来来。PaginatedDataTablePaginatedDataTable是一个带分页功能的DataTable,...

Flutter | 使用BottomNavigationBar快速构建底部导航

平时我们在使用app时经常会看到底部导航栏,而在flutter中它的实现也较为简单.需要用到的组件:BottomNavigationBar导航栏的主体BottomNavigationBarI...

Android中的数据库和本地存储在Flutter中是怎样实现的

如何使用SharedPreferences?在Android中,你可以使用SharedPreferencesAPI来存储少量的键值对。在Flutter中,使用Shared_Pref...

Flet,一个Flutter应用的实用Python库!

▼Flet:用Python轻松构建跨平台应用!在纷繁复杂的Python框架中,Flet宛如一缕清风,为开发者带来极致的跨平台应用开发体验。它用最简单的Python代码,帮你实现移动端、桌面端...

flutter系列之:做一个图像滤镜(flutter photo)

简介很多时候,我们需要一些特效功能,比如给图片做个滤镜什么的,如果是h5页面,那么我们可以很容易的通过css滤镜来实现这个功能。那么如果在flutter中,如果要实现这样的滤镜功能应该怎么处理呢?一起...

flutter软件开发笔记20-flutter web开发

flutterweb开发优势比较多,采用统一的语言,就能开发不同类型的软件,在web开发中,特别是后台式软件中,相比传统的html5开发,更高效,有点像c++编程的方式,把web设计出来了。一...

Flutter实战-请求封装(五)之设置抓包Proxy

用了两年的flutter,有了一些心得,不虚头巴脑,只求实战有用,以供学习或使用flutter的小伙伴参考,学习尚浅,如有不正确的地方还望各路大神指正,以免误人子弟,在此拜谢~(原创不易,转发请标注来...

为什么不在 Flutter 中使用全局变量来管理状态

我相信没有人用全局变量来管理Flutter应用程序的状态。毫无疑问,我们的Flutter应用程序需要状态管理包或Flutter的基本小部件(例如InheritedWidget或St...

Flutter 攻略(Dart基本数据类型,变量 整理 2)

代码运行从main方法开始voidmain(){print("hellodart");}变量与常量var声明变量未初始化变量为nullvarc;//未初始化print(c)...