- Published on
2026-第六周
- Authors

- Name
- AgedCoffee
- @__middle__child
该周报主要为各个地方内容的汇总整理
- 技术
- 提升退出动画效果的 React 技巧
- 构建坚不可摧的 React 组件
- Web 平台缺少什么?
- 一颗破碎的心 - 艾伦·派克
- 工具
- summarize
- skilld
- GitHub - brucetoo/visual-agentic-dev:沉浸式浏览器开发环境,实现无缝点击定位与智能代理编辑循环。
- GitHub - slick-enterprises/accept-md:当客户端请求Accept: text/markdown时,为任何Next.js页面提供干净的Markdown表示
- GitHub - hamzaydia/verifyfetch:支持断点续传、验证下载的大型浏览器文件工具。在3.8GB处中断后,可从3.8GB处恢复下载。
- ESLint v10.0.0 发布 - ESLint - 可插拔的 JavaScript 代码检查工具
- GitHub - adesignl/Peek:轻量级“头部空间风格”滚动意图库,向下滚动时隐藏网站头部,向上滚动时显示
- excalidraw-mcp-app
- 更新
- React 代理抓取工具
- shovel.js
- JavaScript 自我清理即将变得更加轻松 - Piccalilli
- 2026 年路线图 (2026-02-04) | webpack
技术
提升退出动画效果的 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 skills和skills-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:提供
verifyFetch、verifyFetchStream、verifyFetchResumable、createVerifyFetcher等多种函数,满足不同场景需求。 - 📝 清单驱动:支持 JSON 格式的清单文件,可集中管理文件的哈希值、分块信息及元数据。
- 🚫 安全模型:采用与浏览器 SRI 相同的信任模型,防止 CDN 攻击和中间人攻击,但需注意无法防范构建过程被入侵或恶意内部人员。
- ⚠️ 注意事项:需要现代浏览器支持
crypto.subtle、ReadableStream和IndexedDB;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-vars和no-undef规则中的误报问题。 - 📦 RuleTester 增强:新增断言选项(如
requireMessage、requireLocation),强化测试用例的验证,并改进失败测试的位置报告。 - 📝 类型定义更新: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.caches、self.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 铺路:通过代码清理、测试覆盖和基准测试,为下一代版本打下坚实基础,同时探索资产最小化等新功能。