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);
我正在编写代码分析器。我的分析器使用 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);