<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Web标准 | 锤子前端</title><description>Now vibe coding, so learning hammer FE ?</description><link>https://channel.meo-ai.com</link><item><title>《框架还重要吗？》</title><link>https://channel.meo-ai.com/posts/708</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/708</guid><pubDate>Sun, 20 Sep 2026 02:45:28 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《框架还重要吗？》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;br /&gt;&lt;a href=&quot;/search/result?q=%23%E7%BC%96%E7%A8%8B&quot; title=&quot;#编程&quot;&gt;#编程&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E5%BC%80%E5%8F%91&quot; title=&quot;#Web开发&quot;&gt;#Web开发&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23AI%E7%BC%96%E7%A8%8B&quot; title=&quot;#AI编程&quot;&gt;#AI编程&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6&quot; title=&quot;#前端框架&quot;&gt;#前端框架&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23React&quot; title=&quot;#React&quot;&gt;#React&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B&quot; title=&quot;#软件工程&quot;&gt;#软件工程&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%8A%80%E6%9C%AF%E8%B6%8B%E5%8A%BF&quot; title=&quot;#技术趋势&quot;&gt;#技术趋势&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23VibeCoding&quot; title=&quot;#VibeCoding&quot;&gt;#VibeCoding&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;这是一篇探讨在 AI 编程时代 Web 框架是否仍然重要的深度分析文章。作者 Brooks Lybrand 作为拥有三年开源框架开发经验的前端工程师，针对&quot;模型已经足够好，框架选择不再重要&quot;的流行观点进行了系统性反驳，论证了框架在提供抽象、结构和约束方面的核心价值，并呼吁行业继续创新和构建新框架。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;1. **对&quot;React 已赢&quot;论的质疑**：作者指出当前流行观点认为由于 LLM 训练数据中 React 代码最多，模型最熟悉 React，因此无需尝试其他框架。但他认为这种逻辑存在矛盾——如果框架真的不重要，那连 React 都不需要，直接用 Web Components 或让 AI 生成原生代码即可。&lt;br /&gt;&lt;br /&gt;2. **框架的本质价值**：作者将框架的价值精炼为三点：**提供抽象（Abstractions）、结构（Structure）和约束（Constraints）**。这些价值不仅适用于人类开发者，对 AI 编程同样关键——良好的抽象能避免 AI 重复造轮子或创建混乱的临时方案；清晰的结构帮助 AI 生成可维护的代码；明确的约束（如类型检查、测试）能防止 AI 在迭代中破坏系统。&lt;br /&gt;&lt;br /&gt;3. **AI 时代框架的隐性存在**：引用 React 核心团队成员 Ricky Hanlon 的观点&quot;你要么使用框架，要么构建框架&quot;，作者强调即使不显式选择框架，AI 在生成代码时也会隐式地创建框架。与其让 AI 生成一个缺乏维护、充满临时补丁的&quot;隐性框架&quot;，不如使用经过实战检验、文档完善的开源框架。&lt;br /&gt;&lt;br /&gt;4. **开发者体验（DX）的重构**：通过分析 HMR（热模块替换）、TypeScript 和 &lt;code&gt;useEffect&lt;/code&gt; 等具体技术，作者说明某些传统 DX 功能对人类开发者的价值正在转变，但对 AI 编程仍至关重要。例如 TypeScript 的类型约束能有效防止 AI 在复杂应用中引入错误，而 &lt;code&gt;useEffect&lt;/code&gt; 这类强大但易误用的抽象则应该避免让 AI 随意使用。&lt;br /&gt;&lt;br /&gt;5. **框架战争的终结与新机遇**：作者认为 2013-2024 年的&quot;框架战争&quot;已经结束，人们不再渴望为框架争论，但这不意味着框架不再重要。他指出当前框架领域仍存在明显不足，特别是缺乏真正全栈、基于 Web 标准、易于 AI 协作且代码可理解的 JavaScript 框架。&lt;br /&gt;&lt;br /&gt;6. **对未来的呼吁**：尽管承认 AI 正在重塑软件开发，且没人知道其长期影响，作者仍坚持认为认为&quot;所有问题都已解决&quot;是一种颓废的态度。他呼吁继续构建新框架，探索更好的抽象和模式，而不是停留在&quot;现有框架足够好&quot;的舒适区。&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://brookslybrand.com/posts/do-frameworks-matter-anymore/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://brookslybrand.com/posts/do-frameworks-matter-anymore/&quot;&gt;https://brookslybrand.com/posts/do-frameworks-matter-anymore/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&amp;gt; 个人觉得有点片面化，remix 脱离 react 转而用 preact 自创轮子</content:encoded></item><item><title>《用 AI 定制框架替换 Next.js：一个静态网站的“超个性化”重构实验》</title><link>https://channel.meo-ai.com/posts/707</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/707</guid><pubDate>Mon, 14 Sep 2026 01:14:08 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《用 AI 定制框架替换 Next.js：一个静态网站的“超个性化”重构实验》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;br /&gt;&lt;a href=&quot;/search/result?q=%23Web%E5%BC%80%E5%8F%91&quot; title=&quot;#Web开发&quot;&gt;#Web开发&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF%E5%B7%A5%E7%A8%8B&quot; title=&quot;#前端工程&quot;&gt;#前端工程&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23AI%E8%BE%85%E5%8A%A9%E7%BC%96%E7%A8%8B&quot; title=&quot;#AI辅助编程&quot;&gt;#AI辅助编程&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23NextJs&quot; title=&quot;#NextJs&quot;&gt;#NextJs&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99&quot; title=&quot;#静态网站&quot;&gt;#静态网站&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%87%AA%E5%AE%9A%E4%B9%89%E6%A1%86%E6%9E%B6&quot; title=&quot;#自定义框架&quot;&gt;#自定义框架&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96&quot; title=&quot;#性能优化&quot;&gt;#性能优化&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Vercel%E9%83%A8%E7%BD%B2&quot; title=&quot;#Vercel部署&quot;&gt;#Vercel部署&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;作者 Max Leiter 用 Claude Code（Fable 5 架构、Opus 实现）在约 3 小时内把个人博客从 Next.js 迁移到了一个为站点量身定制的静态构建框架。新方案把全站编译成纯 HTML，按需加载少量 Preact islands，结果页面体积、Lighthouse 分数、构建时间全面大幅优于 Next.js；代价是放弃了框架生态的无数隐性优化，后续维护与安全问题也由自己承担。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;1. 作者让 AI “按需造一个比 Next.js 更快的专属框架”，核心思路是只保留这个网站真正用到的 Next.js 功能，而不是继续背着整个框架跑。&lt;br /&gt;&lt;br /&gt;2. 新框架本质上是一个构建脚本：读取文章目录，用 React 在服务端渲染每条路由为静态 index.html，再按 Vercel Build Output API 输出，M2 MacBook 上热构建只要约 0.5 秒。&lt;br /&gt;&lt;br /&gt;3. 性能提升非常夸张：首页 JS 从 208 KB 降到 2.3 KB（约 -99%），移动端 LCP 从 2.4 秒降到 1.3 秒，整页重量从 1153 KB 降到 78 KB，Lighthouse 直接冲到 100 分。&lt;br /&gt;&lt;br /&gt;4. 博客文章页同样收益明显：HTML 更小、JS 只剩 2.3 KB，移动端 LCP 从 2.2 秒降到 1.1 秒，页面重量从 405 KB 降到 57 KB，软导航也改成更轻的 partial/prerender 方案。&lt;br /&gt;&lt;br /&gt;5. 交互没有消失，而是改成“islands”模式：桌面窗口管理器和命令面板用 Preact 组件按需水合，命令面板首次按 Cmd+K 才加载，Preact 兼容层只有约 7 KB，比 React 的 52 KB 轻很多。&lt;br /&gt;&lt;br /&gt;6. 构建链路保留原有体验：MDX 仍在构建期用同一套 remark/rehype 插件编译，shiki 在构建时同时输出两套主题的代码高亮，所以切换主题不需要额外 JS。&lt;br /&gt;&lt;br /&gt;7. AI 还写了一个“parity harness”，对旧站 101 条路由做快照，对比 head、正文和代码块，结果抓出了 8 篇未发布文章泄漏进 RSS、以及一张 404 的 OG 图这类真实问题。&lt;br /&gt;&lt;br /&gt;8. 整个实验花费约 669 美元，API 运行 8 小时 27 分，代码新增 20914 行、删除 2022 行，大约用掉 Claude Code 20x 订阅额度的 10%。&lt;br /&gt;&lt;br /&gt;9. 作者认为这种做法的意义在于“只 vendor 你真正需要的东西”：框架被压缩到约 5000 行，人和模型都更容易审查，也能减少供应链攻击面。&lt;br /&gt;&lt;br /&gt;10. 缺点也很直白：Next.js 里成百上千个小优化和边界处理 AI 未必都知道或能复现；没有现成的 agent 工具链集成；安全修复不再自动从上游来；而且网站一旦有问题，bug、安全、功能需求都归你自己管。&lt;br /&gt;&lt;br /&gt;11. 文章还记录了两个浏览器层面的坑：Chrome 的跨文档 view transitions 会因 head 里的外部 module script 静默跳过入场动画，所以 runtime 必须内联；Safari 对 Speculation Rules 的 feature detection 需要同时检查 API 支持和 document.prerendering。&lt;br /&gt;&lt;br /&gt;12. 作者最后判断：未来可能会出现更多“vendoring”和 agentic rewrite，也就是所谓“slop forks”；更激进的猜测是，框架本身可能会消亡，因为框架真正值钱的是沉淀下来的庞大知识，而这些知识未来可能被蒸馏成 skills 或某种新标准。&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://maxleiter.com/blog/thank-u-next&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://maxleiter.com/blog/thank-u-next&quot;&gt;https://maxleiter.com/blog/thank-u-next&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://maxleiter.com/blog/thank-u-next&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Replacing Next.js with a vibe-coded &amp;quot;framework&amp;quot;&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Max Leiter&apos;s website&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;thank u, next | Max Leiter&quot; src=&quot;/static/https://cdn4.telesco.pe/file/kdFAJcXQWvQ2Hj_EO_jXHHu2J1wxQFmIrOIai3MRmDev1LDm5NObdkw9VgPPK3jmGCVtjEshJuSDFb44jM17_RzpPl7XeG0dWZdV94wpyMni3pCIfuAIuWxSLYgtTMV7Ai4WbjKhd5NSW55lby8LaqIfZBwyIvm2PC9DyUqNV4QLsd3jzBGVCYlpAVn5vz0B1xnj_Oba_VkRiPQXzEpyY2BDSpSd1ncfHuZ3I9QzKfPmtGh9n2T167qhPgO2L6qvP_smC8glhYfXnFX1AToNywb10Bs3dvKsv6o6tHSuD9y7THN-_qUuKx7BVOUTLvr7eCxAi6n1grRoYoCFt8B2Cw.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;thank u, next | Max Leiter&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Replacing Next.js with a vibe-coded &quot;framework&quot;&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《程序员的音乐理论：从零推导乐理系统》</title><link>https://channel.meo-ai.com/posts/698</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/698</guid><pubDate>Fri, 28 Aug 2026 01:06:54 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《程序员的音乐理论：从零推导乐理系统》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;br /&gt;&lt;a href=&quot;/search/result?q=%23%E9%9F%B3%E4%B9%90%E7%90%86%E8%AE%BA&quot; title=&quot;#音乐理论&quot;&gt;#音乐理论&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E7%BC%96%E7%A8%8B&quot; title=&quot;#编程&quot;&gt;#编程&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web_Audio_API&quot; title=&quot;#Web_Audio_API&quot;&gt;#Web_Audio_API&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%A3%B0%E5%AD%A6%E7%89%A9%E7%90%86&quot; title=&quot;#声学物理&quot;&gt;#声学物理&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%95%B0%E5%AD%A6%E5%8E%9F%E7%90%86&quot; title=&quot;#数学原理&quot;&gt;#数学原理&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6&quot; title=&quot;#计算机科学&quot;&gt;#计算机科学&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;本文从物理和算术的第一性原理出发，用 JavaScript 代码逐步推导出整个西方音乐理论体系。作者不依赖记忆，而是通过编程和听觉验证，解释了为什么音乐有十二个音、为什么大调音阶是那个形状、为什么和弦听起来和谐，以及乐谱本质上是一种序列化格式。核心洞察是：音乐理论并非 arbitrary 的约定，而是物理（泛音列）和数学（简单整数比）的自然结果。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;1. 声音的本质是随时间变化的数字 — 音频就是每秒 44,000 次描述扬声器位置的数字列表，频率即音高，440Hz 只是人为约定的基准。&lt;br /&gt;&lt;br /&gt;2. 音色来自你没要求的频率 — 任何乐器发出的都不是单一频率，而是基频的整数倍（泛音列）。不同波形（正弦、三角、方波、锯齿波）本质上是泛音配方的差异，这解释了为什么小提琴和小号音色不同。&lt;br /&gt;&lt;br /&gt;3. 八度是频率翻倍，音高是乘法关系 — 220Hz、440Hz、880Hz 听起来是&quot;同一个音&quot;，因为高八度的所有泛音都包含在低八度的泛音列中。因此整个音高问题简化为&quot;如何把倍频区间分割&quot;。&lt;br /&gt;&lt;br /&gt;4. 简单整数比听起来和谐 — 2:1（八度）、3:2（五度）、4:3（四度）、5:4（大三度）听起来协和，是因为它们的泛音列有大量重叠；而复杂比例（如 √2）产生拍频和粗糙感。协和的本质是耳朵能快速找到重复模式。&lt;br /&gt;&lt;br /&gt;5. 十二音律是数学妥协 — 纯五度（3:2）叠 12 次不等于 7 个八度（2^7），这个无法修复的误差叫&quot;毕达哥拉斯音差&quot;。现代十二平均律将八度均分为 12 份（每份是 2 的 12 次方根），虽然除了八度都不纯，但让所有调都能用。12 之所以被选中，是因为它是第一个能把五度误差控制在约 0.1% 以内的数字。&lt;br /&gt;&lt;br /&gt;6. 音阶是间隔数组 — 大调音阶 &lt;code&gt;[2,2,1,2,2,2,1]&lt;/code&gt; 只是一个七元素数组，加起来为 12。自然小调是它的旋转（从第 5 位开始），七种调式则是同一数组的 7 种循环移位，这让作者感叹&quot;音乐理论终于不再像 arbitrary 的 trivia&quot;。&lt;br /&gt;&lt;br /&gt;7. 和弦是隔一个音取的堆叠 — 三和弦 &lt;code&gt;[0,2,4]&lt;/code&gt; 取音阶中每隔一个的音，大三和弦 &lt;code&gt;[0,4,7]&lt;/code&gt; 与小三和弦 &lt;code&gt;[0,3,7]&lt;/code&gt; 只差一个半音，却代表了西方音乐两大情感极。七和弦加入第四个音后，音乐开始从&quot;圣咏&quot;变成&quot;爵士&quot;。&lt;br /&gt;&lt;br /&gt;8. 调内七和弦是自然涌现的 — 在一个大调音阶上，从七个音级分别构建三和弦，会自动得到：I（大三）、ii（小三）、iii（小三）、IV（大三）、V（大三）、vi（小三）、vii°（减三）。罗马数字标记是相对寻址，移调只需加一个常数。&lt;br /&gt;&lt;br /&gt;9. 张力与解决有物理基础 — V7 → I 是最强的解决感，因为 V 和弦中的 B（导音）距 I 的根音只差半音，且 V7 包含三全音（B-F，√2 比例，最不稳定），这两个音分别向相反方向移动半音到达稳定位置。&lt;br /&gt;&lt;br /&gt;10. 乐谱是带 header 的序列化格式 — 五线谱本质是针对&quot;实时阅读、手在忙&quot;场景优化的数据格式：纵轴是音阶度数（非线性频率），谱号定义坐标原点，升降号是 escape hatch，调号是 DRY 原则（常量提升），时值是 2 的负幂次，附点是二进制分数，速度（BPM）把拍子映射到秒。&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://runjs.app/blog/music-theory-for-programmers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://runjs.app/blog/music-theory-for-programmers&quot;&gt;https://runjs.app/blog/music-theory-for-programmers&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://runjs.app/blog/music-theory-for-programmers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;I can&apos;t play an instrument, so I worked out music theory in JavaScript instead. Twelve notes, scales and chords, derived from scratch with code you can hear.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;runjs.app&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Music theory for programmers&quot; src=&quot;/static/https://cdn4.telesco.pe/file/dz3NPuInGrWEmApN3KKN_MaOP3khOyacifcUMswzUC7pgERZA2FU9-r7vpId2Rf-sF7oJ_9ENjatb8QujcJ-Eu3WBAxtAwkP_MX608NTVhN8UttioivjykfLBd5c9WyXZq7dV_JP_V3QIrwr_F3h5_aDd0fl64tZoZO2zcEmr8peXKCpyrIfZxb-p6K1GJEd8un4PIWHv4I6GPt1xjV2DTZGgglqseEfn7RsRBZtUDb0rKgHTqZoOGVbt3c4Y9fyaK4bHfXIJ_GtGXF-ikso_n9GZ_v2810vgnFTfOtMInzWPI9k_FlnA4Wchkzu770icuJCTvNs2KU2bZeyCCUJcQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Music theory for programmers&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;I can&apos;t play an instrument, so I worked out music theory in JavaScript instead. Twelve notes, scales and chords, derived from scratch with code you can hear.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《unbash：零依赖的 Bash 解析器》</title><link>https://channel.meo-ai.com/posts/692</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/692</guid><pubDate>Sat, 15 Aug 2026 12:55:27 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《unbash：零依赖的 Bash 解析器》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;br /&gt;&lt;a href=&quot;/search/result?q=%23Web%E5%BC%80%E5%8F%91&quot; title=&quot;#Web开发&quot;&gt;#Web开发&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23NodeJs&quot; title=&quot;#NodeJs&quot;&gt;#NodeJs&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Bash%E8%A7%A3%E6%9E%90&quot; title=&quot;#Bash解析&quot;&gt;#Bash解析&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TypeScript&quot; title=&quot;#TypeScript&quot;&gt;#TypeScript&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23AST&quot; title=&quot;#AST&quot;&gt;#AST&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%B7%A5%E5%85%B7&quot; title=&quot;#命令行工具&quot;&gt;#命令行工具&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E9%9D%99%E6%80%81%E5%88%86%E6%9E%90&quot; title=&quot;#静态分析&quot;&gt;#静态分析&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 定位清晰：unbash 是一个用 TypeScript 编写的、零依赖的 Bash 解析器，能将 Bash 源码（命令、脚本或嵌入在其他格式中的 shell 代码）解析为带类型和源码位置的 AST，且不执行代码&lt;br /&gt;2. 适用场景丰富：可用于权限审核、静态盘点脚本中的可执行文件和依赖引用、将 &lt;code&gt;curl&lt;/code&gt; 等命令结构化导入、为粘贴的 Bash 代码附加诊断信息、构建可视化解释、以及安全地查找和迁移命令调用&lt;br /&gt;3. 语法支持全面：涵盖命令、控制流、管道、重定向、赋值、复合语句、参数扩展、进程替换、heredoc、算术表达式等，嵌套命令在参数、数组索引、算术表达式中仍保持结构化&lt;br /&gt;4. 容错能力强：对于畸形或不完整的输入，会返回尽力而为的部分 AST，并附带带源码位置的错误信息，适合处理编辑器输入或用户粘贴内容&lt;br /&gt;5. 性能碾压对手：在多个基准测试中，解析吞吐量远超 tree-sitter-bash（约 717 倍）、sh-syntax（约 92870 倍）和 bash-parser（约 275291 倍），包体积仅 80KB 压缩后 19KB&lt;br /&gt;6. 与竞品差异化明显：相比 tree-sitter-bash 提供的是可执行语法的类型化 AST 而非 CST；相比 sh-syntax 无需 WASM 且 API 更轻量；相比 bash-parser 支持更多 Bash 特性（如 &lt;code&gt;[[ ]]&lt;/code&gt;、&lt;code&gt;(( ))&lt;/code&gt;、herestrings、process substitution 等）且具备错误恢复能力&lt;br /&gt;7. 与 shellcheck 的互补关系：unbash 专注于&quot;解析结构&quot;，不做语义分析；以下场景推荐用 shellcheck 而非 unbash：&lt;br /&gt;   - 检查变量是否已定义或是否被引用（如未引用变量 &lt;code&gt;$var&lt;/code&gt; 可能引发 word splitting）&lt;br /&gt;   - 检测命令是否存在及其参数合法性（如 &lt;code&gt;git --不存在的参数&lt;/code&gt; 语法正确但运行会报错）&lt;br /&gt;   - 识别常见陷阱和反模式（如 &lt;code&gt;cat file | grep pattern&lt;/code&gt; 可简化为 &lt;code&gt;grep pattern file&lt;/code&gt;）&lt;br /&gt;   - 检查权限相关风险（如 &lt;code&gt;rm -rf /$undefined_var&lt;/code&gt; 的潜在危险）&lt;br /&gt;   - 提供可操作的修复建议（shellcheck 会直接给出 SC 规则编号和修复方案）&lt;br /&gt;   - 对脚本进行全面的最佳实践审查（POSIX 兼容性、可移植性建议等）&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://github.com/webpro-nl/unbash&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://github.com/webpro-nl/unbash&quot;&gt;https://github.com/webpro-nl/unbash&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://github.com/webpro-nl/unbash&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Fast 0-deps bash parser written in TypeScript. Contribute to webpro-nl/unbash development by creating an account on GitHub.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;GitHub&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;GitHub - webpro-nl/unbash: Fast 0-deps bash parser written in TypeScript&quot; src=&quot;/static/https://cdn4.telesco.pe/file/vQUj277sD_Gwtce0lyLqPsUcyAZCwZXOsmmnZwfHo6rui6B-SL-KC_HxE4wpkteg1mw-l6DXn6M2DES3NipOnerSbyBccQozGyseFIm2MxGL-bh7ZR1_uQDIo8hbsyNNO_jQgjVePm1KTFuQH0ESeB42RJWNAgrj8DLDSFVaX76aHegABcJqyWBBg3kttHnv4x0D7gSz3M0JlTx005aO2oGX1acRoBwLNnGfQuFBGrNfIYtFEBfaShL2xJzePDgTKz9f4Nwcah30Ow0id8zQjkEVBBUy2GMnqCkLQX2HwbDEmlte8D0zsFRSofjaMlq0-JhpdoPDDZoaBl3WIMtpdQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;GitHub - webpro-nl/unbash: Fast 0-deps bash parser written in TypeScript&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Fast 0-deps bash parser written in TypeScript. Contribute to webpro-nl/unbash development by creating an account on GitHub.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《前端框架基准测试平台》</title><link>https://channel.meo-ai.com/posts/683</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/683</guid><pubDate>Fri, 24 Jul 2026 15:50:48 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《前端框架基准测试平台》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E5%BC%80%E5%8F%91&quot; title=&quot;#Web开发&quot;&gt;#Web开发&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23FrameworkBenchmarks&quot; title=&quot;#FrameworkBenchmarks&quot;&gt;#FrameworkBenchmarks&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23PerformanceTesting&quot; title=&quot;#PerformanceTesting&quot;&gt;#PerformanceTesting&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23JavaScriptFrameworks&quot; title=&quot;#JavaScriptFrameworks&quot;&gt;#JavaScriptFrameworks&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23React&quot; title=&quot;#React&quot;&gt;#React&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Vue&quot; title=&quot;#Vue&quot;&gt;#Vue&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Svelte&quot; title=&quot;#Svelte&quot;&gt;#Svelte&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23SolidJS&quot; title=&quot;#SolidJS&quot;&gt;#SolidJS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Preact&quot; title=&quot;#Preact&quot;&gt;#Preact&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Qwik&quot; title=&quot;#Qwik&quot;&gt;#Qwik&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Lit&quot; title=&quot;#Lit&quot;&gt;#Lit&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Angular&quot; title=&quot;#Angular&quot;&gt;#Angular&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23BundleSize&quot; title=&quot;#BundleSize&quot;&gt;#BundleSize&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23BuildTime&quot; title=&quot;#BuildTime&quot;&gt;#BuildTime&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23LighthouseScores&quot; title=&quot;#LighthouseScores&quot;&gt;#LighthouseScores&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23HMR&quot; title=&quot;#HMR&quot;&gt;#HMR&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23NPMStats&quot; title=&quot;#NPMStats&quot;&gt;#NPMStats&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23StackMatch&quot; title=&quot;#StackMatch&quot;&gt;#StackMatch&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;这是一个全自动化的前端框架基准测试平台，由开发者Alicia Sykes维护。项目用同一个天气应用在React、Vue、Svelte等12+个主流框架中实现，每晚自动跑分对比包体积、Lighthouse评分、加载速度、CPU内存占用、构建时间及HMR热更新速度。还整合了GitHub和NPM社区数据，并自带Stack Match智能推荐工具。所有原始数据开源可下载，帮你告别选型纠结！&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 同一个天气应用，12+种框架实现——React、Vue、Svelte、Solid.js、Qwik、Lit等主流选手全部到场，公平对决&lt;br /&gt;2. 每晚自动跑分，数据新鲜出炉——包体积、Lighthouse性能分、FCP/LCP/TTI加载指标、CPU内存占用、构建时间、HMR速度全覆盖&lt;br /&gt;3. 社区数据一目了然——GitHub Stars、NPM月下载量、依赖数量、维护者人数、TS支持情况、许可证信息全整理好了&lt;br /&gt;4. 自带Stack Match智能推荐工具——填填项目偏好，就能get最适合你的框架，选型不再拍脑袋&lt;br /&gt;5. 完全开源透明——所有原始数据以JSON格式开放下载，测试用Playwright统一验证，结果可信可复现&lt;br /&gt;&lt;br /&gt;URL：[&lt;a href=&quot;https://framework-benchmarks.as93.net/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://framework-benchmarks.as93.net/&quot;&gt;https://framework-benchmarks.as93.net/&lt;/a&gt;](https://framework-benchmarks.as93.net/)&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://framework-benchmarks.as93.net/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;A comprehensive comparison of modern frontend frameworks&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Framework Benchmarks&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Framework Benchmarks&quot; src=&quot;/static/https://cdn4.telesco.pe/file/qhLWj8AtS4OzFQUYDRUEf53TdwKQp2CXn2B0is2aXhMWVg5Ybd1rk9SHZBeBXPsBmDTQee_uB1AgYNxHabLEURpmm2VKK90oC75jkdplMkFcjQu9d6wBNe55qHrUqQTLsGqT8F4lZkyOiD9_Tq9dM4JnB2Fx-UXVbAaj2djbtNFVCikYTgJ-1s-ypfyqnbe65kZmMu_KKF3JLkc86uenpnlIs3CORuQJp3CMmGxfZ8K-fTMWd6dDGKEhuFPCPluQLgTOrp8dB_GIYDapHDk6X_ONKMEk8f92gtSA-xtbFdWts6kZyUxMN-SQ913f-OHgxpkPlTfqrBerD6eAMJeIwg.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  
  &lt;div class=&quot;link_preview_description&quot;&gt;A comprehensive comparison of modern frontend frameworks&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《Express全新面貌》</title><link>https://channel.meo-ai.com/posts/638</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/638</guid><pubDate>Fri, 22 May 2026 10:19:28 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《Express全新面貌》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%90%8E%E7%AB%AF&quot; title=&quot;#后端&quot;&gt;#后端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23NodeJS&quot; title=&quot;#NodeJS&quot;&gt;#NodeJS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23ExpressJS&quot; title=&quot;#ExpressJS&quot;&gt;#ExpressJS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E6%A1%86%E6%9E%B6&quot; title=&quot;#Web框架&quot;&gt;#Web框架&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%96%87%E6%A1%A3%E9%87%8D%E6%9E%84&quot; title=&quot;#文档重构&quot;&gt;#文档重构&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%BC%80%E6%BA%90%E7%A4%BE%E5%8C%BA&quot; title=&quot;#开源社区&quot;&gt;#开源社区&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;Express官方博客宣布完成网站全面重构与品牌焕新，涵盖Astro技术栈迁移、AI智能搜索、版本化文档及全新Logo设计，标志着这个Node.js生态老牌框架在2024年重启后进入新阶段。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 网站底层从Jekyll迁移到Astro，带来更灵活的组件模型、国际化支持和内容页性能提升，文档生成与维护方式也一并升级&lt;br /&gt;2. 文档新增多版本并行浏览，Express 4和5的文档可以独立查看，告别版本混淆的烦恼&lt;br /&gt;3. 搜索接入了Orama的AI能力，支持自然语言提问，找API和概念更快更准&lt;br /&gt;4. 全站文档开放了&lt;code&gt;llms.txt&lt;/code&gt;端点，方便大模型和AI助手直接读取最新文档&lt;br /&gt;5. 接下来的重点是补齐内容缺口、完善多语言翻译，并让文档和新版本同步发布&lt;br /&gt;6. 新Logo由社区公开协作设计，品牌定位为&quot;Established·Dependable·Approachable&quot;，延续极简风格的同时开启新篇章&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://expressjs.com/en/blog/2026-05-18-a-new-look-for-express/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://expressjs.com/en/blog/2026-05-18-a-new-look-for-express/&quot;&gt;https://expressjs.com/en/blog/2026-05-18-a-new-look-for-express/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://expressjs.com/en/blog/2026-05-18-a-new-look-for-express&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Discover the redesigned Express.js website and our brand-new logo, built from the ground up with Astro.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Express.js&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;A New Look for Express · Express.js&quot; src=&quot;/static/https://cdn4.telesco.pe/file/wA2caV0UkMmeoh17rgLVtNzvyWKWs1ADySiANFvKMtX7ZjtizXJfc3N3ubErisnP0Q7WJz8Ojg4VA9KkMr3kmZ61N2zKVCDsvF5LaiWlEwtjgrLyeVFUCsR5Qmwy8GKgotri1m0XfksU5n6u1Z5suVQpqRG4JjJxq23hcAagl8KjogAisdPdu2Z4izIU2tQ14SI-CgxZrG3WSB9llO4cdZZpYqjj61QO_SsR9wVK0ZxYTRGhOeLE5spJXn6UntHL1oELl91xEUzTV7GXqlXV3wS3H_lEekLvx0-8ytmOSDfvhCNEPMHus2Bzz1_Jan-Pu8A8IcxBXvlxFXhVfJuiTQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;A New Look for Express · Express.js&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Discover the redesigned Express.js website and our brand-new logo, built from the ground up with Astro.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《原生JSON模块终于成为现实》</title><link>https://channel.meo-ai.com/posts/576</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/576</guid><pubDate>Wed, 18 Mar 2026 01:43:35 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《原生JSON模块终于成为现实》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23JavaScript&quot; title=&quot;#JavaScript&quot;&gt;#JavaScript&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23ESModules&quot; title=&quot;#ESModules&quot;&gt;#ESModules&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23JSON&quot; title=&quot;#JSON&quot;&gt;#JSON&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E6%A0%87%E5%87%86&quot; title=&quot;#Web标准&quot;&gt;#Web标准&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：本文介绍了JavaScript平台原生支持JSON模块导入的新特性。通过使用&lt;code&gt;import attributes&lt;/code&gt;语法&lt;code&gt;with { type: &quot;json&quot; }&lt;/code&gt;，开发者现在可以在浏览器、Node.js、Deno和Bun中直接导入JSON文件，无需构建工具转换。这标志着从构建时模拟到运行时原生支持的转变，使模块系统更加显式和可扩展。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;- 使用&lt;code&gt;import config from &quot;./config.json&quot; with { type: &quot;json&quot; }&lt;/code&gt;语法实现原生JSON导入，替代了以往需要打包工具转换的方式&lt;br /&gt;- 动态导入同样支持：&lt;code&gt;await import(&quot;./config.json&quot;, { with: { type: &quot;json&quot; } })&lt;/code&gt;&lt;br /&gt;- 导入的JSON会被解析一次并缓存，多次导入返回同一对象实例（&lt;code&gt;a === b&lt;/code&gt;为true）&lt;br /&gt;- 浏览器仍需服务器返回&lt;code&gt;Content-Type: application/json&lt;/code&gt;，并遵循CORS规则&lt;br /&gt;- 与打包工具方案对比：原生方案在运行时获取文件，而打包工具通常在构建时内联JSON&lt;br /&gt;- 此特性不仅限于JSON，已扩展支持CSS模块脚本（&lt;code&gt;with { type: &quot;css&quot; }&lt;/code&gt;），为未来其他结构化模块类型建立模式&lt;br /&gt;- 现代浏览器、Node.js、Deno、Bun均已支持该特性，但打包工具在代码分割、资源哈希等方面仍有价值&lt;br /&gt;&lt;br /&gt;文章URL：&lt;a href=&quot;https://allthingssmitty.com/2026/03/16/native-json-modules-are-finally-real/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://allthingssmitty.com/2026/03/16/native-json-modules-are-finally-real/&quot;&gt;https://allthingssmitty.com/2026/03/16/native-json-modules-are-finally-real/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://allthingssmitty.com/2026/03/16/native-json-modules-are-finally-real&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;JSON imports finally work natively. Learn how import ... with { type: &apos;json&apos; } changes runtime behavior, caching, and makes bundlers optional.&quot;&gt;
  &lt;i class=&quot;link_preview_right_image&quot; style=&quot;background-image:url(&apos;https://cdn4.telesco.pe/file/WN5gYHdJxxyjhkTgck1yzTf1hu3GVGPgTf7sTJjL1R4FDEQxWgnaKsxJTN74xI6ToumUaGyPU4tKOxWG1OX_cDOzLdEQQLdFuL7_vckUQlocyH7yD1Ajpwy6zfsc_aE4EQGUUsiMxWydbksynuRCtpteUyQZvzDFHKWkFfZ3Vg2EoOLFiUJVyNsOxbU8_DDw-QBlaMPOrByqIZprutZc7ebjn4bjTPi2GlwbbkUPqqozRQPrVoJo6ghcZ_UqyqNNMv_toySloGJNHPpRh2kU7Oe2NJtSXcTb2nbIUgZODpzcbQn1QkEEABEy6rZtZVGie_kvMXZ6JHnrstj4_Xbw2Q.jpg&apos;)&quot;&gt;&lt;/i&gt;
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Allthingssmitty&lt;/div&gt;
  
  &lt;div class=&quot;link_preview_title&quot;&gt;Native JSON modules are finally real - Matt Smith&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;JSON imports finally work natively. Learn how import ... with { type: &apos;json&apos; } changes runtime behavior, caching, and makes bundlers optional.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item></channel></rss>