文章很水,核心只有一句:由於 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 的原因
所以我硬著頭皮看了下英文,總結一下原因有三:
- Proxy 更香,Vue 團隊想用
- Vue 團隊想為幹掉 IE 貢獻一份力量
- 若支援,開發和維護成本都太高。
Vue 2 基於 ES5 getter/setters,Vue 3 基於 Proxy,若實現他們要邏輯雙寫。Vue 團隊不想因為 IE11 做更多的犧牲, 如果未來再出個 Super Proxy 我就太難了。
Babel 呢
問題又來了,Proxy 的問題用 Babel polyfill 一下就完了嗎?
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)