javascript - 向下遍历 Webpack 模块树的最佳方法
问题描述
我正在处理一些与 Webpack 相关的项目,我需要在其中分析整个模块树。
目前我正在向上遍历,使用该module.reasons
属性,该属性具有当前模块的所有父模块。但是,我找不到包含子模块的模拟属性。
我将遍历算法基于 Webpack 的Module
类,因为它应该能够对任何类型的模块执行递归。(任何其他扩展类的所有模块实例Module
)
在测试时,我看到了一个module.dependencies
属性,但它没有在Module
构造函数中定义,我找不到它是如何填充的。
关于如何向下遍历的任何想法?我还缺少其他一些财产吗?或者我应该使用不同的 Webpack 接口而不是直接从内部Module
实例访问树?
更新:
我正在使用module.dependencies
,因为我已经确认它以某种方式存在于每个模块上。但是,它只列出了静态依赖项(EX: import {something} from 'some/module.js'
),而不是动态依赖项(即使是可解析的),例如 ( import('some/module.js')
)。任何帮助将不胜感激。谢谢。
解决方案
在进一步分析 Webpack 的源代码后,我发现该module.blocks
属性包含模块内每个已解析的“内部依赖块”(内部声明和分配)的引用,包括动态import()
语句。
module.blocks
是一个block
对象数组。每个块都有一个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;
}
在这里确认。
推荐阅读
- lua - 尽管我尝试了几乎所有解决方案,但我的装备总是经常滞后
- jquery - JSON 子对象未定义
- ruby - 使用 Mongodb ruby 驱动程序访问 Mongodb 的对象
- python - 调用另一个脚本并并行运行
- pdf - 有没有更简单的方法来复制 PDF 注释/注释?
- api - 如何使用 API 调用在 ansible 塔模板中启动作业标签
- flutter - 如何在颤振中使用提供者
- python - 通过转换和操作 CSV 来自动化节点 API 抓取
- java - Discord bot 成功部署在 Heroku 上但无法连接到 MongoDB
- jestjs - Material-UI 自定义主题调色板属性在 Jest 中产生“未定义”错误