5

私は間違っているかもしれませんが、カスタム バベル プラグインにいくつかのカスタム オプションを与えるための解決策が見つかりませんでした。どうすればこれを達成できるか手がかりはありますか?

これが私の構築プロセスです。私は browserify と babelify で gulp を使用しています:

gulp.task("scripts", function() {
    return browserify({
        entries: "myFile.js"
    })
    .transform(babelify.configure({
        plugins: ["./lib/myPlugin:after"]
    }))
    .bundle()
    .pipe(source("all.js"))
    .pipe("build/");
});

次のようなことをして、プラグインにいくつかのカスタムデータを提供したいと思います:

gulp.task("scripts", function() {
    return browserify({
        entries: "myFile.js"
    })
    .transform(babelify.configure({
        myCustomOptions: {
            rootPath: "some path",
            customInfo: "..."
        }
        plugins: ["./lib/myPlugin:after"]
    }))
    .bundle()
    .pipe(source("all.js"))
    .pipe("build/");
});

次に、プラグインで、宣言した customOptions オブジェクトを取得したいと思います。そのようなことを達成する方法はありますか?

ありがとう、

よろしく

4

2 に答える 2

7

これは最近Babel 6で変更されました。ドキュメントから:

プラグインはオプションを指定できます。配列でラップし、オプション オブジェクトを提供することで、構成でこれを行うことができます。例えば:

{
  "plugins": [
    ["transform-async-to-module-method", {
      "module": "bluebird",
      "method": "coroutine"
    }]
  ]
}

Babel プラグイン ハンドブックのプラグイン オプションに関するドキュメント。

于 2015-12-01T13:02:06.877 に答える
3

私は抜け道を見つけましたが、それは適切な方法ではないと確信しています:

babelコードを読んでみると、「extra」という隠しオプションがあるようです。そのオプションを使用して、カスタム オプションをプッシュしました。

gulp.task("scripts", function() {
    return browserify({
        entries: "myFile.js"
    })
    .transform(babelify.configure({
        extra: {
            myPlugin: {
                // here i put my custom data
            }
        },
        plugins: ["./lib/myPlugin:after"]
    }))
    .bundle()
    .pipe(source("all.js"))
    .pipe("build/");
});

次に、プラグインで次のようにカスタム オプションを取得できます。

var myPlugin = function(babel) {
    var t = babel.types;
    var pluginConf;

    return new babel.Transformer("babel-platform", {
        CallExpression(node, parent, scope, config) {
            pluginConf = pluginConf || config.opts.extra["myPlugin"] || {};
            // Doing some stuff here on the CallExpression
        }
    });
}

私はこれが間違いなく適切な方法ではないことを知っています。代替案はありますか?

于 2015-06-11T11:11:11.807 に答える