向下遍历Webpack模块树的最佳方法

问题描述 投票:0回答:1

我正在与Webpack相关的一些项目中,我需要分析整个模块树。

当前,我正在使用module.reasons属性向上遍历,该属性具有作为当前模块父级的所有模块。但是,我找不到包含子模块的类比属性。

我将遍历算法基于Webpack的Module类,因为它应该能够对任何类型的模块执行递归。 (任何其他扩展了Module的类的所有模块实例)

[在测试时,我看到了一个module.dependencies属性,但未在Module构造函数中定义,并且我找不到它的填充方式。

关于如何向下移动的任何想法?我还有其他财产吗?还是应该使用其他Webpack界面而不是直接从Module实例内部访问树?

UPDATE:

我正在使用module.dependencies,因为我已经确认每个模块上都存在它。但是,它仅列出静态依赖关系(EX:import {something} from 'some/module.js'),而不列出诸如(import('some/module.js'))之类的动态依赖关系(即使是可解决的)。任何帮助将不胜感激。谢谢。

javascript webpack module bundler
1个回答
0
投票

[进一步分析Webpack的源代码后,我发现module.blocks属性为模块内部的每个已解析“内部依赖块”(内部声明和赋值)(包括动态import()语句)都提供了引用。

module.blocksblock对象的数组。每个块都有一个block.dependencies属性,该属性是dependency对象的数组。

您对作为dependency实例的ImportDependency对象感兴趣。

类似这样的东西:

function getAllChildModules(module) {
    const childModules = [];

    // GET STATIC CHILD MODULES
    module.dependencies.forEach((dep) => {
        childModules.push(dep.module);
    });

    // GET DYNAMIC CHILD MODULES
    module.blocks.forEach((blk) => {
        blk.dependencies.forEach((dep) => {
            if (dep.constructor.name === 'ImportDependency') {
                childModules.push(dep.module);
            }
        });
    });

    return childModules;
}

确认here

© www.soinside.com 2019 - 2024. All rights reserved.