Published on

2026-第六周

Authors

该周报主要为各个地方内容的汇总整理

技术

提升退出动画效果的 React 技巧

本文介绍了一种利用 React 的 Suspense 特性来优化组件退出动画的方法,通过“冻结”组件在退出过程中的 DOM 更新,避免内容变化干扰动画效果。

  • 🐛 问题:在 React 中,触发退出动画的更新常同时改变退出组件的内容,导致动画期间内容闪烁,分散注意力。
  • 🔍 探索:尝试过保存状态或延迟更新等方法,但要么太繁琐,要么处理动画中断时较复杂;理想方案是让 React 停止提交退出组件的 DOM 更改。
  • 💡 解决方案:利用 Suspense 在挂起时暂停 DOM 提交的特性,创建Freeze组件包裹退出内容,并移除其默认的display: none样式,实现“冻结”效果。
  • ⚙️ 实现:通过自定义ElementsObserver捕获 DOM 节点,在useInsertionEffect中恢复显示,配合无限 Promise 触发 Suspense 挂起。
  • 🚀 应用:与 React Aria Components 等库结合良好,能冻结包括交互状态在内的所有更新,提升动画体验。
  • ⚠️ 注意:当前方案属于技巧性实现,可能随 React 版本更新失效,但已在 React 18 和 19.2 测试通过;未来或有望被 React 官方 Activity 模式原生支持。

构建坚不可摧的 React 组件

构建健壮的 React 组件意味着确保它们能在各种复杂环境下稳定工作,包括服务器渲染、并发渲染、异步子组件等场景。文章通过一系列具体示例,展示了如何逐步优化组件,使其具备更强的适应性和鲁棒性。

  • 🛡️ 服务器端渲染安全:避免在服务器端访问浏览器 API(如localStorage),应将其移至useEffect中执行,防止构建时崩溃。
  • 💧 水合过程安全:通过内联脚本在浏览器绘制前同步设置初始状态,避免因客户端水合导致的界面闪烁问题。
  • 🔢 多实例安全:使用useId生成唯一标识符,确保多个组件实例不会因 ID 冲突而相互干扰。
  • 并发渲染安全:利用React.cache对服务器组件中的异步请求进行去重,避免同一请求在并发场景下被重复执行。
  • 🧩 组合安全:使用 Context 而非cloneElement传递数据,以兼容服务器组件、懒加载等现代 React 特性。
  • 🪟 门户安全:通过ownerDocument.defaultView获取正确的窗口上下文,确保事件监听在 iframe 或 portal 中正常工作。
  • 🎬 过渡动画安全:使用startTransition包裹状态更新,以支持平滑的视图过渡动画。
  • 🎭 活动状态安全:通过动态修改<style>标签的media属性,确保隐藏组件不会残留全局样式影响。
  • 🔒 数据泄漏防护:使用taintUniqueValue标记敏感数据,防止其意外序列化并发送到客户端。
  • 🚀 未来兼容性:优先使用useState而非useMemo来保证数据的持久性,避免因 React 内部优化导致状态丢失。

Web 平台缺少什么?

本期播客讨论了当前 Web 平台缺失或需要改进的功能,涵盖 UI 组件、DOM API、CSS 特性及未来 API 等方面。

  • 🎯 改进 DOM 基础组件以提升用户体验,包括多选组合框、日期选择器和标签页等
  • 📅 需要更完善的日期选择器和文件上传组件
  • 🔄 期待原生的优秀拖放功能和响应式 DOM 支持
  • 🛠️ 希望增加类型注解和管道操作符等 JavaScript 特性
  • 🌐 需要更好的身份验证 API 和文本度量 API
  • 📡 期待蓝牙、WebSocket 和 NFC/RFID 等底层连接 API
  • 🎨 CSS 方面需要过渡速度控制和严格模式等改进
  • 🔧 强调保持浏览器引擎多样性的重要性
  • 🤖 讨论了 AI 接入 Web 平台的可能性

一颗破碎的心 - 艾伦·派克

