gpt4 book ai didi

Webpack 的 `parser.hooks.callAnyMember` 没有被调用

转载 作者:行者123 更新时间:2023-12-02 11:13:38 25 4
gpt4 key购买 nike

我正在尝试为 webpack 构建一个插件,它会遍历每个文件,分析是否正在使用函数 t (用于翻译),然后获取第一个参数(应该是一个字符串)并将其和所有结果写入 json 数组(与构建同时)。

我已经成功地基于resolverFactory创建了一个“虚拟”依赖项,尽管我很确定以后需要更多的工作,但我陷入了一个永远不会被调用的钩子(Hook)中。

    compiler.hooks.normalModuleFactory.tap('TranslationsPlugin', (factory) => {
factory.hooks.parser.for('javascript/auto').tap('TranslationsPlugin', (parser) => {
debugger;
parser.hooks.callAnyMember.for(functionName).tap('TranslationsPlugin', (expr) => {
debugger;

第一个调试器被调用,我检查functionName是“t”,但第二个调试器永远不会被调用。

我的猜测是,webpack 可能在 babel 转译或其他操作之后执行此操作,并且该函数的调用方式不同。但是,在这种情况下,我不知道该怎么办。

而且,我几乎找不到这方面的好的文档。任何帮助是极大的赞赏!

最佳答案

好吧,我知道这个问题很久以前就被问到了,但我遇到了相同的用例和相同的问题,并且能够解决它。

docs 中有点晦涩难懂。 ,但您可以尝试使用 evaluateCallMemberExpression 而不是 callAnyMember

parser.hooks.evaluateCallExpressionMember.for('t').tap('TranslationPlugin', (expression, param) => {
// TODO - check that the call expression is actually belong to the right object
// then collect the parameters...
});

在花了几个小时尝试使用 callcallAnyMember 进行推理但没有成功后,它为我完成了这项工作。

我认为这种微小差异背后的原因是调用 t 返回的值被分配给一个变量,而不是简单地调用一个函数。因此,我尝试收集数据的代码如下所示:

const label = i18next.t('someKey');

我确实期望 callAnyMember 能够工作,但我仍然认为这是 webpack 中的问题(我在版本 4.19.1 中使用它) )。但现在我会坚持使用这个解决方案

关于Webpack 的 `parser.hooks.callAnyMember` 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53596135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com