配置babel

配置babel

ECMAScript的版本,每一年都會按期舉行會議,發佈各類標準,當前版本到了2019,但大部分人使用的瀏覽器,均可以支持es2015,也就是es6,要等到大部分瀏覽器都支持到最新版本,這樣須要一段很長的時間,那麼要用到最新的語法特性,就須要使用轉換工具,將最新的語法特性,儘量轉換爲主流的語法版本代碼,若是不能轉,那就只能不支持了,而babel就是這樣的轉換工具。css

配置babel,須要用到幾部分:ios

  • 依賴的庫
  • .babelrc文件

安裝依賴庫:

npm install --save-dev babel-core babel-preset-es2015 babel-preset-stage-2 
    npm install --save-dev babel-register babel-polyfill
    npm install --save-dev babel-plugin-transform-runtime
  • babel-core: 對語法進行轉換
  • babel-preset-2015 babel-preset-stage2: 轉換的目標代碼爲es6 stage2
  • babel-register: 改寫require,在加載時對代碼進行轉換
  • babel-polyfill: 對內部API進行轉碼,由於有些API是不支持的
  • babel-plugin-transform-runtime:對API統一指向這個插件仲,避免過多重複代碼生成

.babelrc文件:

{
    "presets": ["es2015", "stage-2"],
    "plugins": ["transform-runtime"],
    "comments": false
}

安裝工具進行轉碼

試用命令行進行轉碼,看看轉嗎後的效果:git

npm install --global babel-cli

測試的代碼,箭頭函數,異步函數等等,babel.test.js:es6

import axios from 'axios'

const foo = param =>{
    return axios.get('www.example.com', {params : {}})
}

async function test(){

}


async ()=>{
    await test()
}

執行命令:github

babel babel.test.js -o compile.js

顯示的內容:npm

'use strict';

    var _regenerator = require('babel-runtime/regenerator');

    var _regenerator2 = _interopRequireDefault(_regenerator);

    var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');

    var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);

    var test = function () {
        var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() {
            return _regenerator2.default.wrap(function _callee$(_context) {
                while (1) {
                    switch (_context.prev = _context.next) {
                        case 0:
                        case 'end':
                            return _context.stop();
                    }
                }
            }, _callee, this);
        }));

        return function test() {
            return _ref.apply(this, arguments);
        };
    }();

    var _axios = require('axios');

    var _axios2 = _interopRequireDefault(_axios);

    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

    var foo = function foo(param) {
        return _axios2.default.get('www.example.com', { params: {} });
    };

    (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() {
        return _regenerator2.default.wrap(function _callee2$(_context2) {
            while (1) {
                switch (_context2.prev = _context2.next) {
                    case 0:
                        _context2.next = 2;
                        return test();

                    case 2:
                    case 'end':
                        return _context2.stop();
                }
            }
        }, _callee2, undefined);
    }));

總結

好了,基本配置一次,也很好上手,對babel大概的流程有點了解,babel的原理也是挺簡單直接,但裏面須要處理的事情,真的夠多,讓js好寫了不少,其實babel就應該是一個簡單容易上手的工具纔好用。axios

參考資料

相關文章
相關標籤/搜索