草依山的Javascript世界

一个Javascript程序猿的学习纪录剩地,不仅仅是JS,还有Linux、Mac、nodeJs、吃、玩!

es6模块兼容实战

最近写了点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模块兼容实战
欢迎关注我的微博与我交流:@草依山
Github上也有一些东西:[Github]
所有文章坚决抵制jb51.net的转载!
标签: es6 1 nodejs 9
2015-05-26

相关文章

2017-03-22 一次算PI的小尝试
2017-02-13 new做了些什么
2016-09-29 [翻译]bash的各种文件载入执行顺序
2016-05-31 phantomjs在linux下截图中文字体问题
2016-04-24 Promise的错误处理

文章修改纪录

加载中...
Copyright © 2013. Create By 草依山, Fork