美文网首页
旧项目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