vue2+element-ui+vue-cli升级至vue3+element-plus+vite排雷

730 阅读1分钟

当我需要引入某个文件夹下面的所有js时

const modulesFiles = require.context('./modules', true, /.js$/) // webpack
const modulesFiles = import.meta.globEager("./module/*.js") // vite

环境变量

process.env.xx需要改成import.meta.env.xximport.meta.env.xx不能放在 vite.config.js

vite不允许省略.vue后缀,不能配置extensions
必须加上emits,表示自定义事件
所有的双向绑定中的value需要改成modelValue
所有slot="title"的写法都必须改成#title,而且必须放置在template标签里面
没有require,必须使用import
如果settings文件里面只有一个export,不能使用import { title } from '@/config/settings',必须使用import * as settings from '@/config/settings'; const { title } = settings;
process.env需要修改成import.meta.env
类似VUE_APP_ENVVUE 开头的都需要改成以 VITE 开头的
碰到没有export default之类的问题,需要使用import * as xx from 'xxx'的写法
element-plus的主题修改,可以直接通过修改--el开头的命名的样式值

element-plus的icon改成了新的形式,需要自己去看文档

element-plus的组件默认配置

const context = app._context;
context.components.ElDialog.props.closeOnClickModal.default = false;
context.components.ElCard.props.shadow.default = false;
context.components.ElLink.props.underline.default = false;
context.components.ElLink.props.type.default = 'primary';
context.components.ElDrawer.props.closeOnClickModal.default = false;

element-plus的组件中,涉及到.sync的写法都要改成v-model形式

比如ElDialog组件的visible要改成v-model ElPagination组件的current-page.sync要改成v-model:current-page

checkAuth的全局配置报错,找不到$checkAuth,原因是app配置全局的时候放在了其他文件,且createApp时没有传App组件,导致this始终获取不到

监听数组时必须加上deep:true

eslint报import/no-unresolved的错误

过程:用了@来做vite的alias,但是eslint一直提示报错

解决办法

// eslintrc.js
module.exports = {
    //之前的内容,这里已省略
    settings: {
        'import/resolver': {
            alias: {
                map: [
                    ['@', './src'],
                ],
                extensions: ['.ts', '.js', '.jsx', '.json', '.vue'],
            },
        },
    },
};

安装alias的依赖

npm add eslint-import-resolver-alias -D

还存在的问题

1. 开发环境下,路由切换初始很慢,需要顺畅些

2. element的一些样式改了,需要自己去慢慢查

其实还有很多问题,只是很快就解决了,然后就忘了记录下来