Javascript 网页包插件解析器找不到本地或模块函数调用

Javascript 网页包插件解析器找不到本地或模块函数调用,javascript,parsing,webpack,webpack-plugin,Javascript,Parsing,Webpack,Webpack Plugin,我正在编写一个代码分析网页包插件,希望在网页包包中找到函数名的所有实例 我就这个问题进行了回购: 因此解析器非常简单,如下所示: class ParsePlugin { apply(compiler) { compiler.plugin('compilation', function (compilation, data) { data.normalModuleFactory.plugin('parser', function (pars

我正在编写一个代码分析网页包插件,希望在网页包包中找到函数名的所有实例

我就这个问题进行了回购:

因此解析器非常简单,如下所示:

    class ParsePlugin {
    apply(compiler) {
        compiler.plugin('compilation', function (compilation, data) {

            data.normalModuleFactory.plugin('parser', function (parser, options) {

                parser.plugin(`call $findme`, function (expr) {
                    console.log("found $findme!");
                });
            });
        });
    }

我只想在代码中查找$findme()的所有实例,并记录有关它们的信息。在以后的某个时候,我甚至可能会改变电话,但那是另一天

当我提供此源文件时,一切正常:

运行webpack时,输出显示找到了两个实例:

found $findme!
found $findme!
Hash: a6555af5036af17d9320
Version: webpack 3.6.0
Time: 69ms
  Asset     Size  Chunks             Chunk Names
good.js  2.52 kB       0  [emitted]  main
   [0] ./good.js 47 bytes {0} [built]
但是,当我使用不同的入口点时,函数在本地()或外部模块()中定义,解析器突然停止查找这些方法

function $findme(input) {
    console.log(input);
}
$findme("Testing");
$findme("Testing too...");
====

那怎么办?我试图挖掘网页的源代码,据我所知,这似乎是有意的。但实际上并没有关于为什么会这样做的文档,也看不到任何评论

这不是插件可以做到的吗


提前谢谢你的帮助

奇怪的是,webpack解析器只在以某种方式调用或检索函数时调用这些钩子。这就是为什么当函数以一种方式调用时,钩子起作用,但当它从某个地方导入时,钩子不起作用

我试图找到一个对象方法的所有调用,但遇到了相同的问题

另一个人提出的github问题更为详细:

要解决这个问题,您需要欺骗webpack解析器,使其认为出于某种原因不想调用钩子的函数/方法调用是标识符,就像这里所做的那样:

以下是webpack代码中的相关位:


您需要使用解析器“evaluate”钩子来返回一个定制的
basicevaluateexpression
实例,该实例对于您要查找的所有函数调用都将
isIdentifier
设置为true。然后,
调用
钩子将被完整表达式调用。在我的例子中,我需要包含函数及其参数的完整CallExpression。

您找到解决方案了吗?
function $findme(input) {
    console.log(input);
}
$findme("Testing");
$findme("Testing too...");
import { $findme } from './findme';
$findme("Testing");
$findme("Testing too...");