Webpack 如何在网页包解析器中获取文件名?

Webpack 如何在网页包解析器中获取文件名?,webpack,webpack-4,Webpack,Webpack 4,我正在开发一个插件,用于收集模块中具有特定名称的导出。我已经通过解析器导出钩子从各个文件中获取了数据,但是我似乎无法找到如何提取解析器正在操作的实际模块 // hook into the module factory and get the exports compiler.hooks.normalModuleFactory.tap(pluginName, factory => { factory.hooks.parser.for('javascript/auto').tap(pl

我正在开发一个插件,用于收集模块中具有特定名称的导出。我已经通过解析器导出钩子从各个文件中获取了数据,但是我似乎无法找到如何提取解析器正在操作的实际模块

// hook into the module factory and get the exports
compiler.hooks.normalModuleFactory.tap(pluginName, factory => {
    factory.hooks.parser.for('javascript/auto').tap(pluginName, parser => {
                    parser.hooks.export.tap(pluginName, (node) => {
                        this.parseMetadataNode(node);
                    });
    });
});
parseMetadataNode是执行导出的实际提取的方法,该方法运行良好


如何查找节点正在操作的模块或用户请求?我需要那个节点的文件名

您可能可以检查
parser.state

compiler.hooks.normalModuleFactory.tap(pluginName,factory=>{
factory.hooks.parser.for('javascript/auto').tap(pluginName,parser=>{
parser.hooks.export.tap(pluginName,(node)=>{
const{module:{rawreRequest}}=parser.state;
// ..
});
});
});

在webpack文档中,这只是一个黑暗中的镜头,似乎是导入和导出的组合,它似乎为您提供了节点和源代码——您是否尝试过使用此挂钩?获取节点数据效果很好。我可以把它当作一个符咒来解析。问题在于获取文件名,因为节点似乎与文件名没有关联,据我所知。我认为
parser.state.module.resource
更好。它具有到源文件的绝对文件路径,没有任何加载程序路径的前缀。也。