作者在优化网页仪表板时,发现加载时间从 1 秒激增至 10 秒,通过排查发现是 Safari 浏览器在渲染特定 emoji 字体时出现严重性能问题,最终通过调整字体设置解决了这一异常缓慢的布局计算问题。

  • 🐛 网页仪表板加载时间异常增加,从 1 秒变为 10 秒,初步怀疑是 React 性能问题
  • 🔍 使用 Claude 分析并尝试优化 React 代码,但效果甚微,排除前端框架问题
  • 🧩 通过 Safari 性能分析工具发现 94% 的 CPU 时间消耗在布局计算上,速度比正常慢 100 倍
  • 🎯 采用二分法逐步排查,最终定位到问题源于“Send Feedback”按钮中的心形 emoji
  • 🖥️ 创建最小复现案例,发现 Safari 26.2 在渲染 Noto Color Emoji 字体中的特定 emoji 时布局计算耗时 1600 毫秒
  • 📜 调查发现 Noto Color Emoji 使用 COLRv1 标准,而 Safari 不支持该标准,回退到 SVG 渲染导致性能问题
  • 🛠️ 解决方案是在 Apple 平台上优先使用“Apple Color Emoji”字体,避免 Noto Color Emoji 的性能陷阱
  • 🤖 作者反思 Claude 在调试过程中的双重角色:既帮助快速定位问题,又因推荐使用 Noto Color Emoji 而间接导致问题
  • ⚠️ 文章最后提醒开发者注意编码代理工具像电锯一样“既强大又危险”的双重性

工具

summarize

Summarize 是一款多功能摘要工具,提供 Chrome 侧边栏扩展和命令行界面(CLI),支持从网页、文件、音频、视频、YouTube、播客等多种来源快速生成摘要。它具备智能内容提取、流式输出、多模型支持等特性,并允许用户通过本地服务处理媒体内容。

  • 🌐 多源支持 – 可处理网页、PDF、图片、音频、视频、YouTube、播客及 RSS 等格式的内容。
  • 🖥️ 双界面操作 – 提供 Chrome/Firefox 侧边栏扩展(一键摘要当前标签页)和 CLI 命令行工具,满足不同使用场景。
  • 🔄 流式输出与智能提取 – 支持流式 Markdown 渲染,自动检测内容类型,并可提取视频中的幻灯片(OCR + 时间戳定位)。
  • 🤖 多模型后端 – 支持本地模型、付费提供商(如 OpenAI、Anthropic)及免费预设(通过 OpenRouter),用户可灵活选择。
  • 🛠️ 高级功能 – 包括幻灯片截图、媒体转录(Whisper/ONNX)、内容缓存、JSON 诊断输出及可配置的输出长度与语言。
  • ⚙️ 便捷配置 – 通过配置文件和环境变量管理模型、API 密钥及主题设置,并提供自动模型选择与回退机制。
  • 📦 易于安装 – 可通过 npm、Homebrew 或直接安装扩展,并需搭配本地守护进程以实现扩展的完整功能。

skilld

Skilld 是一个用于从 NPM 依赖项自动生成 AI 代理技能的工具。它通过解析官方文档、GitHub 讨论和版本更新,为本地项目创建版本感知的技能文件,帮助 AI 代理(如 Claude、Cursor)获取最新、最准确的代码实践,避免因训练数据滞后而导致的问题。

  • 🌍 支持任意来源:可基于任何 NPM 依赖或 GitHub 源码自动解析文档,无需维护者额外适配。
  • 📦 同步最新内容:每次更新时自动获取最新的议题、讨论和版本发布信息,确保技能始终反映最佳实践。
  • 📚 可选的 LLM 增强:支持通过 LLM 生成“最佳实践”“API 变更”等章节,进一步提升技能质量。
  • 🔍 语义搜索功能:通过向量检索跨所有技能索引文档,实现精准查询。
  • 🎯 安全与版本控制:提供提示注入防护、版本感知缓存及依赖更新时的自动技能更新。
  • 🤝 生态兼容:与 npx skillsskills-npm 等工具兼容,支持多代理环境。
  • 快速启动:通过 npx -y skilld 即可交互式生成技能,或直接为指定包(如 vue)添加技能。
  • 🔄 自动更新:可通过 skilld update 或集成到 prepare 脚本中,在依赖更新时自动刷新技能。
  • 常见问题:技能本身不直接运行,需在项目提示中引导代理调用;与 Context7 等工具相比,Skilld 更注重本地化、版本关联和内容优化。

