preset與plugin的關係:html
轉換插件
轉換插件
或者polyfill
例如,默認狀況下babel能夠將
箭頭函數
,class
等語法轉換爲ES5兼容的形式,可是卻不能轉換Map
,Set
,Promise
等新的全局對象,這時候就須要使用polyfill
去模擬這些新特性node
package.json
添加所需的依賴babel-plugin-transform-xxx
.babelrc
中的plugins
項指定使用babel-plugin-transform-xxx
插件import/require
, .babelrc
中不須要指定useBuiltIns
, webpack.config.js
中不須要作額外處理,一切由babel插件完成轉換配置完一個轉換插件後, 代碼中每一個使用這個API的地方的代碼都會被轉換成使用
polyfill
中實現的代碼webpack
相比方法1, 至關於抽離了公共模塊, 避免了重複引入, 從一個叫core.js
的庫中引入所需polyfill(一個國外大神用ES3寫的ES5+ polyfill)web
package.json
中添加依賴babel-plugin-tranform-runtime
以及 babel-runtime
.babelrc
中配置插件:"plugins": ["transform-runtime"]
import/require
額外東西, webpack
也不須要作額外配置polyfill
的對象是臨時構造並被import/require
的,並非真正掛載到全局[].include(x)
, 依賴於Array.prototype.include
仍沒法使用<head>
標籤中引入babel-polyfill.js
(CDN或本地文件都可)package.json
中添加babel-polyfill
依賴, 在webpack
配置文件增長入口: 如entry: ["babel-polyfill",'./src/app.js']
, polyfill將會被打包進這個入口文件中, 並且是放在文件最開始的地方package.json
中添加babel-polyfill
依賴, 在webpack
入口文件頂部使用import/require
引入,如`import 'babel-polyfill'``console
也可使用packge.json
引入依賴babel-preset-env
.babelrc
中使用配置preset-env
useBuiltins
選項爲true
webpack
入口文件中使用import/require
引入polyfill
, 如import 'babel-polyfill'
babe
l會根據指定的瀏覽器兼容列表自動引入全部所需的polyfill
, 無論你代碼中有沒有使用{
"presets": [ ["env", { "modules": false, "targets": { "browsers": ["ie >=9"] }, "useBuiltIns": true, "debug": true }] ] }
按需(按照指定的瀏覽器環境所需)引入polyfill
, 必定程度上減小了沒必要要polyfill
的引入json
配置簡單, 無需對webpack
作額外的配置瀏覽器
注意:babel
polyfill
在全部其它腳本以前被執行(首行import
或者設置爲html的第一個<head>
標籤)CDN
方式提供的polyfill
, 可根據瀏覽器UserAgent
自動返回合適的polyfill
, 詳細內容自行google