Element UI 升级

1,252 阅读1分钟

最近要重构一个五年左右的 Vue 老项目,依赖库的版本都比较过时了,UI 风格和设计语言在现在看已经不忍直视。所以准备升级一下,给他整一个老树开花,虎虎生风。

"dependencies": {
	"element-ui": "1.0.9",
	"vue": "2.1.4",
	"vue-router": "^2.0.0",
	...
},
"devDependencies": {
	"vue-loader": "10.0.0",
	"vue-template-compiler": "2.1.4",
	...
}

Element UI 1.x 已经停止维护了,我打算先升级到 2.x

$ npm uninstall element-ui            # 卸载
$ npm install element-ui@2.12.0 -S    # 重新安装指定版本

❌ 升级后编译报错:can’t find module 'element-ui/lib/theme-default/index.css’;因为原来的 theme-default 文件已经改为 theme-chalk,所以只需要修改一下路径

// main.js

- import 'element-ui/lib/theme-default/index.css'
+ import 'element-ui/lib/theme-chalk/index.css'

❌ 界面渲染失败,控制台报错:_v 属性不存在。这里需要注意 Element 2.x 最低兼容 vue v2.5.x,因此升级 vue 到 2.5 以上

$ npm uninstall vue
$ npm install vue@2.6.12

❌ 编译报错,如下;vue-template-compiler 是 vue 模版编译插件,需要与 vue 版本保持一致,升级到 2.6.12

截屏2022-02-11 下午5.50.36.png

$ npm uninstall vue-template-compiler
$ npm install vue-template-compiler@2.6.12

❌ 控制台报错,el-x 元素未定义:须手动挂载 Elemet 到 Vue 全局

// main.js

import Element from 'element-ui'
...
Vue.use(Element)

❌ 编译报错:TypeError: VueLoaderPlugin is not a constructor

按照官方最新的使用文档,需要更改 webpack.conf 并指定 loader 插件,如下:

// webpack.config.js
const { VueLoaderPlugin } = require('vue-loader')

module.exports = {
  module: {
    rules: [
      // ... 其它规则
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      }
    ]
  },
  plugins: [
    // 请确保引入这个插件!
    new VueLoaderPlugin()
  ]
}

后发现当前 vue-loader 版本较低(v10.3.0),查看历史文档发现有所不同:

// webpack.config.js

module: {
  rules: [
    {
      test: /\.vue$/,
      loader: 'vue-loader',  // 配置这里
      options: {
        loaders: {
          js: 'babel-loader!eslint-loader'
        }
      }
    }
  ]
}

编译通过,控制台也没有错误和警告,除了有些 UI 不显示,如 Table 表格的某些字段,应该是 UI 库升级后 API 不兼容导致的,后面再慢慢修复吧。至此,老项目已经升级成功了!