bugfix> javascript > 投稿

私はwebpackバージョン4のプラグインに取り組んでいます、そして私はにアクセスしようとしていますパーサー 入力ファイルのいくつかの前処理を行いますが、新しいTapable APIの「ドキュメント」とパーサーへのアクセス方法を追うのは本当に大変です。

これまでのところ私はこれを持っています:

const MY_PLUGIN_NAME = "FooPlugin";
function Plugin() {
}
Plugin.prototype.apply = function(compiler) {
    compiler.hooks.normalModuleFactory.tap(MY_PLUGIN_NAME, function(factory) {
        console.log('Got my factory here ', factory); // This is invoked as expected.
        factory.hooks.parser.tap("varDeclaration", MY_PLUGIN_NAME, function() {
            console.log('parser varDeclaration', arguments); // This is the line that's never invoked
        }
    }
}

私は他のさまざまなパラメーターを parser.tap に試しました機能、何も助けていないようです。パーサーのフックにアクセスする方法に何か問題がありますか?

回答 1 件
  • UseStrictPlugin からインスピレーションを得る 、パーサーに接続して use strict; を追加します  ステートメント。

    apply(compiler) {
        compiler.hooks.compilation.tap(
            "YouPluginName",
            (compilation, { normalModuleFactory }) => {
                const handler = parser => {
                    parser.hooks.program.tap("YouPluginName", ast => {
                    // -------------^ the type of parser hook
                    // your code goes here
                    });
                };
                normalModuleFactory.hooks.parser
                    .for("javascript/auto")
                    .tap("UseStrictPlugin", handler);
                normalModuleFactory.hooks.parser
                    .for("javascript/dynamic")
                    .tap("UseStrictPlugin", handler);
                normalModuleFactory.hooks.parser
                    .for("javascript/esm")
                    .tap("UseStrictPlugin", handler);
            }
        );
    }
    
    

あなたの答え