最近項目裏出現一個bug,低版本瀏覽器裏某個頁面報錯,Uncaught TypeError: Object [object Array] ha no method 'find'。
看到這個錯誤第一個反應是運用了ES6關於Array新API中的find函數。可是細想了下,明明用了Bable,爲啥不能編譯爲ES5。通過搜索資料找到了緣由,Babel 默認只轉碼 ES6 的新語法(syntax),而不轉換新的 API,好比 Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise 等全局對象,以及一些定義在全局對象上的方法(好比 Object.assign、Array.from)都不會轉碼。若是想讓這些方法運行,必須使用 babel-polyfill,爲當前環境提供一個墊片。html
使用babel-polyfill有如下幾種方式:node
import 'babel-polyfill'
`一次性解決全部兼容性問題,並且是全局的,瀏覽器的console也可使用webpack
一個CDN方式提供的polyfill, 可根據瀏覽器UserAgent自動返回合適的polyfillweb
在webpack入口文件中使用import/require引入polyfill, 如import 'babel-polyfill'
以上配置完成以後, babel會根據指定的瀏覽器兼容列表自動引入全部所需的polyfill, 無論你代碼中有沒有使用json