vue 升级3 +vite+antdv4

目录

一、安装包相关升级

二、vite.config

三、 入口文件修改

四、App.vue 及相关升级

 五、路由

六、状态管理VUEX


一、安装包相关升级

升级pakage.json相关安装包

vue2插件vue3替换插件vue2使用vue3使用
vue-ls 
vuex-persistedstate或vuex-persist
Vue.ls.get() 

Vue.ls.set()

直接操作store相关
k-form-design
k-designer
vue-contextmenu
可使用ui组件
<vue-context-menu
:contextMenuData="[]"
@deleteLink="deleteLink">
</vue-context-menu
<a-dropdown :trigger="['contextmenu']">
vcolorpicker
可使用ui组件
@jiaminghi/data-view
echarts
vue-json-viewer
vue3-json-viewer
vue-draggable
vue-draggable-next
moment
dayjs

升级nodejs15版本及以上

1.安装vite

npm i vite -g
npm create vite@latest

#相关目录文件,注意:vue-cli生成index.html在public下要改为根目录

.package.json

删除vue-cli相关,修改

"serve": "vue-cli-service serve",
"build": "vue-cli-service build"

 为

{"name": "vue-antd-pro","version": "2.1.0","private": true,"scripts": {"dev": "vite --mode development","build": "vite build","serve": "vite preview","lint": "eslint --ext .js,.vue --ignore-path .gitignore --fix src","test:unit": "vue-cli-service test:unit","build:preview": "vue-cli-service build --mode preview","postinstall": "opencollective-postinstall"},"dependencies": {"@aspnet/signalr": "^1.0.27","@microsoft/signalr": "^7.0.5","@rollup/plugin-inject": "^5.0.3","@vitejs/plugin-vue-jsx": "^3.0.1","@vue/compat": "^3.3.4","@vueuse/core": "^6.7.3","ant-design-vue": "^4.0.0-rc.4","axios": "^1.4.0","babel-plugin-transform-remove-strict-mode": "0.0.2","babel-polyfill": "^6.26.0","echarts": "^5.4.2","eslint": "^8.40.0","eslint-plugin-vue": "^9.13.0","jquery": "^3.5.1","jquery-ui": "1.13.0","k-designer": "^0.0.42","md5": "^2.2.1","mockjs2": "1.0.8","nprogress": "^0.2.0","vite": "^4.3.9","vite-plugin-svg-icons": "^2.0.1","vue": "^3.3.4","vue-clipboard2": "^0.2.1","vue-codemirror-lite": "^1.0.4","vue-cropper": "^0.5.11","vue-draggable-next": "^2.1.1","vue-qr": "^4.0.9","vue-quill-editor": "^3.0.6","vue-router": "^4.2.0","vue3-json-viewer": "^2.2.2","vuex": "^4.1.0","vuex-persistedstate": "^4.1.0","wangeditor": "^4.7.15",},"devDependencies": {"@ant-design/colors": "^3.2.1","@typescript-eslint/eslint-plugin": "^5.59.6","@typescript-eslint/parser": "^5.59.6","@vitejs/plugin-vue": "^1.6.1","@vitejs/plugin-vue-jsx": "^3.0.1","@vitejs/plugin-vue2": "^2.2.0","@vue/compiler-sfc": "^3.3.4","@vue/eslint-config-prettier": "^7.1.0","@vue/eslint-config-standard": "^8.0.1","@vue/test-utils": "^2.3.2","@zougt/some-loader-utils": "^1.4.3","@zougt/vite-plugin-theme-preprocessor": "^1.4.8","autoprefixer": "^10.4.14","babel-plugin-import": "^1.13.0","babel-plugin-transform-remove-console": "^6.9.4","eslint": "^8.40.0","eslint-config-prettier": "^8.8.0","eslint-plugin-html": "^5.0.0","eslint-plugin-prettier": "^4.2.1","eslint-plugin-vue": "^9.13.0","less": "^3.0.4","less-loader": "^5.0.0","postcss": "^8.4.23","postcss-loader": "^7.3.0","prettier": "^2.8.8","sass": "1.32.0","stylus": "^0.54.8","unplugin-vue-components": "^0.24.1","vite": "^4.3.8","vite-plugin-compression": "^0.5.1","vite-plugin-require": "^1.1.10","vite-plugin-theme": "^0.8.6","vue-eslint-parser": "^9.3.0"},"main": ".eslintrc.js","directories": {"test": "tests"},"keywords": [],"author": "","license": "ISC","description": ""
}

二、vite.config

const path = require("path");
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vitePluginRequire from 'vite-plugin-require';
import inject from '@rollup/plugin-inject';
import Components from 'unplugin-vue-components/vite'
import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers'
import viteCompression from "vite-plugin-compression";
import vueJsx from '@vitejs/plugin-vue-jsx'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
export default defineConfig({// base: './',  // 开发或生产环境服务的公共基础路径径envDir: './env',plugins: [vue({template: {compilerOptions: {compatConfig: {MODE: 3 // vue2还是vue3模式}}}}),vueJsx(),vitePluginRequire(),inject({$: "jquery",  // 这里会自动载入 node_modules 中的 jquery   jquery全局变量jQuery: "jquery","windows.jQuery": "jquery"}),createSvgIconsPlugin({// 要缓存的图标文件夹iconDirs: [path.resolve(__dirname, 'src/assets/icons')],// 执行 icon name 的格式symbolId: 'icon-[name]'}),Components({dts: 'src/types/components.d.ts',include: [/\.vue$/, /\.tsx$/],resolvers: [ AntDesignVueResolver({// 参数配置可参考:https://github.com/antfu/unplugin-vue-components/blob/main/src/core/resolvers/antdv.ts// 自动引入 ant-design/icons-vue中的图标,需要安装@ant-design/icons-vue// importStyle: 'less',importStyle: false,resolveIcons: true,})]}),viteCompression() // gzip],// publicDir: 'public',cacheDir: 'node_modules/.vite',resolve: {alias: {"@": path.resolve(__dirname, "./src"),'vue': 'vue/dist/vue.esm-bundler.js',// vue: '@vue/compat',},extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'], // 忽略文件后缀},css: {preprocessorOptions: {less: {javascriptEnabled: true}}},// 服务的配置server: {cors: false,// 主机名host: '0.0.0.0',// 端口port: 8080,// 端口被占用调用下个端口strictPort: false,// boolean | String 如果是boolean且为true 会自动打开浏览器。 配置是字符串 会被用作 URL 的路径名open: false,/*服务器代理地址,用于代理到后台的服务器。*/// proxy: createProxy(),// force: true // 强制使依赖预构建。//fs: {strict: false}},// 正式环境的配置build: {// 去除console debugterserOptions: {compress: {drop_console: true,drop_debugger: true}},target: 'modules',// target: 'es2015',// 指定输出的路径,相当于项目根目录// outDir: mode.includes('production.hr') ? 'dist/hr' : 'dist/uc',// 静态资源存放路径,相对于outDir// assetsDir: 'public/',// 小于此配置的会被base64编码,0为完全禁用assetsInlineLimit: 4096,// 启用/禁用css代码拆分  如果禁用整个项目所有css将会提取为一个csscssCodeSplit: true,// boolean| inline 构建后是不是生产source map 文件sourcemap: false,// 启用和禁用压缩报告brotliSize: true,// chunk大小警告// chunkSizeWarningLimit: 500,minify: true,  //打包结果取消minify,方便我们看打包后结果对比 'terser'chunkSizeWarningLimit: 500,rollupOptions: {// input: resolve(__dirname, 'index.html'),output: {chunkFileNames: 'static/js/[name]-[hash].js',entryFileNames: 'static/js/[name]-[hash].js',assetFileNames: 'static/[ext]/[name]-[hash].[ext]',manualChunks(id) {if (id.includes('node_modules')) {return 'vendor';}},brotliSize: false, // 不统计target: 'esnext',minify: 'esbuild' // 混淆器,terser构建后文件体积更小},},}})

三、 入口文件修改

index.html ,全局main.js引入

<script type="module" src="./src/main.js"></script>

 main.js

根据项目已有插件进行升级,注意app创建实例已修改,以下为参考

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from '@/store/index';
import { Modal, message, notification  } from 'ant-design-vue'
import { VueAxios } from './utils/request'
import '@/components/flow/style/flow-designer.scss'
import './components/global.less'
import '@/components/index.less'
import './permission.js' // permission control
import './utils/filter' // global filter
import 'regenerator-runtime/runtime'
import 'core-js/stable'
import socket from './utils/socket'
import { sysApplication } from './utils/applocation'
import { hasBtnPermission } from './utils/permissions' // button permission
import dictionary from './utils/dictionary'// 引入k-designer表单设计器相关,该设计器适用于antdv3版本
// import 'ant-design-vue/dist/reset.css';
import "k-designer/dist/style.css";
setupAntd(pluginManager);
import { pluginManager } from "k-designer";
import { setupAntd } from "k-designer/dist/ui/antd";
setupAntd(pluginManager);import * as echarts from 'echarts'
const app = createApp(App)// 代替Vue2 Vue.use
app.use(router)
app.use(store)
app.use(socket, '/hubs/chatHub')// 全局注册图标组件
import 'virtual:svg-icons-register'
import * as Icons from '@ant-design/icons-vue'Object.keys(Icons).map(key => {app.component(key, Icons[key])
})// 代替Vue2 Vue.prototype
app.config.globalProperties.$confirm = Modal.confirm
app.config.globalProperties.$message = message
app.config.globalProperties.$notification = notification
app.config.globalProperties.$info = Modal.info
app.config.globalProperties.$success = Modal.success
app.config.globalProperties.$error = Modal.error
app.config.globalProperties.$warning = Modal.warning
app.config.globalProperties.VueAxios = VueAxios;
app.config.globalProperties.hasPerm = hasBtnPermission;
app.config.globalProperties.applocation = sysApplication;
app.config.globalProperties.dic = dictionary;
app.config.globalProperties.$echarts = echarts;
app.mount('#app')

四、App.vue 及相关<router-view>升级

<router-view class="page" v-slot="{ Component }"><transition name="route" mode="out-in"><component :is="Component"></component></transition>
</router-view>
<router-view class="page" v-slot="{ Component }"><keep-alive><component :is="Component" /></keep-alive>
</router-view>

 五、路由

npm install vue-router@4
import { createRouter, createWebHistory, createWebHashHistory } from 'vue-router'
import { constantRouterMap } from '@/config/router.config'
import '@/components/NProgress/nprogress.less' // progress bar custom styleconst router = createRouter({history: createWebHistory(), // history模式 createWebHashHistory hash模式base: import.meta.env.VITE_APP_API_BASE_URL,scrollBehavior: () => ({ y: 0 }),routes: constantRouterMap  // 路由表
})// 前增加下面代码,添加一个临时路由
console.log(router.hasRoute(), window.location.pathname)
// if (!router.hasRoute()) {
//   router.addRoute({
//     path: window.location.pathname,
//     name: 'TempRoute',
//     component: () => import('@/views/system/exception/404.vue')
//   })
// }export default router

