项目升级Webpack3 —> Webpack4 及vuerouter升级踩过的坑

761 阅读2分钟

最近接手公司的一个老项目,项目运行起来就要6-8分钟,打包就更慢了。首先看了下package.json。首先看到webpack3就知道项目有历史了。于是对项目的依赖做了升级,比如webpack及周边库版本,vue及周边库版本,eslint等等。对比如下:

之前项目部分package.json

"dependencies": {
    "vue": "^2.3.3",
    "vue-router": "^2.3.1",
},

"devDependencies": {
    "babel-core": "^6.22.1",
    "babel-helper-vue-jsx-merge-props": "^2.0.3",
    "babel-loader": "^6.2.10",
    "babel-plugin-transform-runtime": "^6.22.0",
    "babel-preset-env": "^1.7.0",
    "babel-preset-stage-2": "^6.22.0",
    "babel-register": "^6.22.0",
    "copy-webpack-plugin": "^4.0.1",
    "css-loader": "^0.28.0",
    "eslint-loader": "^1.7.1",
    "extract-text-webpack-plugin": "^2.0.0",
    "file-loader": "^0.11.1",
    "friendly-errors-webpack-plugin": "^1.1.3",
    "html-webpack-plugin": "^2.28.0",
    "inject-loader": "^3.0.0",
    "node-sass": "^4.9.2",
    "optimize-css-assets-webpack-plugin": "^1.3.0",
    "sass-loader": "^6.0.6",
    "vue-loader": "^12.1.0",
    "vue-template-compiler": "^2.3.3",
    "webpack": "^3.6.0",
    "webpack-bundle-analyzer": "^2.2.1",
    "webpack-dev-middleware": "^1.10.0",
    "webpack-hot-middleware": "^2.18.0",
    "webpack-merge": "^4.1.0"
}

升级后项目改动package.json

"dependencies": {
    "vue": "^2.6.10",
    "vue-router": "^3.0.6",
},
"devDependencies": {
    "@babel/core": "^7.4.4",
    "@babel/plugin-syntax-dynamic-import": "^7.2.0",
    "@babel/plugin-transform-runtime": "^7.4.4",
    "@babel/preset-env": "^7.4.4",
    "@babel/preset-stage-2": "^7.0.0",
    "babel-loader": "^8.0.6",
    "copy-webpack-plugin": "^5.0.3",
    "css-loader": "^2.1.1",
    "eslint-loader": "^2.1.2",
    "extract-text-webpack-plugin": "^4.0.0-beta.0",
    "file-loader": "^3.0.1",
    "friendly-errors-webpack-plugin": "^1.7.0",
    "html-webpack-plugin": "^3.2.0",
    "inject-loader": "^4.0.1",
    "node-sass": "^4.14.1",
    "optimize-css-assets-webpack-plugin": "^5.0.1",
    "sass-loader": "^7.3.1",
    "vue-loader": "^15.7.0",
    "vue-template-compiler": "^2.6.10",
    "webpack": "^4.32.0",
    "webpack-bundle-analyzer": "^3.3.2",
    "webpack-dev-middleware": "^3.4.1",
    "webpack-merge": "^4.2.1"
}

改完依赖后删除node_modules。然后重新cnpm i。然后开始进行一系列的报错修复

  1. 首先是.babelrc,因为babel做了升级,名字会不一样所以要改一下,这里就不截图了。

  2. 报错: 9FAF964A-F5EF-4B4A-876C-540031354CC8.png 这里是说 contenthash webpack4 识别不了,也就是没有这个属性值了,换成了md5:contenthash:hex:8

    修复: 65B8EB4A-1BF8-449F-8855-8828919F1CB8.png 把webpack.dev.conf.js和webpack.prod.conf.js都改

继续运行项目报错:

363D0EA2-268D-40F1-8ED0-79979C6A56E6.png 修复: 看报错信息是vue-loader无法解析 .vue文件里面的样式,查看vue-loader官网得知vue-loader@15.*之后 必须配置带有VueLoaderPlugin

image.png

4.继续运行项目,运行过程中没有报错

5.运行后重复点击路由会在控制台报错

在这里插入图片描述

解决这个错误也非常简单。只需要在router /index的页面里面 加入

try {
  const originalPush = Router.prototype.push
  Router.prototype.push = function push (location) {
    return originalPush.call(this, location).catch(err => err)
  }
} catch (e) { console.log(e) }

6.最后一步重点来了!!!!!!!

Vue-router跳转界面后显示空白,要刷新之后才会显示新页面,地址栏也跳转了 因为升级了vue-router所以addRoutes的写法也要变

截屏2022-03-17 上午10.11.42.png

至此项目升级完毕