英文原文javascript
https://scotch.io/tutorials/javascript-transpilers-what-they-are-why-we-need-themhtml
Transpilers, or source-to-source compilers,讀取用一個編程語言寫的源代碼,而後產生相等的另外一個語言。java
你寫的語言被翻譯成JavaScript,被稱爲compile-to-JS語言。node
你可能據說過CoffeeScript或者TypeScrip這類語言。es6
CoffeeScript會提供語法糖,非原生JavaScript。typescript
TypeScript更極端,增長了 classical object-oriented semantics to a fundamentally different language.npm
"use strict"; // TypeScript -- JavaScript, with types and stuff function printSecret ( secret : string ) { console.log("${secret}. But don't tell anyone."); } printSecret("I don't like CoffeeScript.");
問題是JavaScript環境只理解原生js。你不能在控制檯寫那兩種代碼,會報告❌。編程
甚至在就瀏覽器,你寫一些純js 代碼,仍會報告❌。好比, Template literals就不支持舊瀏覽器。json
所以, transpiler來了,它讀取Coffeescript, TypeScript, ES2015, 轉化爲plain js, 讓舊瀏覽器也支持。windows
不一樣的語言開發,有不一樣的偏好。如 Pythonistas like CoffeeScript.
但你可能只喜歡plain js。
不一樣的瀏覽器使用不一樣的js engine。所以使用編譯器把你用ES6寫的代碼轉化爲全部瀏覽器都支持的ES5。
這樣,你就可使用任何功能了。
總之,編譯器:
比較流行的編譯器是Babel
本章:
使用 Babel's live transpiler. 在左邊窗口寫一些包含ES6功能的代碼,而後會轉化爲ES5的代碼。
To get started:
cd && mkdir babel_example && cd babel_example //Node默認的模塊管理器,用來按照和管理Node模塊。 //初始化,生成一個新的package.json文件 npm init npm install --save-dev babel-cli babel-preset-es2015 babel-plugin-transform-async-to-generator
安裝Babel CLI,
安裝babel-preset-es2015,一組插件集合,用於支持全部的ES2015功能。
安裝babel-plugin-transform-async-to-generator, 可使用ES7的功能Async await關鍵字。
備註:原文再往下就說的很模糊。因此網上找了幾篇文章,嘗試屢次,解決。下面是經驗總結。
使用Babel cli詳解 (講解最清楚。)
首先,再項目文件夾根目錄下,建立.babelrc。添加:
//根據須要添加插件和預設的規則集。 { "presets": ["es2015"], "plugins": ["transform-async-to-generator"] }
而後,建立一個index.js文件,寫一些ES6代碼。
最後, npm run babel, 可是報告❌。
npm ERR! missing script: babel
這是由於非全局安裝,因此報告錯誤。
修改package.json文件:
//添加腳本: "scripts": { "babel": "babel" },
而後再運行, npm run babel,會再屏幕輸出index.js的轉碼。
一樣,若是想要使用babel-node命令(提供支持ES6的repl環境。能夠直接運行全部的ES6代碼),
//添加腳本,會調用文件babel-node, 執行相關腳本。 "scripts": { "babel-node": "babel-node" },
而後npm run babel-node
> babel_1@1.0.0 babel /Users/chentianwei/babel_1 > babel-node > (x => x * 2)(1) 2
推薦的方式:
+ "scripts": {
+ "build": "babel src -d build"
項目根目錄下,須要創建src和lib目錄。(其餘目錄也可,對應着改)。
而後輸入
~/babel_1 ⮀ npm run build > babel_1@1.0.0 build /Users/chentianwei/babel_1 > babel src -d build src/index.js -> build/index.js
注意⚠️windows下的使用有區別,具體見使用Babel cli詳解
Babel 默認只轉碼 ES6 的新語法(syntax),而不轉換新的 API,好比 Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise 等全局對象,以及一些定義在全局對象上的方法(好比 Object.assign、Array.from)都不會轉碼。