Webpack 插件 API:在解析期间获取模块的源映射

Webpack plugin API: getting source maps for a module during parsing

我正在编写代码分析器。我的分析器使用 Webpack's JavaScriptParser hooks。我需要输出一条错误消息,但是 node.loc 中的行号已关闭,因为加载程序已经转换了源代码。所以我想在记录之前通过源映射提供错误消息。

class FooPlugin {
    apply(compiler) {
        compiler.hooks.normalModuleFactory.tap("FooPlugin", factory => {
            factory.hooks.parser
                .for('javascript/auto')
                .tap("FooPlugin", parser => {
                    parser.hooks.call.for("foo").tap("FooPlugin", expr => {
                        const map = getSourceMapSomehow();  /* ??? */
                        const originalLine = map.originalPositionFor(expr.loc.start).line;
                        console.log("foo() call found at line " + originalLine);
                    });
                });
        });
    }
}

上例中的getSourceMapSomehow()我不知道怎么填。如何在 JavaScriptParser 挂钩中获取当前模块的源映射?

我通过阅读 Webpack 源代码弄明白了。我需要的功能是 module.originalSource().

const map = new SourceMapConsumer(parser.state.module.originalSource().map());
const originalLine = map.originalPositionFor(expr.loc.start).line;
console.log("foo() call found at line " + originalLine);