记一次不小心搞坏了前几天已经解决掉的 ie 兼容问题, 简直要疯, 因为明天就要用!!!
就随便写点吧, 因为焦作和痛苦了几小时, 后面还有一大堆重要事呢(mockm 更新的版本貌似出问题了, 已有百来个人更新了此版本, 论回归测试的重要性).
本来之前花了两天解决了 ie 的兼容问题, 提交了代码. 一周后说要找个时间写一篇兼容文章, 为了文章结果可重现, 就删了依赖. 撤回了一些感觉无关的修改.
然后重新打包时, 在 ie 上跑不起来了, 报错 引发了异常但未捕获
, 还原代码也没有用, 还原不了到上次 build 时的文件状态了, 不知道是依赖问题还是有关键的修改没有保存到版本库.
- 尝试使用过
babel-polyfill
,core-js@3
,browserslist
一系列配置都不行 - 把代码中的 Symbol 换成普通的 key 也不行
- 网上测试过各种方案还是不行, 不知道是不是有某个第三方依赖使用了 Symbol 造成的
- 7 小时之间一直在测试各种方法, 连续几十次想放弃过后, 直接找了一个线上 cdn 解决了…
- 忘记了之前是怎么处理这个问题的, 没有使用什么线上 cdn, 应该关键代码也都全部提交的.
ie 报错 SCRIPT5022: 引发了异常但未捕获
但又不显示哪行错了, 是什么错. 这时候需要把脚本进入全局 try/catch:
try {
// 原脚本
} catch (error) {
console.log('error', error)
}
然后这时候才能得到具体错误, 例如 error TypeError: Incompatible receiver, Symbol required
.
这时候大约可以判断是 Symbol 语法不兼容导致, 引入对应的 polyfill 即可, 例如 https://cdn.jsdelivr.net/npm/symbol-es6/dist/symbol-es6.min.js
.