GitHub - brucetoo/visual-agentic-dev:沉浸式浏览器开发环境,实现无缝点击定位与智能代理编辑循环。

Visual Agentic Dev 是一款沉浸式浏览器开发环境,通过点击定位与智能代理编辑循环,让开发者无需离开浏览器即可完成代码修改、调试和命令行交互。

  • 🎯 零配置源码定位:利用 React Fiber 自动识别源码位置,无需在业务代码中插入冗余属性。
  • 📂 多项目并行开发:自动识别当前标签页所属项目,并智能切换对应的终端会话。
  • 🤖 动态代理注册:支持扩展架构,可接入多种 AI 代理(如 Claude Code、CCR 等),并具备动态就绪检测。
  • 🖱️ 批量元素修改:支持选择多个页面元素并发送给代理进行批量修改。
  • ⌨️ 便捷快捷键:可通过 Cmd/Ctrl + Shift + S 快速启动定位功能。
  • 🛠️ 内置终端集成:深度集成终端,支持会话持久化、历史恢复和智能上下文切换。
  • 🔌 快速集成:提供 Chrome 扩展、桥接服务器和 React SDK,支持 React 19+ 的构建插件配置。
  • 🐛 故障排除支持:针对常见问题(如 node-pty 权限错误)提供解决方案。
  • 📦 模块化包结构:包含 React 开发工具、桥接服务器和浏览器扩展三个核心包。

GitHub - slick-enterprises/accept-md:当客户端请求Accept: text/markdown时,为任何Next.js页面提供干净的Markdown表示

这是一个用于 Next.js 项目的工具,当客户端请求头包含Accept: text/markdown时,它能自动将任何页面转换为简洁的 Markdown 格式返回,无需修改现有页面代码,支持 App Router、Pages Router 及各种渲染策略。

  • 🚀 核心功能:通过next.config重写或中间件拦截请求,将 HTML 页面实时转换为 Markdown,并自动剥离导航、页脚等无关元素。
  • 📄 丰富输出:生成的 Markdown 包含从 HTML 提取的 YAML Frontmatter(如标题、描述、OpenGraph 标签)和 JSON-LD 结构化数据代码块,便于 AI 解析和 SEO。
  • ⚙️ 简易安装:推荐使用npx --yes accept-md@latest init命令一键初始化,自动配置重写规则、API 处理器和配置文件。
  • 🧩 灵活配置:通过accept-md.config.js文件可自定义包含/排除的路由、清理的选择器、缓存、后处理转换器等。
  • 🔄 智能缓存:内置缓存机制,能感知 Next.js 构建 ID 变化并尊重 ISR 重新验证周期,优化性能。
  • 🛠️ 配套工具:提供doctor命令检查项目状态,fix-routes命令修复 Next.js 15+ 的路由清单问题,version-check确保 CLI 与运行时版本一致。
  • 📦 版本管理:CLI 与accept-md-runtime包采用精确版本匹配,确保兼容性,建议始终使用最新版本。
  • ⚠️ 注意事项:默认排除 API 路由,优先使用next.config重写而非中间件以获得更好性能,需注意自定义服务器或 i18n 场景下的配置调整。

GitHub - hamzaydia/verifyfetch:支持断点续传、验证下载的大型浏览器文件工具。在3.8GB处中断后,可从3.8GB处恢复下载。

VerifyFetch 是一个用于浏览器中大型文件下载的 JavaScript 库,它通过流式验证、可恢复下载和分块哈希等技术,解决了传统下载方式在内存占用、完整性验证和网络中断恢复等方面的痛点。

  • 🛡️ 核心功能:提供带完整性验证的 fetch 替代方案,确保下载文件与预期哈希值匹配,防止 CDN 劫持或文件损坏。
  • 💾 内存优化:通过流式处理和 WebAssembly 实现恒定内存占用(约 2MB),避免原生 crypto.subtle.digest() 需要缓冲整个文件(如 4GB 文件需 4GB+ RAM)导致浏览器崩溃的问题。
  • 🔄 可恢复下载:支持从网络中断点(如 3.8GB/4GB)恢复下载,而非重新开始,利用 IndexedDB 存储已验证的分块和 HTTP Range 请求。
  • 快速失败:通过分块验证,可在下载过程中即时检测到损坏(如第 5 个分块出错),而无需等待整个文件下载完成。
  • 🌐 多 CDN 容错:支持配置多个源地址,在某个源失败时自动切换到备用源,提供“顺序”、“竞速”或“最快”等策略。
  • 📊 进度追踪:提供下载进度回调,实时显示百分比、速度、剩余时间等信息。
  • 🔧 多种使用模式:包括直接 API 调用、Service Worker 模式(零代码集成)和基于清单文件的自动哈希查找。
  • 🤖 AI 模型友好:专为在浏览器中加载多 GB 的 AI 模型(如 WebLLM、Transformers.js、ONNX)设计,解决大文件下载和验证的难题。
  • 🛠️ 配套工具:提供 CLI 工具生成和验证哈希清单,支持分块哈希生成,并可集成到 CI/CD 流程中。
  • ⚙️ 灵活 API:提供 verifyFetchverifyFetchStreamverifyFetchResumablecreateVerifyFetcher 等多种函数,满足不同场景需求。
  • 📝 清单驱动:支持 JSON 格式的清单文件,可集中管理文件的哈希值、分块信息及元数据。
  • 🚫 安全模型:采用与浏览器 SRI 相同的信任模型,防止 CDN 攻击和中间人攻击,但需注意无法防范构建过程被入侵或恶意内部人员。
  • ⚠️ 注意事项:需要现代浏览器支持 crypto.subtleReadableStreamIndexedDB;WebAssembly 为可选,用于实现真正的流式验证,否则会回退到缓冲整个文件的 SubtleCrypto。

ESLint v10.0.0 发布 - ESLint - 可插拔的 JavaScript 代码检查工具

ESLint v10.0.0 是一个主要版本发布,引入了新功能、修复了错误,并包含多项重大变更。用户需手动安装此版本,并注意 Node.js 支持版本已更新。配置系统已完全转向扁平配置,移除了对 eslintrc 的支持。此外,该版本改进了 JSX 引用追踪、RuleTester 的测试断言,并更新了推荐规则配置。

  • 🚀 重大版本发布:ESLint v10.0.0 为主要版本,包含新功能、错误修复和重大变更,需手动安装并参考迁移指南。
  • 🔧 配置系统变更:完全移除 eslintrc 配置系统,默认使用新的扁平配置查找算法,支持从被检测文件目录查找配置。
  • ⚠️ Node.js 支持更新:不再支持 Node.js v20.19.0 以下版本、v21.x 和 v23.x,仅支持 v20.19.0、v22.13.0 及以上版本。
  • 🛠️ JSX 引用追踪:现在正确追踪 JSX 元素的引用,避免 no-unused-varsno-undef 规则中的误报问题。
  • 📦 RuleTester 增强:新增断言选项(如 requireMessagerequireLocation),强化测试用例的验证,并改进失败测试的位置报告。
  • 📝 类型定义更新:Espree 和 ESLint Scope 包现在包含内置类型定义,取代了之前的 Definitely Typed 包。
  • 🔄 规则与 API 变更:更新了 eslint:recommended 配置,移除了已弃用的规则上下文方法和 SourceCode 方法,并引入了 max-params 规则的 countThis 选项。
  • 🎨 格式化器支持:新增 color 属性到格式化器上下文,允许自定义格式化器根据命令行选项决定是否使用颜色输出。
  • 📚 文档与构建更新:提供了详细的迁移指南,更新了文档,并进行了多项构建和维护相关的改进。

