如何读取React Native打包的index.android.bundle代码查找label及e.default引用
问题解答
1. __d代码块的属性
__d是React Native官方打包工具Metro内置的模块定义函数(全称是define),所有以__d开头的代码块都属于独立的公共模块,不属于React组件。你贴的这段代码就是一个纯配置模块,最终默认导出了一个包含两个配置项的数组,参考代码如下:
__d(function(g, r, i, a, m, e, d) { var t = r(d[0]); Object.defineProperty(e, "__esModule", { value: !0 }), e.default = void 0; var l = r(d[1]), u = t(r(d[2])), n = [{ id: l.Sal.SIX, label: u.default.t('test.broke') }, { id: l.Sal.SEVEN, label: u.default.t('test.even') }]; e.default = n })
2. 查找label使用位置的方法
- 先确认当前模块的ID:完整的
__d函数最后一个参数是当前模块的数字ID,格式为__d(function(){/* 业务逻辑 */}, 模块ID, [依赖模块ID列表]),先记下这段代码对应的数字ID,假设为xxx。 - 全局搜索代码库中所有
r(xxx)的调用,这些都是引入当前模块的代码位置,引入后拿到的默认导出就是代码里定义的带label的数组。 - 跟踪引入后赋值的变量,搜索该变量的遍历、取值逻辑,所有取
变量.label的位置就是label的使用处。 - 也可以直接全局搜索代码里出现的i18n key
test.broke、test.even,可以更快定位到文案渲染的UI位置。
3. 查找e.default引用的方法
这段代码里的e.default就是当前模块的默认导出值,也就是最后赋值的配置数组n,所有引用逻辑如下:
- 拿到当前模块的数字ID后,全局搜
r(模块ID),所有出现该语句的位置都是在引用e.default,常见的调用形式为var 自定义变量 = r(模块ID).default,这些自定义变量的所有使用位置都是e.default的引用位置。 - 如果你的反编译工具已经还原了模块文件名,也可以直接搜索该文件名的导入语句,效果相同。
内容的提问来源于stack exchange,提问作者unrated
相关产品推荐
相关产品推荐

