ECMAScript 6-簡介及Babel 轉碼器
阿新 • • 發佈:2020-09-01
ECMAScript 6簡介
ECMAScript 6.0(以下簡稱 ES6)是 JavaScript 語言的下一代標準。它的目標,是使得 JavaScript 語言可以用來編寫複雜的大型應用程式,成為企業級開發語言。
//檢視已經實現的es6特性
$ node --v8-options | grep harmony
//檢視你正在使用的node對es6的支援程度
$ npm install -g es-checker
$ es-checker
Babel 轉碼器
配置.babelrc
//1. 設定轉碼規則和外掛 { "presets": [], "plugins": [] }
//2. 安裝presets欄位設定轉碼規則 # 最新轉碼規則 $ npm install --save-dev babel-preset-latest # react 轉碼規則 $ npm install --save-dev babel-preset-react # 不同階段語法提案的轉碼規則(共有4個階段),選裝一個 $ npm install --save-dev babel-preset-stage-0 $ npm install --save-dev babel-preset-stage-1 $ npm install --save-dev babel-preset-stage-2 $ npm install --save-dev babel-preset-stage-3
//3. 將這些規則加入
{
"presets": [
"latest",
"react",
"stage-2"
],
"plugins": []
}
babel-cli
基本用法
# 轉碼結果輸出到標準輸出 $ babel example.js # 轉碼結果寫入一個檔案 # --out-file 或 -o 引數指定輸出檔案 $ babel example.js --out-file compiled.js # 或者 $ babel example.js -o compiled.js # 整個目錄轉碼 # --out-dir 或 -d 引數指定輸出目錄 $ babel src --out-dir lib # 或者 $ babel src -d lib # -s 引數生成source map檔案 $ babel src -d lib -s
全域性安裝
$ npm install --global babel-cli
安裝到專案中
$ npm install --save-dev babel-cli
//改寫package.json
{
// ...
"devDependencies": {
"babel-cli": "^6.0.0"
},
"scripts": {
"build": "babel src -d lib"
},
}
//實現轉碼
$ npm run build
babel-node
基本用法
//進入REPL環境
$ babel-node
//執行ES6 語法的程式碼或指令碼
> (x => x * 2)(1)
2
//直接執行ES6指令碼
$ babel-node es6.js
2
//退出 REPL 環境
$ .exit
//相關指令
$ .help //幫助指令
$ .editor //編輯模式指令,在此模式下可以編寫多行命令
$ .save //把在 REPL 環境中執行的指令,一次性輸出儲存到指定檔案中
$ .load //會載入指定的 js 檔案並執行
安裝到專案中
$ npm install --save-dev babel-cli
//改寫package.json
{
"scripts": {
"script-name": "babel-node script.js"
}
}
//使用babel-node替代node,這樣script.js本身就不用做任何轉碼處理
babel-register
安裝
$ npm install --save-dev babel-register
載入與使用
require("babel-register");
require("./index.js");
//然後,就不需要手動對index.js轉碼了
babel-core
安裝
$ npm install babel-core --save
呼叫
var babel = require('babel-core');
// 字串轉碼:transform()
babel.transform('code();', options);
// 檔案轉碼(非同步):transformFile()
babel.transformFile('filename.js', options, function(err, result) {
result;
});
// 檔案轉碼(同步):transformFileSync()
babel.transformFileSync('filename.js', options);
// Babel AST轉碼:transformFromAst()
babel.transformFromAst(ast, code, options);
配置物件
options
,可以參看官方文件http://babeljs.io/docs/usage/options/。
一個例子
var es6Code = 'let x = n => n + 1';
var es5Code = require('babel-core')
.transform(es6Code, {
presets: ['latest']
})
.code;
// '"use strict";\n\nvar x = function x(n) {\n return n + 1;\n};'
babel-polyfill
安裝
$ npm install --save babel-polyfill
使用
import 'babel-polyfill';
// 或者
require('babel-polyfill');
Babel 預設不轉碼的 API 非常多,詳細清單可以檢視
babel-plugin-transform-runtime
模組的definitions.js檔案。
瀏覽器環境
//實時轉碼
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.4.4/babel.min.js"></script>
<script type="text/babel">
// Your ES6 code
</script>
//將程式碼打包成瀏覽器可以使用的指令碼
//以Babel配合Browserify為例,安裝babelify模組
$ npm install --save-dev babelify babel-preset-latest
//用命令列轉換 ES6 指令碼
$ browserify script.js -o bundle.js \
-t [ babelify --presets [ latest ] ]
//將ES6指令碼`script.js`,轉為`bundle.js`,瀏覽器直接載入後者就可以了
//改寫package.json可以不用每次命令列都輸入引數
{
"browserify": {
"transform": [["babelify", { "presets": ["latest"] }]]
}
}
線上轉換
Babel 提供一個REPL線上編譯器,可以線上將 ES6 程式碼轉為 ES5 程式碼。轉換後的程式碼,可以直接作為 ES5 程式碼插入網頁執行。
與其他工具的配合
許多工具需要 Babel 進行前置轉碼
//ESLint安裝
$ npm install --save-dev eslint babel-eslint
//根目錄下新建配置.eslintrc
{
"parser": "babel-eslint",
"rules": {
...
}
}
//改寫package.json
{
"name": "my-module",
"scripts": {
"lint": "eslint my-files.js"
},
"devDependencies": {
"babel-eslint": "...",
"eslint": "..."
}
}
//Mocha 測試框架
//如果需要執行使用 ES6 語法的測試指令碼,修改package.jsond的scripts.test
"scripts": {
"test": "mocha --ui qunit --compilers js:babel-core/register"
}
//`--compilers`引數指定指令碼的轉碼器,規定字尾名為`js`的檔案,都需要使用`babel-core/register`先轉碼