vue3 不支持 IE11的本质

3,945 阅读2分钟

文章很水,核心只有一句:由于 ES5 的限制,Proxy 语法无法用 ES5 写出来(Proxies cannot be transpiled or polyfilled)

背景

近日,组群就 vue 3 的一段对话:

BOSS: 咱们团队哪个项目用 Vue 3 了 (啥背景没说,底层员工现在毛线信息都得不到)

组长 A: 我们用了,微前端主项目用的 Vue 3 (看那,我的小组多先进)

组长 B:Vue 3 不支持 IE 11 (老姐你用错了,抖什么机灵)

。。。

我的问题

很菜的我突然来了好奇心: Vue 3 为啥不支持 IE11,兼容性问题?不对、兼容性问题 polyfill 应该可以处理。

想在群里问,但是我职级最低没人鸟 ~ 小组 C 的群问了下,然后组长 C (我组长)回复说:

不支持 IE 是结果,要分析原因可不能 “执果索因” -- 一般随意归因出来的都不准确。 想了解为什么,不妨去读下 RFC相关讨论

我怀疑他在抖机灵,好像又不是。

不支持 IE11 的原因

所以我硬着头皮看了下英文,总结一下原因有三:

  1. Proxy 更香,Vue 团队想用
  2. Vue 团队想为干掉 IE 贡献一份力量
  3. 若支持,开发和维护成本都太高。

Vue 2 基于 ES5 getter/setters,Vue 3 基于 Proxy,若实现他们要逻辑双写。Vue 团队不想因为 IE11 做更多的牺牲, 如果未来再出个 Super Proxy 我就太难了。

Babel 呢

问题又来了,Proxy 的问题用 Babel polyfill 一下就完了吗?

Babel...这个问题我不管

from babel

Unsupported feature Due to the limitations of ES5, Proxies cannot be transpiled or polyfilled. See support in various JavaScript engines.

终于,我找到了根因:

Babel 的 transpiled 和 polyfilled 都没办法支持 Proxy 的功能特性。ES6 是 ES5 的后浪,不是闹的。

涨知识了,JS 的世界还有 Babel 搞不定的东西。

文章很水,核心只有一句:由于 ES5 的限制,Proxy 功能特性无法用 ES5的语法写出来(Proxies cannot be transpiled or polyfilled)

尤雨溪:Vue3 考虑彻底放弃 IE 浏览器