Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过webpack-4中的插件访问解析器_Javascript_Webpack_Webpack 4_Webpack Plugin - Fatal编程技术网

Javascript 通过webpack-4中的插件访问解析器

Javascript 通过webpack-4中的插件访问解析器,javascript,webpack,webpack-4,webpack-plugin,Javascript,Webpack,Webpack 4,Webpack Plugin,我正在为WebpackVersion4开发一个插件,我正在尝试访问,以便对输入文件进行一些预处理,但是我很难理解新的可编址API的“文档”以及我应该如何访问解析器 到目前为止,我有: const MY_PLUGIN_NAME = "FooPlugin"; function Plugin() { } Plugin.prototype.apply = function(compiler) { compiler.hooks.normalModuleFactory.tap(MY_PLUGIN_N

我正在为WebpackVersion4开发一个插件,我正在尝试访问,以便对输入文件进行一些预处理,但是我很难理解新的可编址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
        }
    }
}
我尝试了
解析器的各种其他参数。点击
函数,似乎没有任何帮助。我在如何访问解析器的钩子方面做错了什么吗?

从中得到启发,它附加到解析器并添加了
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);
        }
    );
}
从中得到启发,它附加到解析器并添加了
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);
        }
    );
}

谢谢你的指点,这让我克服了我的问题。看起来缺少的部分是钩子图的关键,例如
javascript/auto
javascript/dynamic
javascript/esm
。我怎么知道会使用这些?可能应该更新文档。。。谢谢你的指点,这让我克服了我的问题。看起来缺少的部分是钩子图的关键,例如
javascript/auto
javascript/dynamic
javascript/esm
。我怎么知道会使用这些?可能应该更新文档。。。您现在可以投稿:]