GitHub - adesignl/Peek:轻量级“头部空间风格”滚动意图库,向下滚动时隐藏网站头部,向上滚动时显示

Peek 是一个轻量级的 JavaScript 库,用于实现智能的页面头部滚动行为。它能在用户向下滚动时自动隐藏网站头部,向上滚动时显示,从而提升浏览体验。该库无依赖、可高度定制,并支持现代浏览器。

  • 🚀 轻量高效:无外部依赖,体积小巧,使用 requestAnimationFrame 确保流畅动画
  • 🧠 智能滚动检测:通过容差设置区分有意滚动与微小移动,避免抖动
  • ⚙️ 易于集成:支持任意网站或框架,提供简单 HTML/CSS/JavaScript 配置示例
  • 🎨 高度可定制:可调整滚动偏移量、容差及 CSS 类名,适应不同设计需求
  • 📱 响应式支持:包含移动端适配示例,并可同时控制多个头部元素
  • 🔧 完整 API:提供销毁方法便于动态管理,内置性能优化如被动事件监听器
  • 📄 开源许可:基于 MIT 许可证发布,可自由使用与修改

excalidraw-mcp-app

这是一个名为 Excalidraw MCP App Server 的开源项目,它通过 Model Context Protocol (MCP) 提供交互式手绘图表绘制功能,支持在 Claude、ChatGPT 等客户端中直接嵌入和编辑 Excalidraw 图表。

  • 🎨 项目功能:基于 Excalidraw 的 MCP 服务器,可流畅控制视图并支持全屏交互式绘图。
  • 📥 安装方式:提供远程链接直接添加,或本地通过源码构建/扩展安装两种方式。
  • 🛠️ 使用示例:用户可通过自然语言指令(如“画一只可爱的猫”)生成图表。
  • 🌐 技术背景:依托 MCP Apps 协议,允许在聊天中直接渲染交互式 HTML 界面。
  • 🚀 部署与贡献:支持一键部署到 Vercel,开源接受 PR,提供详细的本地构建指南。
  • 📊 项目状态:开源 4 天已获 932 星,主要使用 TypeScript 开发,采用 MIT 许可证。

更新

React 代理抓取工具

React Grab 现已升级为可直接与 AI 编程助手交互,在浏览器内完成代码编辑,无需切换应用或复制粘贴。

  • 🚀 功能升级:从仅复制 React 上下文,变为可直接在页面内启动 Claude Code、Cursor 等助手并执行多任务编辑
  • 🛠️ 核心不变:仍免费开源,支持所有主流 AI 编程工具,保持“点击元素即获精确组件路径”的理念
  • 💡 诞生背景:为解决 AI 助手在复杂代码库中定位 UI 组件效率低下的痛点,初版使任务速度平均提升约 3 倍
  • 🔄 工作流程:按住 ⌘C 点击元素 → 输入修改指令 → 助手直接修改代码文件 → 页面自动刷新显示变更
  • ⚙️ 技术原理:通过 React fiber 树获取组件堆栈与源码位置,新增的“代理提供者”将上下文与指令转发至本地 CLI 执行
  • 📦 快速安装:在项目根目录运行 npx -y grab@latest init 即可自动配置
  • 🔮 未来方向:保持工具无关性,任何具备 CLI/API 的编程助手均可通过开发提供者适配集成

shovel.js

