网易首页 > 网易号 > 正文 申请入驻

一个PR换预渲染:小团队怎么改底层工具链

0
分享至

大多数人遇到"工具不支持"会绕路走。Brisa框架的作者选择直接改解析器源码——这背后是一套关于构建工具链的残酷成本计算。

从TypeScript编译器的泥潭里爬出来


维护过next-translate的开发者都懂那种痛。为了给Next.js页面自动注入国际化加载器,作者用了TypeScript编译器API。结果?每个页面文件都要调ts.createProgram(),完整类型检查器实例化,库解析全跑一遍。

最后只能靠noResolve: true和noLib: true硬压性能。解析器干了十倍于需求的活——他们只要AST,不要类型。

这种 overhead(额外开销)在大型项目里会指数级放大。作者算过账:Brisa需要解析每个源文件,分析导入、检测服务端/客户端组件、注入宏、转换JSX,全在AST层面完成。用TypeScript编译器等于给自己挖坑。

纯JavaScript解析器的速度暴力

Meriyah的卖点很直白:纯JavaScript实现,无原生绑定,无WASM加载,无编译步骤。调parseScript(code, { jsx: true, module: true, next: true }),微秒级返回ESTree(一种JavaScript语法树标准格式)AST。

Brisa的构建管线里,这个速度差是复利效应。每个源文件都过Meriyah,跑在AST().parseCodeToAST()里——先用Bun的转译器处理,再喂给Meriyah。输出是标准ESTree Program节点,用astring遍历、修改、再生代码。

这里有个细节:Bun的转译器+Meriyah的组合,相当于把"解析"和"类型无关的AST操作"解耦了。不需要的类型检查全部砍掉,只保留框架真正需要的语法分析能力。

renderOn="build"的实现陷阱

Brisa有个prerender(预渲染)功能,允许组件在构建时渲染。写法很直观:

AST转换检测到renderOn="build",把JSX替换成__prerender__macro()调用,并在文件顶部注入:

import { __prerender__macro } from 'brisa/macros' with { type: 'macro' };

那个with { type: 'macro' }是导入属性(import attribute),告诉Bun的打包器在编译期解析导入。组件在构建时渲染,结果注入为静态HTML。

用户写的是renderOn="build",框架底层却在手动构造ImportDeclaration和ImportAttribute AST节点,再再生代码。这套机制依赖Meriyah能正确解析和生成import attributes语法。

卡住的时刻:上游工具不支持新语法

问题来得直接:作者开始用Meriyah时,它还不支持import attributes。这不是配置能绕过去的——语法解析是硬门槛,不支持就是不支持。

选项很现实:等上游更新(时间不确定)、换解析器(迁移成本)、或者自己修。作者选了第三条路:给Meriyah提PR,亲手加上import attributes支持。

PR合并后,Brisa的整条预渲染管线才跑通。从"解析器不支持我的语法"到"我修解析器",这个跳跃的前提是深度理解AST工作机制——知道语法糖背后对应什么节点结构,知道怎么在不破坏现有功能的前提下扩展解析器。

小团队改底层工具链的隐性门槛

这件事的启示在于成本结构的重新计算。表面看,自己改解析器是"重投入";实际算总账,可能比绕路、等待、或换技术栈更便宜。

作者维护next-translate的经验说明:选错基础工具,后续的performance tuning(性能调优)是在还技术债。TypeScript编译器API功能完整,但为"类型检查"支付的 overhead 在只需要AST的场景里是纯浪费。

Meriyah的选型策略是精准裁剪:不要的功能坚决不要,用纯JavaScript实现换取部署简单性,用ESTree标准保证生态兼容。这种"刚好够用"的哲学,反而在特定场景下比全能型工具更高效。

但这也意味着要承担维护风险。当需要import attributes这种较新语法时,没有大公司背书的开源项目可能滞后。作者的解法是把"给上游提PR"纳入技术方案的可行选项——这要求团队有能力阅读、修改、测试解析器级别的代码。

AST操作正在成为框架开发的基础技能

作者提到AST Explorer是参考工具,自己也想为Kitmul建类似的东西。这个细节说明:现代JavaScript框架开发,AST操作已经从"高级技巧"变成"基础设施"。

编译时做代码转换、宏注入、服务端/客户端组件分离——这些功能都依赖解析→变换→再生这一流水线。框架作者必须能读懂AST结构,能在解析器不支持时定位问题甚至动手修复。

Brisa的案例展示了一条路径:当工具链的某个环节成为瓶颈,且该环节足够精简、边界清晰时,直接介入修改可能比等待或替换更可控。Meriyah的纯JavaScript实现降低了介入门槛——没有原生代码,没有复杂的构建系统,PR的review和合并周期相对可控。

但这条路也有边界。如果依赖的是V8级别的解析器,或者需要修改类型系统,小团队的介入成本会陡增。Meriyah的"简单性"既是性能优势,也是可hack性(可修改性)的来源。

当构建工具链的每个环节都可能成为瓶颈,框架作者需要的一套新能力是什么?是更深地扎进编译原理,还是在工具选型时就预留好"可替换"的接口设计?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
白宫记者协会晚宴突发枪击事件,特朗普“安全无恙”,超250名记者联名要求将晚宴变成维权现场

白宫记者协会晚宴突发枪击事件,特朗普“安全无恙”,超250名记者联名要求将晚宴变成维权现场

极目新闻
2026-04-26 10:11:47
南航机上旅客戏言行李有炸弹致航班延误!警方追责其违法行为

