1、nodejs和npm

注意二者的版本,版本过低需要升级,本人升级后的版本如下:

$ node -v
v16.15.1 $ npm -v
8.11.0

2、package.json 和依赖升级

由于我的项目采用的原架构是vue2+vant2+sass+axios+webpack,由于项目是通过vue-cli搭建的,因此升级完nodejs和npm后,便要对vue-cli进行升级。而后除了vue和webpack需要按照官方迁移构建文档进行升级处理,sass和vant也需要进行升级,vant由v2升级至v3,本着反正要升级的原则,axios也顺便做了升级处理(axios升级不是必须的,不想升级也无所谓)。

以下是我升级前后相关依赖的版本号对比:

升级前:

"dependencies": {
...
"axios": "^0.21.1",
"vant": "^2.12.40",
"vue": "^2.6.11",
"vue-router": "^3.2.0",
"vuex": "^3.4.0"
...
},
"devDependencies": {
...
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-eslint": "~4.5.0",
"@vue/cli-plugin-router": "~4.5.0",
"@vue/cli-plugin-vuex": "~4.5.0",
"@vue/cli-service": "~4.5.0",
"node-sass": "^4.14.1",
"sass-loader": "^8.0.2",
"vue-template-compiler": "^2.6.11",
...
}

升级后:

"dependencies": {
...
"axios": "^0.27.2",
"vant": "^3.5.2",
"vue": "^3.1.0",
"vue-router": "^4.1.1",
"vuex": "^4.0.2"
...
},
"devDependencies": {
...
"@vue/babel-plugin-jsx": "^1.1.1",
"@vue/cli-plugin-babel": "^5.0.7",
"@vue/cli-plugin-eslint": "^5.0.7",
"@vue/cli-plugin-router": "^5.0.7",
"@vue/cli-plugin-vuex": "^5.0.7",
"@vue/cli-service": "^5.0.7",
"@vue/compiler-sfc": "^3.1.0",
"node-sass": "^7.0.1",
"sass-loader": "^13.0.2",
// "vue-template-compiler": "^2.6.11", // 删除
...
}

3、修改 vue.config.js

module.exports = {
...
devServer: {
...
// 可以将这部分功能关闭,因为项目虽然可以运行构建,但是文件中还有很多代码警告
overlay: {
// 当出现编译器错误或警告时,在浏览器中显示全屏覆盖层
warnings: false,
errors: true
},
...
},
css: {
...
loaderOptions: {
scss: {
// 升级后,属性名需要由 prependData 改为 additionalData
additionalData:`
@import "assets/css/mixin.scss";
@import "assets/css/variables.scss";
$cdn: "${defaultSettings.$cdn}";
`
}
},
...
},
chainWebpack: config => {
...
// 添加 vue 别名
config.resolve.alias
.set('vue', '@vue/compat')
...
// vue-loader的相关部分也需要进行处理
// 以下注释部分为原代码
// config.module
// .rule('vue')
// .use('vue-loader')
// .loader('vue-loader')
// .tap(options => {
// options.compilerOptions.preserveWhitespace = true
// return options
// })
// .end()
// 以下为新代码
config.module
.rule('vue')
.use('vue-loader')
.tap(options => {
return {
...options,
compilerOptions: {
compatConfig: {
MODE: 2 // 设置为2,表示开启兼容 VUe2 模式
}
}
}
})
...
},
...
}

4、vuex 调整

升级前,我们使用时写法一般如下:

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
...
},
...
})

升级后,修改为如下写法:

import { createStore } from 'vuex'
const store = createStore({
modules: {
...
},
...
})

5、vue-router 调整

升级前,我们使用时写法一般如下:

import Vue from 'vue'
import Router from 'vue-router' const constantRouterMap = {
// 路由配置
...
}
Vue.use(Router) const createRouter = () =>
new Router({
...
routes: constantRouterMap
}) const router = createRouter()
export default router

升级后,修改为如下写法:

