5

前端有多少工作是能用到 AST 的

 1 year ago
source link: https://www.v2ex.com/t/905062
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

前端有多少工作是能用到 AST 的

  YadongZhang · zhyd1997 · 12 小时 54 分钟前 · 4171 次点击

目前遇到常用 AST 的场景还是开源库 Storybook ,会用到 jscodeshift ,mdx 和 babel 相关的 AST 工具。

不过日常开发 Figma 切图还是主要工作.

有哪些公司或者部门会经常用到相关领域知识? 或者说大家都是写业务代码的,不是 Core Team (比如写组件的)就不会用到 AST ?

举个例子,代码重构写 Codemod 才会用到 AST 相关工具。

纯交流,只是觉得这个东西有意思而已

第 1 条附言  ·  3 小时 46 分钟前

看了评论都挺强,除了我也写过几行 eslint 的插件,其他评论我都看不懂
34 条回复    2022-12-28 20:20:40 +08:00
han3sui

han3sui      12 小时 46 分钟前

自定义的 eslint plugin
wu67

wu67      12 小时 43 分钟前

小公司业务仔, 没有涉及过这东东.
ZZITE

ZZITE      12 小时 38 分钟前

例如实现一个 notion 那样非常复杂的 Filter ,可以随意的添加,组合,嵌套各种筛选条件等
musi

musi      12 小时 34 分钟前

一般来讲还是工具类用的比较多
另外业务上我遇到过 B 端表单公式解析
rbe

rbe      12 小时 31 分钟前

saas 经常会有业务相关的“公式计算器”需求,比如自定义计算某种费率的算法,这种会涉及到 lexer 、parser 等。再比如做 SQL 编辑器的实时输入提示等场景。
MEIerer

MEIerer      12 小时 30 分钟前

写业务用不上,用也是强行使用,写基础设施或其他的才用得上,比如自定义 webpack 插件 eslint 插件啥的
tool2d

tool2d      12 小时 29 分钟前

我也喜欢 AST ,但是正常公司的前端需求,大概率不会牵涉到这种代码。

只有不务正业的前端,才会写点这个代码。

anyway, 我还是觉得写 AST 树 /虚拟机,很有意思。
shakukansp

shakukansp      12 小时 29 分钟前

最简单的:封装一个表单生成器
AyaseEri

AyaseEri      12 小时 26 分钟前

用不用得上取决于公司的风气与领导的态度,我们做低代码本来就有不少公式解析、页面 schema 解析的需求,领导只想低成本解决问题而不是去整什么 AST 之类的东西。
waiaan

waiaan      12 小时 14 分钟前 via Android

@tool2d 有没有相关的入门学习资料推荐一下?
tool2d

tool2d      12 小时 8 分钟前

@waiaan 个人建议,入门可以从解析表达式开始,比如你要动态处理 A = B*1.0 ,又不想把代码写死。

那么就可以编译成 AST 树,然后运行时,塞到堆栈虚拟机里运行,获取结果。
luzihang

luzihang      12 小时 7 分钟前

janus77

janus77      11 小时 39 分钟前

见过某些电商类公司,做活动和生成各种券的时候会需要根据产品设计的策略生成,而公司内部有自己的一个 web 后台,输入各种条件就能生成相应的券。这个地方应该是用了的
lneoi

lneoi      11 小时 35 分钟前

一般写插件扩展功能的时候会用到,日常场景用不上
zhuangzhuang1988

zhuangzhuang1988      11 小时 23 分钟前

做自动补全时候用到
HuskyYellow

HuskyYellow      11 小时 23 分钟前

有的,公司自己搞 vue3 转换成原生代码,近似于 React Native 那种编译。
duan602728596

duan602728596      11 小时 11 分钟前   ❤️ 1

曾经做过的:
为了在代码不变的情况下,在 electron 的环境中实现 require 的按需加载,开发了 babel plugin 。

为了优化编译的 antd 的暗黑模式的 css 代码,通过 typescript 解析代码生成 AST ,根据查找到的 antd 组件按需加载 less 文件,然后开发 postcss plugin 来删除多余的 css rule ,只保留颜色相关的 rule 。

实现自定义规则而开发 eslint plugin 。

新闻行业,发文章后会有敏感词检测并高亮,将 html 解析成 AST ,找到并标记敏感词。
inrich0life

inrich0life      11 小时 1 分钟前

涉及到源码处理的时候,就会用
crs0910

crs0910      10 小时 54 分钟前

爬别人网页里面的 js 内容时用到过,简单的找某个变量的值,正则不好拿又不想 eval 的时候。
Geo200

Geo200      10 小时 52 分钟前

普通业务用不到,涉及架构优化、源码管理、构建性能提升的时候会用到
Echoldman

Echoldman      10 小时 41 分钟前

我用 ast 的方式解析后端 php 的代码,获取到数据接口的字段名和标题,然后用这个来生成前端代码
yl20181003

yl20181003      10 小时 37 分钟前 via Android

公司的微前端框架,以及权限部分有用到
rick2c

rick2c      10 小时 31 分钟前   ❤️ 1

我做 i18n 的 key 自动收集
lopda

lopda      10 小时 29 分钟前

@duan602728596 大佬,有就 [新闻行业,发文章后会有敏感词检测并高亮,将 html 解析成 AST ,找到并标记敏感词。] 写过相关文章吗。想了解学习下
retrocode

retrocode      10 小时 26 分钟前

我是目前只在开发自定义 eslint 规则时有用到, 主要是适配项目自有校验和通用的代码修复
duan602728596

duan602728596      10 小时 14 分钟前

@lopda 因为这个是公司业务强相关的,所以没有相关文章。
因为文章是 html 的格式的,在文章发布前会通过 api 检查是否有敏感词并返回敏感词数组,然后本地使用 parse5 将 html 解析成 AST ,在 AST 中查找敏感词。AST 的遍历参考了 babel 的实现方法,通过不同的插件实现实现不同的功能。
以政治类新闻中的领导人名称为例,假设领导人名为 CKQ 。可能会出现<div><span>C</span><b>K</b></div><span>Q</span>这种情况,光靠正则不太够用,而且不太好做标记。就会用 AST 来查找并标记。
jones2000

jones2000      10 小时 6 分钟前

一直都用 AST , 都自己写的,大学上过编译原理的,这个东西不难。AST 做完以后, 直接把 AST 转成 c++代码或其他平台代码,就可以自动跨语言移植了
liuidetmks

liuidetmks      10 小时 2 分钟前

我能想到的就是逆向 js 可能有用
CocaColf

CocaColf      9 小时 42 分钟前   ❤️ 1

普通业务中很少有用到的场景吧,一般都在基建相关的代码里才会用到。我用到的场景一般是 eslint plugin 、将某种形式的文件转为另一种、解析 js 代码提取信息、代码片段自动重构。比如这个寻找改动文件和函数影响面的小项目: https://github.com/CocaColf/coderfly
qieqie

qieqie      9 小时 38 分钟前 via iPhone

代码编辑器上的高亮 /lint ,web 终端上的 sh 脚本、sql 自动补全
AmiKara

AmiKara      8 小时 0 分钟前

当业务需要理解语言含义的时候就要用到 AST
loloxwg

loloxwg      7 小时 42 分钟前

数据库,sql 解析的时候会用
liaozzzzzz

liaozzzzzz      1 小时 37 分钟前

一般场景就是做些工具类的吧,构建工具的插件或者 babel 、eslint 这些的插件,或者就是些 codemod 工具,业务上基本上基本就没用到了

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK