• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    Babel 入門教程學習筆記

    來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 22:13:08
    文檔

    Babel 入門教程學習筆記

    Babel 入門教程學習筆記:Babel是一個廣泛使用的轉(zhuǎn)碼器,可以將ES6代碼轉(zhuǎn)為ES5代碼,從而在現(xiàn)有環(huán)境執(zhí)行。 這意味著,你可以現(xiàn)在就用 ES6 編寫程序,而不用擔心現(xiàn)有環(huán)境是否支持。下面是一個例子。 // 轉(zhuǎn)碼前 input.map(item => item + 1); // 轉(zhuǎn)碼后 input.
    推薦度:
    導讀Babel 入門教程學習筆記:Babel是一個廣泛使用的轉(zhuǎn)碼器,可以將ES6代碼轉(zhuǎn)為ES5代碼,從而在現(xiàn)有環(huán)境執(zhí)行。 這意味著,你可以現(xiàn)在就用 ES6 編寫程序,而不用擔心現(xiàn)有環(huán)境是否支持。下面是一個例子。 // 轉(zhuǎn)碼前 input.map(item => item + 1); // 轉(zhuǎn)碼后 input.

    Babel是一個廣泛使用的轉(zhuǎn)碼器,可以將ES6代碼轉(zhuǎn)為ES5代碼,從而在現(xiàn)有環(huán)境執(zhí)行。

    這意味著,你可以現(xiàn)在就用 ES6 編寫程序,而不用擔心現(xiàn)有環(huán)境是否支持。下面是一個例子。

    // 轉(zhuǎn)碼前
    input.map(item => item + 1);
    
    // 轉(zhuǎn)碼后
    input.map(function (item) {
     return item + 1;
    });
    
    

    上面的原始代碼用了箭頭函數(shù),這個特性還沒有得到廣泛支持,Babel將其轉(zhuǎn)為普通函數(shù),就能在現(xiàn)有的JavaScript環(huán)境執(zhí)行了。

    一、配置文件.babelrc

    Babel的配置文件是.babelrc,存放在項目的根目錄下。使用Babel的第一步,就是配置這個文件。

    該文件用來設置轉(zhuǎn)碼規(guī)則和插件,基本格式如下。

    {
     "presets": [],
     "plugins": []
    }
    

    presets字段設定轉(zhuǎn)碼規(guī)則,官方提供以下的規(guī)則集,你可以根據(jù)需要安裝。

    # ES2015轉(zhuǎn)碼規(guī)則
    $ npm install --save-dev babel-preset-es2015
    
    # react轉(zhuǎn)碼規(guī)則
    $ npm install --save-dev babel-preset-react
    
    # ES7不同階段語法提案的轉(zhuǎn)碼規(guī)則(共有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
    
    

    然后,將這些規(guī)則加入.babelrc

     {
     "presets": [
     "es2015",
     "react",
     "stage-2"
     ],
     "plugins": []
     }
    

    注意,以下所有Babel工具和模塊的使用,都必須先寫好.babelrc

    二、命令行轉(zhuǎn)碼babel-cli

    Babel提供babel-cli工具,用于命令行轉(zhuǎn)碼。

    它的安裝命令如下。

    $ npm install --global babel-cli

    基本用法如下。

    # 轉(zhuǎn)碼結(jié)果
    輸出到標準輸出 $ babel example.js # 轉(zhuǎn)碼結(jié)果寫入一個文件 # --out-file 或 -o 參數(shù)指定輸出文件 $ babel example.js --out-file compiled.js # 或者 $ babel example.js -o compiled.js # 整個目錄轉(zhuǎn)碼 # --out-dir 或 -d 參數(shù)指定輸出目錄 $ babel src --out-dir lib # 或者 $ babel src -d lib # -s 參數(shù)生成source map文件 $ babel src -d lib -s

    上面代碼是在全局環(huán)境下,進行Babel轉(zhuǎn)碼。這意味著,如果項目要運行,全局環(huán)境必須有Babel,也就是說項目產(chǎn)生了對環(huán)境的依賴。另一方面,這樣做也無法支持不同項目使用不同版本的Babel。

    一個解決辦法是將babel-cli安裝在項目之中。

    # 安裝
    $ npm install --save-dev babel-cli

    然后,改寫package.json。

    {
     // ...
     "devDependencies": {
     "babel-cli": "^6.0.0"
     },
     "scripts": {
     "build": "babel src -d lib"
     },
    }
    

    轉(zhuǎn)碼的時候,就執(zhí)行下面的命令。

    $ npm run build

    三、babel-node

    babel-cli工具自帶一個babel-node命令,提供一個支持ES6的REPL環(huán)境。它支持Node的REPL環(huán)境的所有功能,而且可以直接運行ES6代碼。

    它不用單獨安裝,而是隨babel-cli一起安裝。然后,執(zhí)行babel-node就進入PEPL環(huán)境。

    $ babel-node
    > (x => x * 2)(1)
    2

    babel-node命令可以直接運行ES6腳本。將上面的代碼放入腳本文件es6.js,然后直接運行。

    $ babel-node es6.js
    2

    babel-node也可以安裝在項目中。

    $ npm install --save-dev babel-cli

    然后,改寫package.json。

    {
     "scripts": {
     "script-name": "babel-node script.js"
     }
    }

    上面代碼中,使用babel-node替代node,這樣script.js本身就不用做任何轉(zhuǎn)碼處理。

    四、babel-register

    babel-register模塊改寫require命令,為它加上一個鉤子。此后,每當使用require加載.js、.jsx、.es和.es6后綴名的文件,就會先用Babel進行轉(zhuǎn)碼。

    $ npm install --save-dev babel-register

    使用時,必須首先加載babel-register。

    require("babel-register");
    require("./index.js");

    然后,就不需要手動對index.js轉(zhuǎn)碼了。

    需要注意的是,babel-register只會對require命令加載的文件轉(zhuǎn)碼,而不會對當前文件轉(zhuǎn)碼。另外,由于它是實時轉(zhuǎn)碼,所以只適合在開發(fā)環(huán)境使用。

    五、babel-core

    如果某些代碼需要調(diào)用Babel的API進行轉(zhuǎn)碼,就要使用babel-core模塊。

    安裝命令如下。

    $ npm install babel-core --save

    然后,在項目中就可以調(diào)用babel-core。

    var babel = require('babel-core');
    
    // 字符串轉(zhuǎn)碼
    babel.transform('code();', options);
    // => { code, map, ast }
    
    // 文件轉(zhuǎn)碼(異步)
    babel.transformFile('filename.js', options, function(err, result) {
     result; // => { code, map, ast }
    });
    
    // 文件轉(zhuǎn)碼(同步)
    babel.transformFileSync('filename.js', options);
    // => { code, map, ast }
    
    // Babel AST轉(zhuǎn)碼
    babel.transformFromAst(ast, code, options);
    // => { code, map, ast }
    
    

    配置對象options,可以參看官方文檔http://babeljs.io/docs/usage/options/。

    下面是一個例子。

    var es6Code = 'let x = n => n + 1';
    var es5Code = require('babel-core')
     .transform(es6Code, {
     presets: ['es2015']
     })
     .code;
    // '"use strict";\n\nvar x = function x(n) {\n return n + 1;\n};'

    上面代碼中,transform方法的第一個參數(shù)是一個字符串,表示需要轉(zhuǎn)換的ES6代碼,第二個參數(shù)是轉(zhuǎn)換的配置對象。

    六、babel-polyfill

    Babel默認只轉(zhuǎn)換新的JavaScript句法(syntax),而不轉(zhuǎn)換新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局對象,以及一些定義在全局對象上的方法(比如Object.assign)都不會轉(zhuǎn)碼。

    舉例來說,ES6在Array對象上新增了Array.from方法。Babel就不會轉(zhuǎn)碼這個方法。如果想讓這個方法運行,必須使用babel-polyfill,為當前環(huán)境提供一個墊片。

    安裝命令如下。

    $ npm install --save babel-polyfill
    

    然后,在腳本頭部,加入如下一行代碼。

    import 'babel-polyfill';
    // 或者
    require('babel-polyfill');
    

    Babel默認不轉(zhuǎn)碼的API非常多,詳細清單可以查看babel-plugin-transform-runtime模塊的definitions.js文件。

    七、瀏覽器環(huán)境

    Babel也可以用于瀏覽器環(huán)境。但是,從Babel 6.0開始,不再直接提供瀏覽器版本,而是要用構(gòu)建工具構(gòu)建出來。如果你沒有或不想使用構(gòu)建工具,可以通過安裝5.x版本的babel-core模塊獲取。

    $ npm install babel-core@old

    運行上面的命令以后,就可以在當前目錄的node_modules/babel-core/子目錄里面,找到babel的瀏覽器版本browser.js(未精簡)和browser.min.js(已精簡)。

    然后,將下面的代碼插入網(wǎng)頁。

    <script src="node_modules/babel-core/browser.js"></script>
    <script type="text/babel">
    // Your ES6 code
    </script>

    上面代碼中,browser.js是Babel提供的轉(zhuǎn)換器腳本,可以在瀏覽器運行。用戶的ES6腳本放在script標簽之中,但是要注明type="text/babel"。

    另一種方法是使用babel-standalone模塊提供的瀏覽器版本,將其插入網(wǎng)頁。

    <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>

    注意,網(wǎng)頁中實時將ES6代碼轉(zhuǎn)為ES5,對性能會有影響。生產(chǎn)環(huán)境需要加載已經(jīng)轉(zhuǎn)碼完成的腳本。

    下面是如何將代碼打包成瀏覽器可以使用的腳本,以Babel配合Browserify為例。首先,安裝babelify模塊。

    $ npm install --save-dev babelify babel-preset-es2015

    然后,再用命令行轉(zhuǎn)換ES6腳本。

    $ browserify script.js -o bundle.js \
     -t [ babelify --presets [ es2015 react ] ]

    上面代碼將ES6腳本script.js,轉(zhuǎn)為bundle.js,瀏覽器直接加載后者就可以了。

    在package.json設置下面的代碼,就不用每次命令行都輸入?yún)?shù)了。

    {
     "browserify": {
     "transform": [["babelify", { "presets": ["es2015"] }]]
     }
    }

    八、在線轉(zhuǎn)換

    Babel提供一個REPL在線編譯器,可以在線將ES6代碼轉(zhuǎn)為ES5代碼。轉(zhuǎn)換后的代碼,可以直接作為ES5代碼插入網(wǎng)頁運行。

    九、與其他工具的配合

    許多工具需要Babel進行前置轉(zhuǎn)碼,這里舉兩個例子:ESLint和Mocha。

    ESLint 用于靜態(tài)檢查代碼的語法和風格,安裝命令如下。

    $ npm install --save-dev eslint babel-eslint
    

    然后,在項目根目錄下,新建一個配置文件.eslint,在其中加入parser字段。

    {
     "parser": "babel-eslint",
     "rules": {
     ...
     }
    }

    再在package.json之中,加入相應的scripts腳本。

     {
     "name": "my-module",
     "scripts": {
     "lint": "eslint my-files.js"
     },
     "devDependencies": {
     "babel-eslint": "...",
     "eslint": "..."
     }
     }
    

    Mocha 則是一個測試框架,如果需要執(zhí)行使用ES6語法的測試腳本,可以修改package.json的scripts.test。

    "scripts": {
     "test": "mocha --ui qunit --compilers js:babel-core/register"
    }

    上面命令中,--compilers參數(shù)指定腳本的轉(zhuǎn)碼器,規(guī)定后綴名為js的文件,都需要使用babel-core/register先轉(zhuǎn)碼。

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Babel 入門教程學習筆記

    Babel 入門教程學習筆記:Babel是一個廣泛使用的轉(zhuǎn)碼器,可以將ES6代碼轉(zhuǎn)為ES5代碼,從而在現(xiàn)有環(huán)境執(zhí)行。 這意味著,你可以現(xiàn)在就用 ES6 編寫程序,而不用擔心現(xiàn)有環(huán)境是否支持。下面是一個例子。 // 轉(zhuǎn)碼前 input.map(item => item + 1); // 轉(zhuǎn)碼后 input.
    推薦度:
    標簽: 教程 入門 ba
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 精品国产自在在线在线观看| 国产福利视精品永久免费| 亚洲国产精品无码专区在线观看| 久久久久四虎国产精品| 亚洲精品无码久久久久sm| 国产精品性爱| 国产91精品在线| 精品三级AV无码一区| 无码国产亚洲日韩国精品视频一区二区三区 | 久久国产精品无码HDAV| 久久久久亚洲精品天堂久久久久久| 精品日产一区二区三区手机| 久久国产精品77777| 亚洲精品国产品国语在线| 久久久久九国产精品| 91亚洲国产成人久久精品网址| 99久久99这里只有免费费精品| 人人妻人人澡人人爽人人精品97| 免费人成在线观看欧美精品| 亚洲国产精品人久久| 99re热这里只有精品视频中文字幕 | 久久久99精品成人片中文字幕| 四虎影视884a精品国产四虎| 国产精品美女久久久久久2018 | 亚洲精品国产精品乱码不卡| 国产午夜精品一区二区三区小说| 亚洲愉拍自拍欧美精品| 国产精品一在线观看| 97久久精品午夜一区二区| 人妻少妇精品视频二区| 日韩精品中文字幕无码一区| 亚洲精品无码久久久久| 在线精品国产一区二区三区| 色婷婷噜噜久久国产精品12p| 热RE99久久精品国产66热| 久久精品成人影院| 久久久99精品一区二区| 香港三级精品三级在线专区| 亚洲国产精品尤物yw在线| 亚洲国产主播精品极品网红| 亚洲无线观看国产精品|