最近項目須要兼容ie(真是的萬惡的ie..),打包後的項目一直報錯,緣由就是ie不支持不少es6的寫法,好比箭頭函數等。使用babel解決ie兼容也應該是目前大多數都採起的方案。node
如下爲本身總結的解決過程,如有不對還望多多指正。webpack
npm install --save-dev babel-core babel-loader@7 babel-preset-env
複製代碼
注意:安裝babel-loader時,須要指定7.x的版本,不然在打包過程當中會報錯,我安裝的版本以下es6
"babel-core": "^6.26.3", "babel-loader": "^7.1.5", "babel-preset-env": "^1.7.0", 複製代碼
.babelrc
配置文件,內容以下{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}]
]
}
複製代碼
module:{
rules:[
{
test:'/\.js$/',
use:['babel-loader'],
exclude:/node_module/
}
]
}
複製代碼
至此已經用 babel 在構建過程當中轉譯語法糖,好比說將 ES7/ES6/JSX 中的語法部分(例如箭頭函數)轉譯成 ES5。 但若要使用像 Promise 或 WeakMap 這樣的新內置函數,像 Array.from
或 Object.assign
這樣的靜態方法,像Array.prototype.includes
這樣的實例方法,以及 generator 函數等,還須要引入一個 babel-polyfill,須要注意 polyfill 則是解決原生對象的問題,好比說你的瀏覽器不支持 Promise,babel 就給你建一個 Promise 供你使用。因此,polyfill須要在瀏覽器運行的,否則怎麼把原生對象插進全局變量呢?web
npm install --save babel-polyfill
複製代碼
注意
--save
選項而不是--save-dev
,由於這是一個須要在源代碼以前運行的shell
import 'babel-polyfill'
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
},
"useBuiltIns": "usage"
}]
]
}
複製代碼
若是咱們沒有將
"useBuiltIns"
選項的設置爲"usage"
,就必須在其餘代碼以前 require 一次完整的 polyfillnpm
如今 webpack 打包後,項目應該是能夠正常在ie下正常使用es6了json