babel的配置能夠寫在 package.json中,以下面css
// .babelrc { "babel": { presets: ["@babel/preset-env", "@babel/preset-stage-2"] } }
也能夠寫在一個.babelrc的JSON配置文件中前端
{ "presets": ["@babel/preset-env", "@babel/preset-stage-2"] }
你能夠像上面同樣直接指定presets爲["@babel/preset-env", "@babel/preset-stage-2"],也能夠爲每個preset添加配置選項。(使用數組,第一個元素表示preset的名字,第二個元素表示配置項)node
{ "presets": [ ["@babel/preset-env", { }], "@babel/preset-stage-2" ] }
presets 的編譯順序是反向的,所以你應該把"stage-2"放在"env"後面。webpack
{ "presets": [ ["@babel/preset-env": { "targets" : "last 2 versions, not dead" }] ] } // 或者直接指定須要兼容的瀏覽器 { "presets": [ ["env": { "targets" : { "chrome": "58", "ie": "11" } }] ] } // 或者是在targets.browsers 中指定 { "presets": [ ["env": { "targets" : { "browsers": "last 2 versions", "esmodules": true, // 指定該選項,將會忽略browserslist, 僅支持那些那些原生支持es6 module的瀏覽器 "safari": true , // 啓用safari前沿技術 "node": "true" || "current" //兼容當前node版本代碼 } }] ] }
babel使用的瀏覽器查詢是來自於browserslist項目。這個項目同時被不少前端工具庫諸如auto-prefixer,postcss使用。最好的指定browserslist的方法是使用一個.browserslistrc 配置文件。它能夠被項目中多種工具共享。git
last 2 vsersions not dead
你可使用es6
npx browserslist
來查看你查看當前項目的browserslisggithub
或者是在browserslist online tool 工具中查看web
"amd" | "umd" | "systemjs" | "commonjs" | "cjs" | "auto" | false, defaults to "auto"
指定將es6 modules 轉換爲什麼種模塊規範。chrome
通常在webpack 項目中,咱們會將此參數設置爲false,既將module交由webpack處理,而不是babel。npm
若是設置爲false, 將不轉換。這在node項目中如mocha測試中將不會轉換import/export,可能會出錯
"usage" | "entry" | false, defaults to false This option configures how @babel/preset-env handles polyfills.
"entry": 在入口文件中加入全部的內置類型
若是在.babelrc中指定useBuiltIns: 'entry', 則應該在項目代碼的頂部引入babel-polyfill
import "@babel/polyfill"
表示全量引入。
"usage": 只在當前文件中加入該文件用到的內置類型的polyfill。
設置爲usage 不須要在頂部引入polyfill
"false": 不自動加入內置類型的polyfill。
該特性babel 7 中有效, 測試地址
npm install --save-dev @babel/plugin-transform-runtime npm install --save @babel/runtime @babel/runtime-corejs2 // .babelrc { "plugins": [["@babel/plugin-transform-runtime", { "corejs": 2, "helpers": true }]] }
@babel/plugin-transform-runtime這個插件主要作了三件事
@babel/runtime 和 @babel/polyfill 雖然都是爲內置類型打上墊片,可是@babel/runtime是在模塊內起做用,不會污染全局的Promise,Map...。因此實例的方法不會被polyfill
'123'.padStart()
@babel/plugin-transform-runtime 能夠和useBuiltIns一塊兒使用,做用的順序按照plugins --> presets 的順序,也就是先使用@babel/plugin-transform-runtime 打上墊片,而後再使用@babel/polyfill 再打上一次墊片。