Babel轉碼器
es6的一個轉碼器,可以將ES6程式碼轉為ES5程式碼,從而在現有環境下執行。
-
首先專案內安裝npm install --save-dev babel-cli babel-preset-env,
-
為什麼不安裝在全域性? 答:因為安裝在全域性就無法支援不同專案使用不同版本的babel
-
babel-preset-env跟babel-prset-latest的配置是一樣的,其實就是在特定平臺上執行特定的轉碼規則,說白了就是按需轉碼的意思
-
targets 指定執行環境 targets.node 指定node版本 targets.browsers 指定瀏覽器版本 modules 指定何種形式的模組,設定為false表示不轉碼模組
具體配置書寫方式如下
- babel-core 如果某些程式碼需要呼叫babel的api進行轉碼,就要使用babel-core模組
var babel = require('babel-core'); // 字串轉碼 babel.transform('code();', options); // => { code, map, ast } // 檔案轉碼(非同步) babel.transformFile('filename.js', options, function(err, result) { result; // => { code, map, ast } }); // 檔案轉碼(同步) babel.transformFileSync('filename.js', options); // => { code, map, ast } // Babel AST轉碼 babel.transformFromAst(ast, code, options); // => { code, map, ast }
- babel-register模組改寫require命令,為它加上一個鉤子。此後每當使用require載入.js,.jsx,.es和.es6字尾名檔案,就會先用babel進行轉碼,但是隻會對require命令載入的檔案轉碼,而不會對當前檔案轉碼。因為是實時轉碼,所以只適合在開發環境中用。例如下面只會對index.js進行實時轉碼
require("babel-register"); require("./index.js");
- babel只轉換新的javascript句法,而不轉換新的api,比如Iterator、Generator、Set、Maps、Proxy、Symbol、Promise等全域性物件以及一些定義在全域性物件上的方法(Object.assign)都不會轉碼,如果想要轉碼,必須使用babel-polyfill方法
import 'babel-polyfill'; //或者 require('babel-polyfill');