美文网首页
旧项目webpack转vite出现的诸多问题

旧项目webpack转vite出现的诸多问题

作者: 月光一族 | 来源:发表于2022-08-21 15:08 被阅读0次

     最近在迁移一个很多年的旧项目,webpack编译很慢,就迁移到了vite,加快了编译速度,于此同时,遇到很多vite3与vue2及其他框架不兼容的问题,下面会一一列举出来。vue3不再需要vue2的data和methods,而是提供了setup函数,按目前项目来讲,项目由vue2转vue3可行但难度不小,把optionApi的methods中抽离成compositionApi的hook,把data用...toRefs转成普通对象,还有一些以前vue2怪异用法增加了难度,所以当前只使用了vite3+vue2。下面是迁移后一些框架兼容问题:

    版本:vite@3.0.7 ,vue@2.5.21,element-ui@2.15.6, core-js@3.24.1, vite-plugin-html@3.2.0,vite-plugin-vue2@2.0.2,vue-template-compiler@2.5.21

    1、xlsx-style的问题

    Can't resolve './cptable' in '**\node_modules\xlsx-style\dist'

    解决方案:

    1、cpexcel.js 的807行 var cpt = require('./cpt' + 'able') 改为 var cpt = require('./cpexcel');

    2、xlsx.js中var current_codepage = 1200, current_cptable;加上一个cptable;即var current_codepage = 1200, current_cptable, cptable;

    可以用我改好的npm install xlsx-style-hzx

    2、qrcodejs2出现的问题

    this._android && this._android <=2.1 出现的问题

    解决方案:

    1、改成this && this._android <=2.1即可,把前面的_android去掉

    可以用我改好的npm install qrcodejs_hzx

    3、css、sass中的深层/deep/、>>>问题

    不能使用/deep/ 、>>>这种css的深层方式了

    要全部改为 ::v-deep,记得在::v-deep后面加上空格,这是必须的,不然编译失败

    4、require引入图片的问题

    require是commonjs的模块化方案,支持动态引入,但vite不支持require

    解决方案:

    把require('/image/logo.png') 改为 new URL('/image/logo.png', import.meta.url).href;

    还有依赖引入由 const x = require('x') 改为 import x from 'x'

    5、vite引入antv/g2出现的lineStyle问题处理 Cannot create property 'lineStyle' on boolean 'false'" 和 Cannot create property 'lineStyle' on boolean 'false',这个问题困扰了我一周,后来直接拿antv/g2的案例放下来居然成功,那就是代码有问题,解决方案如下

    改成vite后,旧案例都会报上面这两个错误,当然我都没有去看完整的antv/g2文档,只是引进了一个案例,然而新引进的案例能够完整展示,就一个一个排除解决了,网上都找不到答案,看这里就行

    旧项目的代码:

    chart.tooltip(true, { crosshairs: { type: 'line' }})

    改为:

    chart.tooltip(true, { crosshairs: true})

    6、vite@3.0.7 + vue@2.6.17 + element-ui@2.15.6存在列表table不显示的问题

    解决方案:

    1、安装element-ui@2.15.6: npm install element-ui@2.15.6

    2、安装element-ui-hzx: npm install element-ui-hzx

    3、按需引入element-ui的时候,不要引入Table, TableColumn,这两个从element-ui-hzx引入,代码如下:

    下面的代码都要引入,我已经在./element-ui中按需引入了element-ui所需的组件,去官网找一下就有

    //element-ui2.15.6

    import './element-ui';

    import "element-ui/lib/theme-chalk/index.css";

    //element-ui-hzx

    //table.css和 table-column.css用 element-ui-hzx的;

    import {Table, TableColumn} from 'element-ui-hzx'

    import "element-ui-hzx/lib/theme-default/table.css"; 

    import "element-ui-hzx/lib/theme-default/table-column.css";

    Vue.use(Table);

    Vue.use(TableColumn);

    7、文件引入的后缀问题

    在vite.config的resolve中添加以下代码:

    extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'],

    同时,也会出现process问题。在vite.config中添加以下代码:

    define: { 'process.env': { __ENV_OBJECT: env_object,},},

    8、index.html中不在需要mian.js,要删除

    在vite.config中添加:

    import { createVuePlugin } from 'vite-plugin-vue2';

    import { createHtmlPlugin } from 'vite-plugin-html';

    plugins: [ createVuePlugin(), createHtmlPlugin({ entry: 'src/main.js', inject: { data: { title: '', }, }, }), ...plugins,],

    相关文章

      网友评论

          本文标题:旧项目webpack转vite出现的诸多问题

          本文链接:https://www.haomeiwen.com/subject/aneigrtx.html