IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    es6模块兼容实战

    草依山发表于 2015-05-26 07:28:57
    love 0

    最近写了点es6的代码,这个小文算是对es6模块开发使用的一个小总结,并不涉及到es6的介绍

    代码的开发环境中可能很好的支持es6,比如你用了iojs,但是在模块被别人使用的时候可能是nodejs v0.11.xx,这个时候模块的运行环境是没有es6支持的,解决这个问题可以在模块发布前做一次编译。

    安装babel

    npm install --save babel
    

    如果使用了生成器(一般用es6的肯定会使用co啦),那还需要有babel-runtime

    npm install --save babel-runtime
    

    开发的时候用es6尽情的玩耍就行了,只需要在发布前进行编译,这样对开发者而言也不是什么负担,在package.json的scripts里增加

      ...
      "scripts": {
        "prepublish": "mkdirp es5; babel  --optional runtime lib --out-dir es5"
      }
      ...
    

    上面是把整个lib目录里文件编译到es5目录,因为一般的入口文件都是直接引入lib的,我们还需要在入口文件里判断一下:

    /* jshint evil:true */
    /* global gen*/
    function isSupportGenerator() {
      try {
        eval('var gen = function *(){}');
        return gen.constructor.name === 'GeneratorFunction';
      } catch (e) {
        return false;
      }
    }
    
    var _exports;
    
    if (isSupportGenerator()) {
      _exports = require('./lib');
    } else {
      _exports = require('./es5');
    }
    
    module.exports = _exports;
    

    这个判断是否支持Generator的代码来自雪卒的代码

    同时也不要忘记了在.gitignore里加上es5,这些编译的代码我们是不需要在git里维护的。

    最后,需要加上.npmignore文件,因为如果没有这个文件的话,npm发布包的时候会按.gitignore文件里的列表忽略目录,显然,发布出去的模块,我们是需要es5目录的。


    文章来源: es6模块兼容实战
    文章的标签: es6 nodejs


沪ICP备19023445号-2号
友情链接