我正在使用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处理文件。
我的问题是:鉴于上述实施,有没有更好的方法来做到这一点?