標籤(空格分隔): babelvue
.babelrc
文件。 若是不存在,它會遍歷目錄樹,直到找到一個 .babelrc 文件,或一個 package.json 文件中有 "babel": {}babel6
將babel全家桶拆分紅了許多不一樣的模塊(rc是run command的縮寫)babel-loader:使用es6或加載模塊時,對es6代碼進行預處理,轉爲es5語法。
babel-core:容許咱們去調用babel的api,能夠將js代碼分析成ast(抽象語法樹),方便各個插件分析語法進行相應的處理.
babel-preset-env:推薦preset,好比es2015,es2016,es2017,latest,env(包含前面所有)
babel-polyfill:它效仿一個完整的ES2015+環境,使得咱們可以使用新的內置對象好比 Promise,好比 Array.prototype.includes 和生成器函數(提供給你使用 regenerator 插件)。爲了達到這一點, polyfill 添加到了全局範圍,就像原生類型好比 String 同樣。
babel-runtime babel-plugin-transform-runtime:這個插件能自動爲項目引入polyfill和helpers
{ "presets": [], "plugins": [] }
presets
字段設定轉碼規則,官方提供如下的規則集,按需安裝。# ES2015轉碼規則 babel-preset-es2015 # react轉碼規則 babel-preset-react # ES7不一樣階段語法提案的轉碼規則(共有4個階段) babel-preset-stage-0 babel-preset-stage-1: draft - 必須包含2個實驗性的具體實現,其中一個能夠是用轉譯器實現的,例如Babel。 babel-preset-stage-2: candidate - 至少要有2個符合規範的具體實現。 babel-preset-stage-3
配置:node
{ "presets": [ "es2015", "stage-2" ], "plugins": [] }
babel-preset-env
此段內容來自於babel到底該如何配置?react
babel-preset-env
// cnpm install -D babel-preset -env { "presets": [ ["env", { "targets": { //指定要轉譯到哪一個環境 //瀏覽器環境 "browsers": ["last 2 versions", "safari >= 7"], //node環境 "node": "6.10", //"current" 使用當前版本的node }, //是否將ES6的模塊化語法轉譯成其餘類型 //參數:"amd" | "umd" | "systemjs" | "commonjs" | false,默認爲'commonjs' "modules": 'commonjs', //是否進行debug操做,會在控制檯打印出全部插件中的log,已經插件的版本 "debug": false, //強制開啓某些模塊,默認爲[] "include": ["transform-es2015-arrow-functions"], //禁用某些模塊,默認爲[] "exclude": ["transform-es2015-for-of"], //是否自動引入polyfill,開啓此選項必須保證已經安裝了babel-polyfill //參數:Boolean,默認爲false. "useBuiltIns": false }] ] }
{ "presets": [ ["env", { "modules": false, "targets": { "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] } }], "stage-2" ], "plugins": [ "transform-vue-jsx", "transform-runtime", "syntax-dynamic-import", "transform-es2015-modules-commonjs" ] }
此段內容來自於babel到底該如何配置?es6
{ "plugins": [ ["transform-es2015-arrow-functions", { "spec": true }] ] }
transform-runtime
,這個插件能自動爲項目引入polyfill
和helpers
transform-runtime
這個插件依賴於babel-runtime
babel-runtime由三個部分組成:web
core-js
core-js極其強悍,經過ES3實現了大部分的ES五、六、7的polyfill。
regenerator
regenerator來自facebook的一個庫,用於實現 generator functions。
helpers
babel的一些工具函數,這個helpers和使用babel-external-helpers生成的helpers是同一個東西
{ "plugins": [ ["transform-runtime", { "helpers": false, //自動引入helpers "polyfill": false, //自動引入polyfill(core-js提供的polyfill) "regenerator": true, //自動引入regenerator }] ] }
比較transform-runtime與babel-polyfill引入墊片的差別:npm
使用runtime是按需引入,須要用到哪些polyfill,runtime就自動幫你引入哪些,不須要再手動一個個的去配置plugins,只是引入的polyfill不是全局性的,有些侷限性。並且runtime引入的polyfill不會改寫一些實例方法,好比Object和Array原型鏈上的方法,像前面提到的Array.protype.includes。
babel-polyfill就能解決runtime的那些問題,它的墊片是全局的,並且全能,基本上ES6中要用到的polyfill在babel-polyfill中都有,它提供了一個完整的ES6+的環境。babel官方建議只要不在乎babel-polyfill的體積,最好進行全局引入,由於這是最穩妥的方式。
通常的建議是開發一些框架或者庫的時候使用不會污染全局做用域的babel-runtime,而開發web應用的時候能夠全局引入babel-polyfill避免一些沒必要要的錯誤,並且大型web應用中全局引入babel-polyfill可能還會減小你打包後的文件體積(相比起各個模塊引入重複的polyfill來講)。
{ "parser": "babel-eslint", "rules": { ... } }
"scripts": { "lint": "eslint --ext .js,.vue src", },
部分參考:
babel到底該如何配置?json