我试图利用一个webpack AST,进行一些处理并返回目标表达式所在位置的文件路径。建议我使用parser.state,但是在各种情况下,它会返回undefined
。
我尝试了以下代码,parser.state
未定义:
compiler.hooks.compilation.tap(
'Plugin',
(compilation, { normalModuleFactory }) => {
const handler = (parser, parserOptions) => {
console.log(parser.state.module);
parser.hooks.evaluate
.for('ArrowFunctionExpression')
.tap('Plugin', expression => {
...
};
normalModuleFactory.hooks.parser
.for('javascript/auto')
.tap('DibsAsyncCheckPlugin', handler);
}
);
使用normalModuleFactory
直接进入compiler.hooks.normalModuleFactory.tap('DibsAsyncCheckPlugin', compilation => {
也会返回未定义的parser.state
。鉴于src指示parser.state = OldState
,我应该使用什么合适的钩子
采用?
我也尝试了下面的代码,但回调似乎是异步的,因此文件路径与目标文件不对应。有什么想法吗?
compiler.hooks.normalModuleFactory.tap('Plugin', factory => {
factory.hooks.module.tap('Plugin', (data, param) => {
console.log(data.request);
data.parser.hooks.evaluate
.for('ArrowFunctionExpression')
.tap('Plugin', expression => {
console.log(data.request);
});
});