zoukankan      html  css  js  c++  java
  • 常见的ES6转码(编译)工具——Babel转码器、Traceur转码器

    在浏览器里面如何使用?
    现在ES6的使用也是一个新趋势,下面就来讲解转码的常见方法
    当ES6不兼容时,需要用到转码工具
    1.Babel转码器:
    Babel是一个广泛使用的ES6转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。
    这意味着,你可以用ES6的方式编写程序,又不用担心现有环境是否支持。
    // 转码前
    input.map(item => item + 1);

    // 转码后
    input.map(function (item) {
    return item + 1;
    });
    上面的原始代码用了箭头函数,这个特性还没有得到广泛支持,
    Babel将其转为普通函数,就能在现有的JavaScript环境执行了。

    Babel转码器使用方法:
    1)配置文件.babelrc
    Babel的配置文件是.babelrc,存放在项目的根目录下。
    使用Babel的第一步,就是配置这个文件。
    该文件用来设置转码规则和插件,基本格式如下。
    {
    "presets": [],
    "plugins": []
    }
    presets字段设定转码规则,官方提供以下的规则集,你可以根据需要安装。

    # ES2015转码规则
    $ npm install --save-dev babel-preset-es2015

    # react转码规则
    $ npm install --save-dev babel-preset-react

    # ES7不同阶段语法提案的转码规则(共有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

    然后,将这些规则加入.babelrc。
    {
    "presets": [
    "es2015",
    "react",
    "stage-2"
    ],
    "plugins": []
    }
    注意,以下讲解的所有Babel工具和模块的使用,都必须先写好.babelrc。

    所以使用babel的最基本目录结构为:
    |-package.json 由npm init --yes 生成
    |-.babelrc 使用时需手动配置以上内容,放到项目根目录中
    |-........ 其他与项目有关的文件

    Babel工具:
    1)命令行转码babel-cli
    Babel提供babel-cli工具,用于命令行转码。
    它的安装命令如下。
    $ npm install --global babel-cli

    基本用法如下。
    # 1.转码结果输出到标准输出
    $ babel example.js

    # 2.转码结果写入一个文件
    # --out-file 或 -o 参数指定输出文件
    $ babel example.js --out-file compiled.js
    # 或者
    $ babel example.js -o compiled.js

    # 3.整个目录转码
    # --out-dir 或 -d 参数指定输出目录
    $ babel src --out-dir lib
    # 或者
    $ babel src -d lib

    # 4. -s 参数生成source map文件
    $ babel src -d lib -s
    上面代码是在全局环境下,进行Babel转码。这意味着,
    如果项目要运行,全局环境必须有Babel,
    也就是说项目产生了对环境的依赖。
    另一方面,这样做也无法支持不同项目使用不同版本的Babel。

    解决上面问题的办法是将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

    2)babel-node
    babel-cli工具自带一个babel-node命令,提供一个支持ES6的REPL环境。
    它支持Node的REPL环境的所有功能,而且可以直接运行ES6代码,不需要进行转码处理。
    它不用单独安装,而是随babel-cli一起安装。然后,执行babel-node就进入REPL环境。
    #进入REPL环境
    $ babel-node
    #1.直接在REPL环境中运行ES6代码,可以执行
    > (x => x * 2)(1)
    2

    #2.除了在在REPL环境中运行ES6代码之外,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本身就不用做任何转码处理。

    3)babel-register
    babel-register模块改写require命令,为它加上一个钩子。
    此后,每当使用require加载.js、.jsx、.es和.es6后缀名的文件,就会先用Babel进行转码。

    #安装
    $ npm install --save-dev babel-register
    使用时,必须首先加载babel-register。

    #使用,首先将babel-register require进来,然后将需要编译的文件require进来
    require("babel-register");
    require("./index.js");
    然后,就不需要手动对index.js转码了,babel-register已经自动对文件进行转码

    需要注意的是,babel-register只会对require命令加载的文件转码,而不会对当前文件转码。
    另外,由于它是实时转码,所以只适合在开发环境使用。

    ---------------------------------------------------------------------------------
    2.Traceur转码器
    Google公司的Traceur转码器,也可以将ES6代码转为ES5代码。
    使用方法:
    1)直接插入网页
    Traceur允许将ES6代码直接插入网页。首先,必须在网页头部加载Traceur库文件。
    <script src="https://google.github.io/traceur-compiler/bin/traceur.js"></script>
    <script src="https://google.github.io/traceur-compiler/bin/BrowserSystem.js"></script>
    <script src="https://google.github.io/traceur-compiler/src/bootstrap.js"></script>
    <script type="module">
    import './Greeter.js';
    </script>
    上面代码中,一共有4个script标签。第一个是加载Traceur的库文件,
    第二个和第三个是将这个库文件用于浏览器环境,
    第四个则是加载用户脚本,这个脚本里面可以使用ES6代码,开发人员编写的ES6代码最后都写在这里

    注意,第四个script标签的type属性的值是module,而不是text/javascript。
    这是Traceur编译器识别ES6代码的标志,编译器会自动将所有type=module的代码编译为ES5,然后再交给浏览器执行。

    除了引用外部ES6脚本,也可以直接在网页中放置ES6代码。
    <script type="module">
    class Calc {
    constructor(){
    console.log('Calc constructor');
    }
    add(a, b){
    return a + b;
    }
    }
    var c = new Calc();
    console.log(c.add(4,5));
    </script>
    正常情况下,上面代码会在控制台打印出9。

    2)Traceur的命令行转换方法:
    作为命令行工具使用时,Traceur是一个Node的模块,首先需要用Npm安装。

    $ npm install -g traceur
    安装成功后,就可以在命令行下使用Traceur了。

    Traceur直接运行es6脚本文件,会在标准输出显示运行结果,以脚本calc.js为例。
    $ traceur calc.js
    Calc constructor
    9

    如果要将ES6脚本转为ES5保存,要采用下面的写法。
    $ traceur --script calc.es6.js --out calc.es5.js
    上面代码的--script选项表示指定输入文件,--out选项表示指定输出文件。

    为了防止有些特性编译不成功,最好加上--experimental选项。
    $ traceur --script calc.es6.js --out calc.es5.js --experimental
    命令行下转换生成的文件,就可以直接放到浏览器中运行。

    3)Traceur的Node.js环境的用法
    Traceur的Node.js用法如下(假定已安装traceur模块)。
    var traceur = require('traceur');
    var fs = require('fs');
    // 将ES6脚本转为字符串
    var contents = fs.readFileSync('es6-file.js').toString();

    var result = traceur.compile(contents, {
    filename: 'es6-file.js',
    sourceMap: true,
    // 其他设置
    modules: 'commonjs'
    });

    if (result.error)
    throw result.error;

    // result对象的js属性就是转换后的ES5代码
    fs.writeFileSync('out.js', result.js);
    // sourceMap属性对应map文件
    fs.writeFileSync('out.js.map', result.sourceMap);

    ---------------------------------------------------------------------------------
    3.直接在线编译————主要用于测试
    http://babeljs.io/repl/
    http://google.github.io/traceur-compiler/demo/repl.html

    ---------------------------------------------------------------------------------

    4.ES6直接在node 里面使用
    Node.js是JavaScript语言的服务器运行环境,对ES6的支持度比浏览器更高。
    通过Node,可以体验更多ES6的特性。
    使用方法:1)直接使用,需要添加'use script' ————node xxx.js
    2)使用node--harmony_desctructuring xxx.js
    ---------------------------------------------------------------------------------
    我们在下面的文章中具体讲解ES6时,使用Traceur转码器的直接插入网页的方法来转码ES6
    traceur:是由Google出的编译器,可以将ES5编译成ES6
    bootstrap:是一个引导程序(与响应式的bootstrap不同)
    需要将traceur.js和bootstrap.js下载下来,引入到当前文件中即可
    ---------------------------------------------------------------------
    注意:在使用ES6时,先不用引入任何东西,去测试,
    当不支持ES6时,再去引入traceur.js和bootstrap.js对RS6进行转码。
    以为现在浏览器已经支持部分ES6功能,有的不需要转码,转码反而错误

  • 相关阅读:
    CCF|学生排队|Java
    CCF|分蛋糕|Java
    CCF|公共钥匙盒|Java
    CCF|打酱油|Java
    CCF|游戏|Java
    CCF|最小差值|Java
    CCF|路径解析|Java
    CCF|碰撞的小球
    CCF|跳一跳
    Win10 1803更新UWP无法安装的解决办法|错误代码0x80073D0D
  • 原文地址:https://www.cnblogs.com/yufann/p/ES6-note1.html
Copyright © 2011-2022 走看看