Shovel.js 是一个由 AI 辅助开发的开源全栈服务器框架与元框架,旨在让开发者能够像编写浏览器 Service Worker 一样构建和部署 Web 应用,并可在 Node、Bun 和 Cloudflare 等环境中运行。它通过实现浏览器标准 API(如 Cache、FileSystem)并提供配置化全局服务,结合创新的路由、中间件和资源处理机制,提供了一种简洁、标准化且高效的开发体验。

  • 🚀 项目起源:作者因 Remix 框架放弃 React 而决定自行开发基于 Crank.js 的全栈框架,并借助 Claude Code 在三个月内完成了 Shovel.js。
  • 🧩 设计理念:核心思想是“将服务器视为 Service Worker”,通过为服务器环境实现浏览器标准 API(如 Cache、FileSystem、CookieStore),创建统一的开发模型。
  • 🔧 核心功能:提供 CLI 工具和库,支持开发与部署 Service Worker 式应用,替代 Express、Fastify、Vite 或 Next.js 等传统工具。
  • 🛣️ 路由与中间件:内置高性能路由器(基于基数树)和创新的中间件系统,利用生成器函数和 yield 操作符简化请求/响应生命周期管理。
  • 🌐 全局服务:通过 shovel.json 配置化地提供缓存、数据库、文件系统、日志等全局服务(如 self.cachesself.databases),支持多后端(如 S3、Redis、Postgres)。
  • 📦 静态资源处理:利用 ESBuild 和 import attributes 简化资源引用与打包,无需复杂加载器或文件路由,即可将本地文件路径转换为公共 URL。
  • 🔄 渲染模式统一:SSR、SSG、SPA 等渲染模式仅通过代码执行时机区分,例如可利用 Service Worker 的 install 事件实现静态站点生成。
  • 🤖 AI 辅助开发:项目全程借助 Claude Code 实现,AI 帮助完成了路由优化、标准 API 实现、配置 DSL 设计等关键任务。
  • 🚧 早期采用:框架已发布,欢迎早期使用者尝试,作者计划持续扩展功能(如会话、WebSocket、管理界面),并追求“最大程度开箱即用”。

JavaScript 自我清理即将变得更加轻松 - Piccalilli

JavaScript 即将通过“显式资源管理”提案,让开发者能更轻松地管理资源清理,提升代码的整洁性和可预测性。

  • 🧹 提案引入using关键字,声明块作用域变量,在变量离开作用域时自动调用[Symbol.dispose]()方法进行资源清理
  • 🔗 标准化[Symbol.dispose]()方法,为各种资源(如文件、WebSocket 连接等)提供一致的清理接口
  • 🗑️ 解释“隐式资源管理”,如 WeakSet 和 WeakMap 的弱引用机制,允许垃圾回收自动清理不再使用的对象
  • ⏳ 强调垃圾回收的不可预测性,显式资源管理让开发者能主动控制清理时机
  • 🛠️ 提案已进入标准第三阶段,主流浏览器(除 Safari 外)已实现,可用于实验环境
  • 🎭 作者以“混乱木偶”自喻,但在 JavaScript 中追求秩序,凸显该提案对代码整洁性的重要性

2026 年路线图 (2026-02-04) | webpack

webpack 2026 年路线图聚焦于提升开发体验、扩展跨运行时支持、优化性能与构建流程,并加强社区与项目可持续性。

  • 🎯 增强跨平台兼容性:推出 universal 目标,使代码能在 Node.js、Deno、Bun 及 Web 等多运行时环境中无缝运行。
  • 🛠️ 简化配置与依赖:计划内置支持 CSS Modules、TypeScript 编译和 HTML 入口,减少对第三方插件和加载器的依赖。
  • 性能优化探索:评估引入类似 Rspack 的惰性 Barrel 优化,以提升大型代码库的构建速度;并研究多线程 API 以利用多核系统。
  • 📚 改进文档与工具:通过自动生成 API 文档确保准确性;整合开发中间件与 CLI 工具,提升维护性和用户体验。
  • 🤝 社区与可持续发展:通过博客、会议加强社区互动;借助 GSoC 导师计划培养贡献者;并积极寻求捐赠与赞助以确保项目长期健康。
  • 🚀 为 webpack 6 铺路:通过代码清理、测试覆盖和基准测试,为下一代版本打下坚实基础,同时探索资产最小化等新功能。