javascript - Acorn / JSX - 具有特定类型的遍历节点
问题描述
我正在解析 JSX(React 组件)以查找所有节点:
- 属于
JSXText
类型 - 节点没有空参数
text
这是我第一次尝试解析组件源文件,测试如何获取Literal
node.js。
const acorn = require("acorn")
const jsx = require("acorn-jsx")
const cf = require("acorn-class-fields")
const walk = require("acorn-walk")
let s = acorn.Parser.extend(cf).extend(jsx()).parse(cnt, {ecmaVersion: "latest", sourceType: "module"});
walk.simple(s, {
Literal(node) {
console.log(`Literal: ${node.value}`)
}
})
问题
- 我在这里找到了节点类型,但没有 JSX 节点类型——在哪里可以找到?
- 如何过滤
text
参数不为空的节点?
解决方案
我相信您可以扩展acorn-walk
以包含额外的类型。
这个插件对我有用:https ://github.com/sderosiaux/acorn-jsx-walk
在撰写本文时,以下是我将如何实现它:
const acorn = require("acorn");
const jsx = require("acorn-jsx");
const walk = require("acorn-walk");
const { extend } = require('acorn-jsx-walk')
// setup
const parser = acorn.Parser.extend(jsx());
extend(walk.base);
// parse
const ast = parser.parse(cnt, { ecmaVersion: "latest", sourceType: 'module' });
// analys
walk.simple(ast, {
JSXText(node) {
console.log(node.expression)
}
});
推荐阅读
- python - Pandas 将不同的 Excel 工作表与由工作表名称派生的新列合并为一个
- java - 如何在 Swing 应用程序中使用 FlatLaf 库?
- java - 在 Entity Spring JPA 中保存列表项
- c# - UI 不显示 WPF 项目中的 ProgressBar 进度
- python - 如何增加 3D 条形图在 y 轴上的间隙(matplotlib 问题)?
- apache - 更改 IdP,但无法识别属性
- python - Google Jam 测试用例通过但提交显示“错误答案”
- google-chrome - 如何获取关键 chrome.storage.sync.get chrome 扩展的值?
- amazon-web-services - 内部负载均衡器的自动缩放组和 IP 目标类型
- javascript - 从 Firebase 数据库中的嵌套节点查找每个代理的总量