六、状态管理VUEX

npm install vuex@next
import { createStore } from 'vuex';
import createPersistedState from 'vuex-persistedstate' // 持久化state, 代替vue-ls相关
export default createStore({  // 替代之前的 new Vuex.Store()state: {},mutations: {},actions: {},plugins: [createPersistedState({storage: window.localStorage //可为window.sessionstorage})]
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/29237.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Batch之读数据库—JdbcPagingItemReader(四十一)

一、JdbcPagingItemReader Spring Batch框架提供了对JDBC分页读取支持的组件JdbcPagingItemReader。JdbcPaginItemReader实现ItemReader接口&#xff0c;核心作用是将数据库中记录通过分页的方式转换为Java对象。在JdbcPagingItemReader将数据库记录转换为Java对象是主要有两步…

Lua脚本本地调试

这里主要使用日志的方式进行debug 环境依赖 项目对openresty包的依赖比较高&#xff0c;所以环境基础都在openresty下进行 openresty的使用 openresty下载地址 下载完成后解压&#xff0c;具体使用方式和nginx没有什么区别&#xff0c;主要依赖文件是一下几个 nginx.exe …

MySQL高阶语句

目录 一、常用查询 #嵌套/多条件 2、对结果进行分组 3、限制结果条目&#xff08;limit⭐⭐⭐&#xff09; 4、设置别名&#xff08;alias ——》as&#xff09; 5、通配符 一、常用查询 &#xff08;增、删、改、查&#xff09; 对 MySQL 数据库的查询&#xff0c;除了基…

消费者行为分析VR情景模拟演练系统

VR虚拟现实技术是一种先进的技术&#xff0c;利用VR开展消费者行为分析课程是一种创新的教育方式&#xff0c;它可以提高学生的学习兴趣和效果&#xff0c;同时也可以为企业提供更好的人才培训和发展机会。 1.帮助学生更好地理解和应用心理学概念&#xff1a;VR技术可以让学生…

STM32 HAL库定时器输入捕获SlaveMode脉宽测量

STM32 HAL库定时器输入捕获SlaveMode脉宽测量 SlaveMode模式简介 ✨SlaveMode复位模式&#xff1a;在发生一个触发输入事件时&#xff0c;计数器和它的预分频器能够重新被初始化&#xff1b;同时&#xff0c;如果TIMx_CR1寄存器的URS位为低&#xff0c;还会产生一个更新事件UEV…

一探究竟:人工智能、机器学习、深度学习

一、人工智能 1.1 人工智能是什么&#xff1f; 1956年在美国Dartmounth 大学举办的一场研讨会中提出了人工智能这一概念。人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c;简称AI&#xff0c;是计算机科学的一个分支&#xff0c;它企图了解智能的实质&am…

安卓APK反编译+修改+重打包+签名

目录 1.下载反编译工具包。2.将APK包&#xff0c;重命名为ZIP&#xff0c;解压。放到反编译根目录下。3.使用apktool反编译修改smail文件&#xff0c;进行重打包4.重新打包5.重签名 1.下载反编译工具包。 反编译工具包地址&#xff1a;百度网盘 提取码&#xff1a;dsu3 解压后…

记录一次抓取WiFi驱动日志以及sniffer日志

起因 路由器桥接一个WiFi&#xff0c;然后设备连接这个路由器的WiFi&#xff0c;发现网络不可用&#xff0c;而手机或者电脑连接就没问题&#xff0c;与供应商沟通问题&#xff0c;需要抓取日志&#xff0c;记录一下 抓取WLAN DRIVER WLAN FW3日志 进入开发者模式打开启动WL…

采集极验4滑块验证码图片数据

在网络安全领域&#xff0c;验证码是一种常见的用于验证用户身份或防止恶意机器人攻击的技术。而极验4滑块验证码作为一种广泛应用的验证码形式&#xff0c;其具有较高的安全性和防御能力。本文将以获取极验4滑块验证码图片数据为主题&#xff0c;介绍相关技术和方法。 一、极…

stable diffusion webui mov2mov

手把手教你用stable diffusion绘画ai插件mov2mov生成动画_哔哩哔哩_bilibili手把手教你用stable diffusion绘画ai插件mov2mov生成动画, 视频播放量 14552、弹幕量 3、点赞数 275、投硬币枚数 114、收藏人数 980、转发人数 75, 视频作者 懂你的冷兮, 作者简介 科技改变世界&…

队列-来看Java骚操作

队列基本概念 队列&#xff08;Queue&#xff09;是一种常见的数据结构&#xff0c;采用先进先出&#xff08;FIFO&#xff0c;First-In-First -Out&#xff09;的策略来管理数据。类似于现实生活中的排队&#xff0c;新元素从队尾进入队列&#xff0c; 而队列中的元素从队头开…

软件测试行业的困境和迷局

中国的软件测试虽然起点较高&#xff0c;但是软件测试的发展似乎没有想象中那么顺利。 其实每个行业除了有自身领域外&#xff0c;还有属于自己的“生态系统”。属于软件测试的生态系统主要包括后备软件测试人员、软件开发人员和软件管理决策者。后备软件测试人员是软件测试的…