我的前端项目用的是vuetify3+vite,
我想要把新项目跑在微信开发者工具上,来测试一些微信接口
但是在浏览器中运行是正常的,开发者工具中运行后页面无法加载,控制台报错
vue-router.mjs:3524 TypeError: globalStack.at is not a function at stack.ts:57
但是打包上传后的项目又不会报错,我试过多种浏览器都不会报错,这种情况似乎只出现在了微信开发者工具中的浏览器中,并且仅发生在服务器端渲染和生产模式下。公司的大神研究了一早上才找到的解决方式,我这算是借花献佛了,自己也记录一下
这个报错似乎和vuetify3组件有某些关系,类似v-autocomplete组件,v-select组件,我猜想可能是因为vuetify3组件底层使用到了.at()这个函数去处理数组,达到选中下拉选项的目的,但是这个函数又是后面新增的特性,旧的浏览器无法兼容识别这个函数导致报错
vuetify中官网有支持的浏览器类型 点击这里
它说明了,如果要支持旧版浏览器也许可以通过这两种插件来实现,在你必须要使用vuetify3的情况下,如果出现了这个报错,你可以参考它说的这个polyfills和PostCSS plugins来解决旧版浏览器兼容问题,
我踩过的坑,你就别踩了
如果你的情况和我是一致的,以下是我自己试过的一些没有作用的方法
(全网我都替你们找过了,没有有用的解决方法,我本人也折腾了一早上) 😭
- 有人说升级node版本到16.6以上,我自己本身是18.0.0,所以这个方法并没有作用
- 还有人说是依赖不是最新,或则依赖间有冲突,所以我试了他们推荐得这种方法来更新依赖,也没有效果
npm install -g npm-check-updates
ncu
ncu -u
- 我还试过更新微信开发者工具到最新版本,并且后面还不行又重新卸载了,删除得干干净净再安装,这个也不行
- 还有说设置微信开发者工具选项的,都没有任何效果
咱也不太懂,只管解决问题,报错指向的都是 at() 函数,at()函数是新特性,微信开发者工具中的浏览器不兼容这种方式,所以导致的报错,也不知这个开发者工具的浏览器内核是多少的,肯定是挺老的
至于为什么打包后这个情况会消失,大概是因为,一是平时我们正式使用的浏览器都比较新,二是可能vite打包会自动处理兼容的情况,具体的就不得而知了
解决方式
既然是浏览器的兼容问题,只要.at()类似的报错应该都可以使用这种方式
这里的
core-js
应该和vuetify官网中推荐的的polyfills
有同样的效果
仅需要两个步骤
安装core-js (我用的是pnpm,根据自己情况使用)
pnpm add core-js --save
在main.js中引入
import 'core-js/features/array/at'
而后重新运行项目即可在微信开发者中运行