を介して node.js で ES6 開発を有効にするために traceur を使用してい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 がファイルを処理できるようになります。
私の質問は次のとおりです。上記の実装を考えると、これを行うためのより良い方法はありますか?