使用traceur加载ES5和ES6 npm模块

时间:2015-02-17 22:33:20

标签: javascript node.js npm ecmascript-6 traceur

我正在使用traceur通过traceur.require.makeDefault在node.js下启用ES6开发。这没有问题。

我使用Gemfury作为私人npm存储库,这也有效。我正在使用ES6创建自己的npm包。我遇到的挑战是如何支持加载ES5和ES6模块。典型的traceur.require.makeDefault示例代码块会跳过路径中包含node_modules目录的任何内容。

以下是我解决这个问题的方法:

var fs = require('fs');
var path = require('path');
var traceur = require('traceur');

require('traceur-source-maps').install(traceur);

function find_parent_package(filename) {
    var current = path.dirname(filename);
    while (true ) {
        var package_json = current + '/package.json';
        if (fs.existsSync(package_json))
            return require(package_json);
        var last_slash = current.lastIndexOf('/');
        if (last_slash === -1) return null;
        current = current.substring(0, last_slash);
    }
}

traceur.require.makeDefault(function(filename) {
    if (filename.indexOf('package.json') > -1) return false;
    if (filename.indexOf('node_modules') === -1) return true;
    var p = find_parent_package(filename);
    return p && p.es6;
});

以上代码使用的ES6模块的package.json示例(某些信息已被移除以保护隐私):

{
  "name": "ps-core",
  "version": "0.2.0",
  "private": true,
  "es6": true,
  "dependencies": {
    "basic-auth": "^1.0.0",
    "express": "^4.10.6",
    "express-hal": "0.0.1",
    "express-session": "^1.10.1",
    "traverson": "^0.15.0"
  }
}

给定一个特定的npm模块路径,此代码在目录树中向上走,直到找到package.json文件,读取它并检查es6密钥。如果为true,则允许traceur处理文件。

我的问题是:鉴于上述实施,有没有更好的方法来做到这一点?

0 个答案:

没有答案