Sorry,標題黨了,本文僅介紹 Babel 相關生態和一些配置心得。javascript
babel-core
: 核心部分babel-cli
: 容許使用命令行babel-node
: babel-node 直接執行 es6/jsx 文件,自動加載 polyfillbabel-register
: 以文件形式實現 babel-node 功能,多用於實時編譯java
// 如下至關於 babel-node ./test --presets react require('babel-register')({ presets: ['react'] }); require('./test')
babel-plugin-external-helpers
: 把 helpers 收集到一個共享模塊或共享文件。babel-runtime
: polyfill (內含 core.js 和 regenerator)、helpers 集合babel-polyfill
: 和 babel-runtime
相似,但直接總體引入目標環境中babel-plugin-transform-runtime
: 和 babel-polyfill
同樣,可是不是一次性引入所有 polyfill,而是根據你該文件用到多少,引多少對比上述兩種 polyfill 方案,寫庫用 transform-runtime,寫應用就 babel-polyfillnode
基本都是使用 preset-env
+ 幾個 stage,通常來講到 stage-2
就能夠了。react
debug
: 用來看最終引入了哪些 polyfill、pluginsuseBuiltIns
: 必須配合 babel-polyfill
,貌似加入了此項之後,會獲得相似於 babel-plugin-transform-runtime
的效果。可是根據實驗得出,仍是 transform-runtime 在減肥上的效果更好。並且它不處理 helpers,你仍是不能省略 external-helpers 這個插件modules
: 是否編譯模塊導入導出語句loose
: 寬鬆模式,編譯的結果在運行時,其內部並不嚴格遵循 es6 標準exclude/include
: 編譯時排除或使用某插件這個 env 和上面那個不一樣... 這裏的 env 是指,一個 babel 文件針對不一樣環境(讀取 NODE_ENV
、BABEL_ENV
),作不一樣配置webpack
{ "env": { "development": { "presets": [ [ "env", ] ] }, "production": { ... } } }
babel-plugin-transform-remove-console
babel-plugin-transform-decorators-legacy
babel-preset-minify
babel-preset-react
已經包含了一組 pluginsgit
preset-flow
: 編譯 flowsyntax-jsx
: 識別 jsx 語法transform-react-jsx
: 編譯 jsxtransform-react-display-name
: 自動添加組件的 displayName但上面這些只是知足基礎編譯而已,你額外能夠添加下面這個 preset 提升 React 應用的性能es6
npm i babel-preset-react-optimize
項目主頁有詳細的說明,簡要歸納下github
transform-react-constant-elements
transform-react-remove-prop-types
transform-react-pure-class-to-function