爲何要使用babel-polyfill?git
Babel是一個普遍使用的轉碼器,能夠將ES6代碼轉爲ES5代碼,從而能夠在現有環境執行,因此咱們能夠用ES6編寫,而不用考慮環境支持;github
有些瀏覽器版本的發佈早於ES6的定稿和發佈,所以若是在編程中使用了ES6的新特性,而瀏覽器沒有更新版本,或者新版本中沒有對ES6的特性進行兼容,那麼瀏覽器就會沒法識別ES6代碼,例如IE9根本看不懂代碼寫的let和const是什麼東西?只能選擇報錯,這就是瀏覽器對ES6的兼容性問題;編程
Babel 默認只轉換新的 JavaScript 句法,而不轉換新的 API,好比 Iterator、Generator、Set、Map、Proxy、Reflect、Symbol、Promise 等全局對象,以及一些定義在全局對象上的方法(好比 Object.assign)都不會轉碼。Babel 默認不轉碼的 API 很是多,詳細清單能夠查看 definitions.js 文件。瀏覽器
由於這是一個 polyfill (它須要在源代碼以前運行),所以咱們須要讓它成爲一個 dependency(上線時的依賴),而不是一個 devDependency(開發時的依賴)babel