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...");