我正在使用 traceur 在 node.js 下启用 ES6 开发traceur.require.makeDefault
。这没有问题。
我使用 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;
});
还有一个package.json
适用于上述代码的 ES6 模块的示例(出于隐私考虑,一些信息已被删除):
{
"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 处理文件。
我的问题是:鉴于上述实现,有没有更好的方法来做到这一点?