通过webpack-4中的插件访问Parser

时间:2018-05-25 14:22:24

标签: javascript webpack webpack-4 webpack-plugin

我正在开发一个webpack版本4的插件,我正在尝试访问parser来对输入文件进行一些预处理,但是我很难跟上“文档“新的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 个答案:

答案 0 :(得分:2)

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);
        }
    );
}