Доступ к парсеру через плагин в webpack-4 - PullRequest
0 голосов
/ 25 мая 2018

Я работаю над плагином для веб-пакета версии 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 Ответ

0 голосов
/ 25 мая 2018

Получите вдохновение от 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);
        }
    );
}
...