南航机上旅客戏言行李有炸弹致航班延误!警方追责其违法行为

南方都市报
2026-05-01 11:36:16
要来了?郑丽文启程赴美前,大陆先声夺人,全岛2300万人面临抉择

要来了?郑丽文启程赴美前,大陆先声夺人,全岛2300万人面临抉择

轩逸阿II
2026-05-01 08:16:37
赖清德“爱将”吴思瑶说“大陆用语”、吃“大陆美食”,“青鸟”崩溃质问:为什么要吃“统战”食物?台湾网友嘲笑绿营“双标”

赖清德“爱将”吴思瑶说“大陆用语”、吃“大陆美食”,“青鸟”崩溃质问:为什么要吃“统战”食物?台湾网友嘲笑绿营“双标”

京彩台湾
2026-04-30 13:14:01
扎哈罗娃:俄罗斯与基辅政权不同 不会将战士投入到毫无意义的强攻中

扎哈罗娃:俄罗斯与基辅政权不同 不会将战士投入到毫无意义的强攻中

俄罗斯卫星通讯社
2026-05-01 15:20:54
电力市场大变天!分时电价谢幕,一场迟到40年的电力革命正在发生

电力市场大变天!分时电价谢幕,一场迟到40年的电力革命正在发生

趣文说娱
2026-04-16 20:21:15
60比86惨败26分!女篮劲敌热身赛输麻了:日本队世界杯前景堪忧?

60比86惨败26分!女篮劲敌热身赛输麻了:日本队世界杯前景堪忧?

篮球快餐车
2026-05-01 05:52:28
没想到,国家出手曝光恶行才一天,白冰竟又给谢霆锋添“麻烦”

没想到,国家出手曝光恶行才一天,白冰竟又给谢霆锋添“麻烦”

户外钓鱼哥阿旱
2026-05-01 15:23:52
查尔斯在美国国会说“基督教是精神支柱”,议员们全体鼓掌——但你真的听懂了吗?

查尔斯在美国国会说“基督教是精神支柱”,议员们全体鼓掌——但你真的听懂了吗?

守望的田野
2026-04-30 17:42:53
监管重拳!一夜之间,9家公司被查被罚

监管重拳!一夜之间,9家公司被查被罚

21世纪经济报道
2026-05-01 16:18:14
胡锡进以安全代言沃尔沃,是整个社会的耻辱

胡锡进以安全代言沃尔沃,是整个社会的耻辱

黔有虎
2026-04-19 17:34:12
各大日媒都没料到,中方出手会这么狠,再这样下去日本就完蛋了

各大日媒都没料到,中方出手会这么狠,再这样下去日本就完蛋了

爱意随风起呀
2026-04-30 19:11:21
苹果上季在华收入继续两位数大增,iPhone收入创同期新高,本季营收指引意外强劲 | 财报见闻

苹果上季在华收入继续两位数大增,iPhone收入创同期新高,本季营收指引意外强劲 | 财报见闻

华尔街见闻官方
2026-05-01 06:53:57
封神!老外狂赞《黑神话》开场 D加密破解引外网炸锅

封神!老外狂赞《黑神话》开场 D加密破解引外网炸锅

游民星空
2026-05-01 15:09:46
Codex、Claude、Gemini 发力争抢桌面端

Codex、Claude、Gemini 发力争抢桌面端

Ai学习的老章
2026-04-30 18:30:54
有人说:打麻将和性生活是县城的底色?

有人说:打麻将和性生活是县城的底色?

灯锦年
2026-04-21 12:32:46
广州房价大幅下滑区域分析

广州房价大幅下滑区域分析

林子说事
2026-05-01 07:20:36
3999元的M4 Mac mini,竟是今年最便宜的AI开发机

3999元的M4 Mac mini,竟是今年最便宜的AI开发机

小蜜情感说
2026-05-01 15:18:16
悲催!舅妈在舅舅离世次年改嫁,拉黑所有亲属,临终前求合葬被拒

悲催!舅妈在舅舅离世次年改嫁,拉黑所有亲属,临终前求合葬被拒

火山詩话
2026-05-01 09:41:42
郑丽文高调规划访美行程,国台办回应分量十足,轮不到外人插手!

郑丽文高调规划访美行程,国台办回应分量十足,轮不到外人插手!

娱乐小可爱蛙
2026-05-01 11:44:31
2026-05-01 17:12:49
摸鱼算法
摸鱼算法
致力于用最前沿的AI技术,换取更多发呆时间的三十岁青年。
2052文章数 20关注度
往期回顾 全部

科技要闻

苹果上季在华收入继续大增 iPhone收入新高

头条要闻

74岁老人邮轮旅行登船次日突发急症离世 家属索赔90万

头条要闻

74岁老人邮轮旅行登船次日突发急症离世 家属索赔90万

体育要闻

无奈!约基奇:这要在塞尔维亚 全队早被炒了

娱乐要闻

邓超在景德镇被偶遇,穿黑外套逛茶园

财经要闻

GPU神话松动,AI真正的战场变了

汽车要闻

限时9.67万起 吉利星越L/星瑞i-HEV智擎混动上市

态度原创

家居
数码
本地
手机
公开课

家居要闻

灵动实用 生活艺术场

数码要闻

700万元一台还抢不到!NVIDIA B300服务器价格暴涨:较去年底近乎翻倍

本地新闻

用青花瓷的方式,打开西溪湿地

手机要闻

Omdia再发Q1报告,三星、苹果增,小米、vivo、OPPO降

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版