import { createRouter, createWebHashHistory } from 'vue-router'
const constantRouterMap = {
// 路由配置
...
} /*
官方文档说明:
新的 history 配置取代 mode#
mode: 'history' 配置已经被一个更灵活的 history 配置所取代。根据你使用的模式,你必须用适当的函数替换它: "history": createWebHistory()
"hash": createWebHashHistory()
"abstract": createMemoryHistory() 更多内容可以参见官方文档:https://router.vuejs.org/zh/guide/migration/index.html#%E6%96%B0%E7%9A%84-history-%E9%85%8D%E7%BD%AE%E5%8F%96%E4%BB%A3-mode
*/ const router = createRouter({
history: createWebHashHistory(), // hash模式
scrollBehavior: () => ({ y: 0 }),
routes: constantRouterMap,
}) export default router

6、main.js 调整

升级前,我们使用时写法一般如下:

import Vue from 'vue'
import router from './router'
import store from './store'
...
import util from './utils/export' // 自己封装的全局通用方法库
// 可以直接这样绑定到VUe的原型链上
Vue.prototype.$util = util
...
new Vue({
el: '#app',
router,
store,
render: h => h(App)
}).$mount('#app')

升级后,修改为如下写法:

import { createApp } from 'vue'
import router from './router'
import store from './store'
...
import util from './utils/export'
...
const app = createApp(App)
app.use(router)
app.use(store)
app.prototype.$util = util
...
app.mount('#app')

7、npm run

至此,可以执行 npm run servenpm run build 了。不过,升级并没有就此结束,相反,这只是一个开始,我们现在运行的代码还是兼容vue2模式,此外,在运行构建过程中,你会发现,尽管现在是兼容vue2模式,但是你的项目文件中还会有很多语法warning,这需要我们后续排查修改,直到真正完成Vue3的升级。

参考文献

用于迁移的构建版本

VUe-router 从 Vue2 迁移

vuex 从 3.x 迁移到 4.0

Vue CLI 文档

本文链接:https://www.cnblogs.com/xsilence/p/16465770.html

vue2升级vue3指南(一)—— 环境准备和构建篇的更多相关文章

  1. vue2升级vue3指南(二)—— 语法warning&error篇

    本文总结了vue2升级vue3可能会遇到的语法警告和错误,如果想知道怎样升级,可以查看我的上一篇文章:vue2升级vue3指南(一)-- 环境准备和构建篇 Warning 1.deep /deep/和 ...

  2. vue2升级vue3:Vue Demij打通vue2与vue3壁垒,构建通用组件

    如果你的vue2代码之前是使用vue-class-component 类组件模式写的.选择可以使用 https://github.com/facing-dev/vue-facing-decorator ...

  3. vue2升级vue3:vue2 vue-i18n 升级到vue3搭配VueI18n v9

    项目从vue2 升级vue3,VueI18n需要做适当的调整.主要是Vue I18n v8.x 到Vue I18n v9 or later 的变化,其中初始化: 具体可以参看:https://vue- ...

  4. uniapp项目vue2升级vue3简单记录

    看到好多开源项目都升级了vue3,看文章说vue3性能升级很多,而且组合式api很香,遂把最近开发的自助洗车app升级下,在此记录下出现的问题. uniapp升级vue3官方指南 我是先去vue官网看 ...

  5. MySQL 升级方法指南大全

    原文:MySQL 升级方法指南大全 通常,从一个发布版本升级到另一个版本时,我们建议按照顺序来升级版本.例如,想要升级 MySQL 3.23 时,先升级到 MySQL 4.0,而不是直接升级到 MyS ...

  6. 升级设置win2008r2开发环境,遇到问题小结

    升级设置2008r2开发环境,是一般程序员经历的事情.许多从vs 2003,vs2005+sql2000+win2003过来,但是,时间推移,技术革新,64位的推行.架构的变化和强大.我们也只可以学习 ...

  7. spring 4 升级踩雷指南

    spring 4 升级踩雷指南 前言 最近,一直在为公司老项目做核心库升级工作.本来只是想升级一下 JDK8 ,却因为兼容性问题而不得不升级一些其他的库,而其他库本身依赖的一些库可能也要同步升级.这是 ...

  8. 新手嘛,先学习下 Vue2.0 新手入门 — 从环境搭建到发布

    Vue2.0 新手入门 — 从环境搭建到发布 转自:http://www.runoob.com/w3cnote/vue2-start-coding.html 具体文章详细就不搬了,步骤可过去看,我这就 ...

  9. 总结Vue 第四天:vue-cli(Vue2.0 新手入门 — 从环境搭建到发布)

    总结Vue 第四天:vue-cli(Vue2.0 新手入门 - 从环境搭建到发布) 一.Vue CLI----(Vue2.0 新手入门 - 从环境搭建到发布): ■   CLI是Command-Lin ...

随机推荐

  1. MySQL Router重装后重新连接集群进行引导出现的——此主机中之前已配置过的问题

    问题出现的前因: 因为重新安装了MySQL Router,然后打算重新连接上目标集群进行MySQL Router的初始化引导,结果报错了! [root@linux666 system]# mysqlr ...

  2. C#使用进程调用bash,不断往bash内插入命令并执行

    呃呃呃,遇到了一个非常恶心得问题,现在就是,有几十万条数据需要当作参数调用python脚本 一次一次输入命令过去缓慢,经过了多层考虑决定使用进程来解决(不知道线程怎么开启bash得) 原理非常简单,类 ...

  3. 解决PLSQL developer 乱码问题

    今天打开 PLSQL developer 登录数据库后,查看数据的时候,发现表里面的中文数据全部变成了 ???  这样的东西,  打开表看表的 中文描述信息 , 一样 显示问号. 什么鬼啊?  第一次 ...

  4. 自己的~/.vimrc

    " 语法高亮syntax on " 搜索高亮set hlsearch " 显示行号set number" let mapleader="," ...

  5. [笔记] $f(i)$ 为 $k$ 次多项式,$\sum_{i=0}^nf(i)\cdot q^i$ 的 $O(k\log k)$ 求法

    \(f(i)\) 为 \(k\) 次多项式,\(\sum_{i=0}^nf(i)\cdot q^i\) 的 \(O(k\log k)\) 求法 令 \(S(n)=\sum_{i=0}^{n-1}f(i ...

  6. iNeuOS工业互联网操作系统,数据点、设备和业务的计算与预警

    目       录 1.      概述... 2 2.      概念解释... 2 3.      数据点的计算与预警... 2 4.      设备的计算与预警... 3 5.      业务的 ...

  7. Java课程课堂作业代码

    前言 本文章只是单纯记录课堂老师布置的课堂作业代码,题目都比较简单,所以没有写解题思路,相信大家都能理解,当然其中有的解法和代码不是最优的,当时只是为了完成题目,后来也懒得改了,如果有不恰当或者不正确 ...

  8. 2022年5月11日,NBMiner发布了41.3版本,在内核中加入了100%LHR解锁器,从此NVIDIA的显卡再无锁卡一说

           2022年5月11日,NBMiner发布NBMiner_41.3版本,主要提升了稳定性.         2022年5月8日,NBMiner发布NBMiner_41.0版本,在最新的内核 ...

  9. 讨论两种Redis中Token的存储方式

    摘要:本文讨论一个问题:存储token时,token与对应用户id谁来作为key? 问题起源问题起源于要给公司的后台管理系统添加权限管理,选用的是开源框架shiro,而原本系统上是采用token做了登 ...

  10. AMS 新闻视频广告的云原生容器化之路

    作者 卓晓光,腾讯广告高级开发工程师,负责新闻视频广告整体后台架构设计,有十余年高性能高可用海量后台服务开发和实践经验.目前正带领团队完成云原生技术栈的全面转型. 吴文祺,腾讯广告开发工程师,负责新闻 ...