1

を介して 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 がファイルを処理できるようになります。

私の質問は次のとおりです。上記の実装を考えると、これを行うためのより良い方法はありますか?

4

0 に答える 0