- 安裝:npm i -D babel-core babel-loader babel-plugin-transform-runtime
- 安裝:npm i -D babel-preset-es2015 babel-preset-stage-0
- 安裝:npm i -S babel-runtime
把 js 代碼分析成 ast (抽象語法樹, 是源代碼的抽象語法結構的樹狀表現形式),方便各個插件分析語法進行相應的處理。有些新語法在低版本 js 中是不存在的,如箭頭函數,rest 參數,函數默認值等,這種語言層面的不兼容只能經過將代碼轉爲 ast,再經過
語法轉換器
分析其語法後轉爲低版本 js。javascript
babel-plugin-* 表明了一系列的轉碼插件
有了 babel-plugin 系列,能夠按需配置本身想要的特性,如果想搭個 es6 環境,一個個地配置各個插件,我猜你會瘋掉。babel-preset 系列就能夠知足咱們的需求,babel-preset 系列打包了一組插件,相似於餐廳的套餐。如 babel-preset-es2015 打包了 es6 的特性,babel-preset-stage-0 打包處於 strawman 階段的語法java
babel-runtime 在代碼中中直接引入 helper 函數,意味着不能共享,形成最終打包出來的文件裏有不少重複的 helper 代碼。因此,babel 又開發了 babel-plugin-transform-runtime,這個模塊會將咱們的代碼重寫,如將 Promise 重寫成 _Promise(只是打比方),而後引入_Promise helper 函數。這樣就避免了重複打包代碼和手動引入模塊的痛苦。node
/* webpack.config.js */
module: {
rules: [
// exclude 排除,不須要編譯的目錄,提升編譯速度
{test: /\.js$/, use: 'babel-loader', exclude: /node_modules/}
]
}
在項目根目錄中新建.babelrc配置文件webpack
// 未來babel-loader運行的時候,會檢查這個配置文件,並讀取相關的語法和插件配置
{
"presets": ["es2015", "stage-0"],
"plugins": ["transform-runtime"]
}
實現瀏覽器對不支持API的兼容(兼容舊環境、填補)es6
- 命令: npm i -S babel-polyfill
- 命令:npm i -D babel-plugin-transform-runtime 和 npm i -S babel-runtime
polyfill 污染全局環境、支持實例方法
runtime 不污染全局環境、不支持實例方法web
-* 表明了一系列的轉碼插件
有了 babel-plugin 系列,能夠按需配置本身想要的特性,如果想搭個 es6 環境,一個個地配置各個插件,我猜你會瘋掉。babel-preset 系列就能夠知足咱們的需求,babel-preset 系列打包了一組插件,相似於餐廳的套餐。如 babel-preset-es2015 打包了 es6 的特性,babel-preset-stage-0 打包處於 strawman 階段的語法npm
babel-runtime 在代碼中中直接引入 helper 函數,意味着不能共享,形成最終打包出來的文件裏有不少重複的 helper 代碼。因此,babel 又開發了 babel-plugin-transform-runtime,這個模塊會將咱們的代碼重寫,如將 Promise 重寫成 _Promise(只是打比方),而後引入_Promise helper 函數。這樣就避免了重複打包代碼和手動引入模塊的痛苦。瀏覽器
/* webpack.config.js */
module: {
rules: [
// exclude 排除,不須要編譯的目錄,提升編譯速度
{test: /\.js$/, use: 'babel-loader', exclude: /node_modules/}
]
}
在項目根目錄中新建.babelrc配置文件babel
// 未來babel-loader運行的時候,會檢查這個配置文件,並讀取相關的語法和插件配置
{
"presets": ["es2015", "stage-0"],
"plugins": ["transform-runtime"]
}
實現瀏覽器對不支持API的兼容(兼容舊環境、填補)app
- 命令: npm i -S babel-polyfill
- 命令:npm i -D babel-plugin-transform-runtime 和 npm i -S babel-runtime
polyfill 污染全局環境、支持實例方法 runtime 不污染全局環境、不支持實例方法