Chrome DevTools MCP:让 AI 助手直接操作浏览器开发工具

做前端开发的时候,经常遇到这样的场景:

  • 页面性能慢,想看看是哪里拖慢了加载?
  • 控制台报错了,想让 AI 帮忙分析错误原因?
  • 想自动化测试页面交互,但写 E2E 测试太繁琐?
  • 网络请求出问题了,想快速定位是哪个接口有问题?

以前这些问题都要手动打开 DevTools 查看,然后把信息复制粘贴给 AI。现在有了 Chrome DevTools MCP,AI 助手可以直接操作浏览器开发工具,自动分析问题。

官方博客地址:developer.chrome.com/blog/chrome...

github地址:github.com/ChromeDevTo...

Chrome DevTools MCP 能做什么?

核心能力概览

Chrome DevTools MCP 提供了 30+ 个工具,覆盖前端开发的主要场景:

页面控制类

  • 打开/关闭/切换页面标签
  • 导航到指定 URL
  • 调整页面尺寸(测试响应式)
  • 前进/后退历史记录

内容交互类

  • 点击元素(支持单击/双击)
  • 填写表单(输入框/下拉框/文本域)
  • 拖拽元素
  • 悬停触发效果
  • 上传文件

调试分析类

  • 获取页面快照(文本结构树)
  • 截图(全屏/元素/可见区域)
  • 执行 JavaScript 代码
  • 查看控制台日志
  • 分析网络请求

性能优化类

  • 录制性能追踪(Performance Trace)
  • 分析 Lighthouse 指标
  • CPU 节流模拟
  • 网络节流模拟(3G/4G/离线)

对话框处理

  • 处理 alert/confirm/prompt 弹窗

与传统工具的对比

能力 手动 DevTools Playwright Chrome DevTools MCP
学习成本 中(需要学 API) 低(自然语言交互)
自动化能力
性能分析 手动查看 需要编写代码 AI 自动分析
调试效率 需要截图描述 需要写断言 AI 直接看到问题
适用场景 开发调试 自动化测试 开发 + 调试 + 分析

Chrome DevTools MCP 的优势在于:把浏览器的能力直接给到 AI,不需要你写代码或手动操作

实战场景:前端开发中的典型应用

场景 1:性能分析 - 自动找出页面慢在哪里

传统做法:打开 DevTools → 点 Performance 标签 → 录制 → 刷新页面 → 分析火焰图 → 找瓶颈。

用 Chrome DevTools MCP:

javascript 复制代码
// AI 可以直接执行这些操作
1. 打开目标页面
2. 开始性能追踪(performance_start_trace)
3. 等待页面加载完成
4. 停止追踪(performance_stop_trace)
5. 分析 Core Web Vitals 和性能瓶颈

AI 助手会自动生成分析报告:

markdown 复制代码
性能分析结果:
- LCP (最大内容绘制): 2.3s  需要优化
- FID (首次输入延迟): 45ms  良好
- CLS (累积布局偏移): 0.15  需要优化

主要问题:
1. 首屏图片未优化(1.2MB)
2. JavaScript 主线程阻塞 800ms
3. 字体加载导致布局偏移

建议:
- 使用 WebP 格式压缩图片
- 延迟加载非首屏 JS
- 使用 font-display: swap

场景 2:调试错误 - 快速定位控制台报错

页面出错时,AI 可以自动查看控制台日志:

javascript 复制代码
// list_console_messages - 获取所有控制台消息
// get_console_message - 查看具体错误详情

实际效果:

arduino 复制代码
用户:"页面点击按钮后没反应,帮我看看"

AI 操作流程:
1. take_snapshot - 获取页面结构,找到按钮元素
2. click - 点击按钮
3. list_console_messages - 查看控制台
4. get_console_message - 查看错误堆栈

AI 分析结果:
"发现错误:Uncaught TypeError: Cannot read property 'data' of undefined
问题在 src/components/Button.jsx:23
原因:API 返回了 null,但代码没有做空值检查
建议:添加可选链操作符 response?.data"

场景 3:网络请求分析 - 找出慢接口

javascript 复制代码
// list_network_requests - 列出所有网络请求
// get_network_request - 查看请求详情(耗时、状态码、响应)

AI 可以自动分析:

markdown 复制代码
网络请求分析:
- 总请求数:45 个
- 慢请求(>1s):3 个
  1. /api/user/info - 2.3s (应该加缓存)
  2. /static/bundle.js - 1.8s (体积 3.2MB,太大了)
  3. /api/products - 1.2s (可以考虑分页加载)

优化建议:
- bundle.js 需要做代码分割
- 用户信息接口加 localStorage 缓存
- 产品列表改为虚拟滚动

场景 4:响应式测试 - 快速验证多端适配

javascript 复制代码
// resize_page - 调整窗口尺寸
// take_screenshot - 截图对比

AI 可以自动测试不同设备:

arduino 复制代码
用户:"帮我看看移动端显示是否正常"

AI 操作:
1. resize_page({width: 375, height: 812}) - iPhone X 尺寸
2. take_screenshot - 截图
3. take_snapshot - 检查布局结构
4. 分析是否有横向滚动条、元素溢出等问题

AI 反馈:
"发现问题:导航栏在移动端没有折叠,导致显示不全
建议:在 768px 以下使用汉堡菜单"

场景 5:自动化填表测试 - 验证表单逻辑

javascript 复制代码
// fill - 填写单个输入框
// fill_form - 批量填写表单
// click - 提交表单

实际应用:

arduino 复制代码
用户:"测试一下注册表单的验证逻辑"

AI 操作:
1. fill_form - 批量填写用户名、邮箱、密码
2. click - 点击提交按钮
3. wait_for - 等待验证提示出现
4. take_snapshot - 检查错误提示
5. list_console_messages - 看是否有报错

AI 测试报告:
✅ 空值验证正常
✅ 邮箱格式校验正常
⚠️ 密码强度提示位置偏移(CSS 问题)
❌ 提交后控制台报错 500(后端接口异常)

完整工具列表

Chrome DevTools MCP 提供了 26 个工具,分为 6 大类别:

工具分类总览

类别 工具数量 主要功能
输入自动化 8 个 click、drag、fill、fill_form、handle_dialog、hover、press_key、upload_file
导航自动化 6 个 close_page、list_pages、navigate_page、new_page、select_page、wait_for
仿真工具 2 个 emulate(网络/CPU)、resize_page
性能分析 3 个 performance_analyze_insight、performance_start_trace、performance_stop_trace
网络监控 2 个 get_network_request、list_network_requests
调试工具 5 个 evaluate_script、get_console_message、list_console_messages、take_screenshot、take_snapshot

核心工具详解

1. 页面内容获取

take_snapshot:获取页面的文本结构树

这个工具基于无障碍树(Accessibility Tree)提取页面结构,每个元素都有唯一的 uid 标识。

csharp 复制代码
# 返回示例
[1] heading "用户登录"
  [2] textbox "用户名" (value: "")
  [3] textbox "密码" (type: password)
  [4] button "登录"
  [5] link "忘记密码?"

用途:

  • AI 理解页面结构,找到需要操作的元素
  • 比截图更准确(不受视觉样式干扰)
  • 可以获取表单的值和状态

take_screenshot:截图

支持三种模式:

  • 可见区域截图(默认)
  • 全页面截图(fullPage: true
  • 指定元素截图(传入 uid
javascript 复制代码
// 截取整个页面
take_screenshot({ fullPage: true })

// 只截取某个组件(uid 从 take_snapshot 获取)
take_screenshot({ uid: "123" })

2. 元素交互

click / fill / hover / drag

基于 uid 操作元素,比传统选择器更可靠:

javascript 复制代码
// 传统方式(容易失效)
await page.click('#submit-button')

// DevTools MCP 方式(基于语义)
1. take_snapshot 找到按钮的 uid
2. click({ uid: "42" })

优势:

  • 不依赖 CSS 选择器(重构代码不会失效)
  • 基于语义理解("登录按钮"比 .btn-primary 更稳定)
  • AI 自动找到目标元素

3. 调试工具

evaluate_script:在页面执行 JavaScript

javascript 复制代码
// 获取页面数据
evaluate_script({
  function: "() => { return window.__INITIAL_STATE__; }"
})

// 修改页面状态(调试用)
evaluate_script({
  function: "(el) => { el.style.border = '2px solid red'; }",
  args: [{ uid: "123" }]  // 高亮某个元素
})

list_console_messages / get_console_message

支持按类型过滤:

  • log - 普通日志
  • error - 错误
  • warn - 警告
  • info - 信息
  • debug - 调试日志
javascript 复制代码
// 只看错误
list_console_messages({ types: ["error"] })

4. 网络分析

list_network_requests / get_network_request

可以按资源类型过滤:

  • document - HTML 文档
  • script - JavaScript 文件
  • stylesheet - CSS 文件
  • xhr / fetch - AJAX 请求
  • image / font / media - 资源文件
javascript 复制代码
// 只看 API 请求
list_network_requests({
  resourceTypes: ["xhr", "fetch"]
})

// 查看请求详情(耗时、状态码、响应体)
// request_id 从 list_network_requests 中获取
get_network_request({ reqid: 123 })

5. 性能分析

performance_start_trace / performance_stop_trace

启动性能追踪后,会记录:

  • 页面加载时间线
  • JavaScript 执行情况
  • 渲染性能指标
  • Core Web Vitals (LCP, FID, CLS)
javascript 复制代码
// 开始追踪并自动刷新页面
performance_start_trace({
  reload: true,
  autoStop: true  // 加载完成自动停止
})

// 查看分析结果
performance_stop_trace()

performance_analyze_insight

深入分析具体的性能问题:

javascript 复制代码
// 分析 LCP(最大内容绘制)慢的原因
performance_analyze_insight({
  insightName: "LCPBreakdown"
})

// 分析文档加载慢的原因
performance_analyze_insight({
  insightName: "DocumentLatency"
})

6. 环境模拟

emulate_network / emulate_cpu

模拟弱网环境和低性能设备:

javascript 复制代码
// 模拟 3G 网络
emulate_network({ throttlingOption: "Slow 3G" })

// 模拟 4 倍 CPU 降速
emulate_cpu({ throttlingRate: 4 })

可选的网络环境:

  • No emulation - 不限制
  • Offline - 离线
  • Slow 3G - 慢速 3G(下载 400KB/s)
  • Fast 3G - 快速 3G(下载 1.6MB/s)
  • Slow 4G / Fast 4G - 4G 网络

实际使用体验

优势

  1. 降低沟通成本

以前:

arduino 复制代码
你:"页面有个错误,帮我看看"
AI:"请提供错误信息和代码"
你:(截图,复制错误信息,找到相关代码)
AI:"看起来是 XXX 问题"
你:"改完了还是有问题"
(重复上述流程)

现在:

arduino 复制代码
你:"页面有个错误,帮我看看"
AI:(直接打开页面,查看控制台,定位代码,给出修复建议)
  1. 自动化繁琐操作

性能分析、网络请求查看这些操作,AI 可以自动完成并生成报告。

  1. 更准确的上下文理解

AI 可以"看到"页面的实际状态,不是基于你的描述猜测。

注意事项

  1. 隐私和安全(重要)

Chrome DevTools MCP 会访问页面内容,官方警告:"该工具将浏览器实例内容暴露给 MCP 客户端,允许它们检查、调试和修改浏览器或 DevTools 中的任何数据"

使用时要注意:

  • 不要在敏感页面上使用(银行、后台管理、邮箱、社交媒体)
  • API 密钥、用户数据、Cookie 可能被读取
  • 避免在启用远程调试的浏览器上访问敏感网站
  • 建议只在开发环境和测试页面使用
  • 使用完毕后关闭远程调试模式的浏览器
  1. 性能开销

频繁的快照和截图会消耗资源:

  • 复杂页面的 take_snapshot 可能较慢
  • 全页面截图会占用较多内存
  • 性能追踪会影响页面的真实性能
  1. 元素定位的稳定性

虽然基于 uid 比选择器更稳定,但页面重新加载后 uid 会变化:

  • 需要重新 take_snapshot
  • 不能跨页面使用 uid

与其他工具的配合

1. 结合 Playwright MCP

Chrome DevTools MCP 侧重"查看和分析",Playwright MCP 侧重"自动化测试":

markdown 复制代码
典型工作流:
1. Playwright MCP - 自动化操作(登录、填表、点击)
2. Chrome DevTools MCP - 验证结果(检查网络请求、控制台、性能)

分工明确:

  • Playwright:复杂的用户流程自动化
  • Chrome DevTools:调试和分析

2. 结合 Serena MCP

Serena MCP 可以保存分析结果:

markdown 复制代码
工作流:
1. Chrome DevTools MCP - 分析页面性能
2. Serena MCP - 保存性能报告到项目文档
3. 下次开发时,对比性能变化

3. 结合 Context7 MCP

查文档 + 实际验证:

markdown 复制代码
场景:学习新框架的最佳实践
1. Context7 MCP - 查询官方文档
2. Chrome DevTools MCP - 在实际项目中验证
3. 对比文档建议和实际表现

安装和配置

系统要求

  • Node.js v20.19 或更高版本
  • Chrome 当前稳定版或更新版本
  • npm 包管理器

1. 安装 Chrome DevTools MCP Server

推荐直接使用 npx(无需全局安装):

bash 复制代码
# 使用最新版本(推荐)
npx chrome-devtools-mcp@latest

# 或全局安装
npm install -g chrome-devtools-mcp

2. 配置不同的 AI 助手

Claude Code CLI(快速配置)

bash 复制代码
# 一键添加到 Claude Code
claude mcp add chrome-devtools npx chrome-devtools-mcp@latest

Claude Desktop

编辑配置文件(位置因系统而异):

json 复制代码
{
  "mcpServers": {
    "chrome-devtools": {
      "command": "npx",
      "args": ["-y", "chrome-devtools-mcp@latest"]
    }
  }
}

配置文件位置:

  • macOS : ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows : %APPDATA%\Claude\claude_desktop_config.json
  • Linux : ~/.config/Claude/claude_desktop_config.json

Cline(VS Code 扩展)

在 VS Code 设置中添加 MCP 配置:

json 复制代码
{
  "cline.mcpServers": {
    "chrome-devtools": {
      "command": "npx",
      "args": ["-y", "chrome-devtools-mcp@latest"]
    }
  }
}

Cursor

在 Cursor 设置中配置:

json 复制代码
{
  "mcpServers": {
    "chrome-devtools": {
      "command": "npx",
      "args": ["-y", "chrome-devtools-mcp@latest"]
    }
  }
}

Gemini CLI

bash 复制代码
# 添加到用户级配置
gemini mcp add -s user chrome-devtools npx chrome-devtools-mcp@latest

其他支持的 AI 助手

Chrome DevTools MCP 还支持以下工具(配置方式类似):

  • Copilot CLI 和 VS Code Copilot
  • Gemini Code Assist
  • JetBrains AI Assistant 与 Junie
  • Amp、Codex、Kiro、Qoder、Visual Studio、Warp、Windsurf

3. 连接现有的 Chrome 实例(高级配置)

如果需要连接到已经运行的 Chrome 实例(比如需要自定义认证):

json 复制代码
{
  "mcpServers": {
    "chrome-devtools": {
      "command": "npx",
      "args": [
        "chrome-devtools-mcp@latest",
        "--wsEndpoint=ws://127.0.0.1:9222/devtools/browser/<id>",
        "--wsHeaders={\"Authorization\":\"Bearer YOUR_TOKEN\"}"
      ]
    }
  }
}

参数说明:

  • --wsEndpoint:WebSocket 连接地址
  • --wsHeaders:自定义请求头(用于认证等)
  • --browser-url:浏览器调试地址(可选)

4. 启动浏览器(调试模式)

Chrome DevTools MCP 默认会自动启动 Chrome,但在某些情况下需要手动启动:

bash 复制代码
# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
  --remote-debugging-port=9222

# Windows
"C:\Program Files\Google\Chrome\Application\chrome.exe" \
  --remote-debugging-port=9222

# Linux
google-chrome --remote-debugging-port=9222

重要提示

  • 必须以调试模式启动浏览器,否则 MCP 无法连接
  • 默认端口是 9222,可以修改为其他端口
  • 启动后浏览器会显示"Chrome 正在受到自动测试软件的控制"

沙箱限制的解决方案

在某些 MCP 客户端(如启用了 OS 沙箱的 Claude Desktop)中,Chrome DevTools MCP 可能无法自动启动 Chrome。

解决方法 1:禁用沙箱(不推荐)

json 复制代码
{
  "mcpServers": {
    "chrome-devtools": {
      "command": "npx",
      "args": ["-y", "chrome-devtools-mcp@latest"],
      "dangerouslyDisableSandbox": true
    }
  }
}

解决方法 2 :手动启动 Chrome 并使用 --browser-url 参数(推荐)

bash 复制代码
# 1. 先手动启动 Chrome
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
  --remote-debugging-port=9222

# 2. 配置 MCP 连接到手动启动的实例
{
  "mcpServers": {
    "chrome-devtools": {
      "command": "npx",
      "args": [
        "chrome-devtools-mcp@latest",
        "--browser-url=http://localhost:9222"
      ]
    }
  }
}

5. 验证配置是否成功

在 AI 助手中测试:

arduino 复制代码
你:"帮我打开 https://example.com 并截图"
AI:(如果配置成功,会执行操作并返回截图)

如果看到错误信息,检查:

  1. Chrome 是否正确启动并开启了远程调试
  2. 端口 9222 是否被占用
  3. MCP 配置文件格式是否正确
  4. Node.js 版本是否满足要求(v20.19+)

使用建议

开发阶段

快速调试

  • 发现控制台错误 → 让 AI 直接看日志分析
  • 网络请求慢 → AI 自动找出耗时接口
  • 样式不对 → AI 截图并定位 CSS 问题

性能优化

  • 录制 Performance Trace
  • AI 分析瓶颈并给出优化建议
  • 对比优化前后的数据

测试阶段

功能测试

  • AI 自动填写表单测试验证逻辑
  • 检查不同分辨率的显示效果
  • 模拟弱网环境测试加载体验

回归测试

  • 检查是否有新的控制台错误
  • 对比关键接口的响应时间
  • 验证核心流程是否正常

不适用的场景

  1. 复杂的自动化测试 → 用 Playwright MCP 更合适
  2. 需要精确断言 → 写单元测试更好
  3. 生产环境监控 → 用专业的监控工具(Sentry, Datadog)

Chrome DevTools MCP 最适合开发过程中的快速调试和分析

常见问题解答

Q1: Chrome DevTools MCP 和 Playwright MCP 有什么区别?

Chrome DevTools MCP

  • 侧重实时调试和分析
  • 查看控制台、网络请求、性能分析
  • 基于无障碍树的页面理解(更接近用户视角)
  • 适合开发过程中的快速排查

Playwright MCP

  • 侧重自动化测试和复杂操作
  • 更强大的页面操作能力(复杂选择器、等待条件)
  • 多浏览器支持(Chrome、Firefox、Safari)
  • 适合 E2E 测试和自动化场景

建议组合使用:Playwright 做自动化操作,DevTools 做结果验证。

Q2: 为什么会提示"无法启动 Chrome"?

最常见的原因是 MCP 客户端启用了沙箱限制。解决方法:

  1. 推荐 :手动启动 Chrome 并使用 --browser-url 参数连接
  2. 禁用沙箱(dangerouslyDisableSandbox: true)- 不推荐
  3. 检查 Chrome 是否已经在运行(关闭所有 Chrome 实例后重试)
  4. 确认 Node.js 版本 >= v20.19

Q3: 可以同时连接多个浏览器实例吗?

可以,通过不同的配置名称和端口:

json 复制代码
{
  "mcpServers": {
    "chrome-devtools-main": {
      "command": "npx",
      "args": ["chrome-devtools-mcp@latest", "--browser-url=http://localhost:9222"]
    },
    "chrome-devtools-test": {
      "command": "npx",
      "args": ["chrome-devtools-mcp@latest", "--browser-url=http://localhost:9223"]
    }
  }
}

然后分别在端口 9222 和 9223 启动 Chrome。

Q4: 性能追踪会影响实际性能吗?

是的。性能追踪本身会带来额外开销(通常 5-10% 的性能影响)。

建议:

  • 对比分析时保持相同的追踪配置
  • 关注相对性能变化,而非绝对值
  • 在接近生产环境的机器上进行性能测试

Q5: 能在无头模式(Headless)下使用吗?

可以,在启动 Chrome 时添加 --headless 参数:

bash 复制代码
# 无头模式启动
chrome --remote-debugging-port=9222 --headless=new

但注意:无头模式下无法看到页面实际渲染效果,适合自动化测试场景。

Q6: 如何处理需要登录的页面?

有几种方法:

  1. 手动登录后再测试:在调试模式的浏览器中手动登录,然后让 AI 操作
  2. 使用 Cookie :通过 evaluate_script 注入 Cookie
  3. 自动化登录:让 AI 自动填写登录表单
javascript 复制代码
// 注入 Cookie 示例
evaluate_script({
  function: `() => {
    document.cookie = "auth_token=xxx; path=/; domain=.example.com";
  }`
})

Q7: 支持移动端浏览器吗?

目前只支持桌面版 Chrome。如果需要测试移动端:

  1. 使用 emulate 工具模拟移动设备
  2. 使用 resize_page 调整为移动端尺寸
  3. 在 DevTools 中启用移动端用户代理
javascript 复制代码
// 模拟移动设备
emulate({
  device: "iPhone 14 Pro",
  viewport: { width: 390, height: 844 }
})

Q8: 如何优化性能和减少资源消耗?

建议:

  • 避免频繁的 take_snapshot(缓存页面结构)
  • 使用局部截图而非全页面截图
  • 按需获取网络请求(使用资源类型过滤)
  • 关闭不需要的标签页(close_page
  • 性能追踪完成后立即停止

总结

这些就是注意点 Chrome DevTools MCP的能力了

核心价值

  • 把浏览器开发工具的能力直接给到 AI
  • 不需要手动截图、复制粘贴错误信息
  • AI 可以"看到"页面的实际状态,更准确地理解问题

主要功能

  • 页面分析:快照、截图、执行脚本
  • 调试工具:控制台日志、网络请求
  • 性能分析:Performance Trace、Core Web Vitals
  • 自动化交互:点击、填表、拖拽

适用场景

  • 快速调试前端问题
  • 性能分析和优化
  • 响应式布局测试
  • 简单的功能验证

使用建议

  1. 开发环境使用:不要在生产环境或敏感页面使用
  2. 结合其他工具:Playwright 做自动化,DevTools 做分析
  3. 注意性能开销:复杂操作会消耗资源
  4. 保护隐私:避免在有敏感信息的页面使用

如果你经常需要调试前端问题、分析页面性能,或者想让 AI 更好地理解你的前端项目,Chrome DevTools MCP 是个很实用的工具。它让 AI 从"问答助手"变成了"能动手的开发伙伴"。


参考资源

官方文档和项目

  1. Chrome DevTools MCP 官方仓库 - 官方 GitHub 仓库,包含完整文档和配置示例
  2. Chrome DevTools Protocol - CDP 官方协议文档
  3. Model Context Protocol - MCP 协议官方网站

相关工具

  1. Playwright - 更强大的浏览器自动化工具
  2. Puppeteer - Google 官方的浏览器控制库
  3. Playwright MCP - Playwright 的 MCP 服务器

性能优化

  1. Web Vitals - Google 的核心性能指标说明
  2. Lighthouse - 自动化性能审计工具
  3. Chrome DevTools 性能分析指南 - 官方性能分析教程

AI 助手配置

  1. Claude Code 文档 - Claude Code 官方文档
  2. Cline 扩展 - VS Code 的 Claude 扩展
  3. Cursor 文档 - Cursor IDE 官方文档
相关推荐
Rysxt_2 小时前
Vuex 教程 从入门到实践
前端·javascript·vue.js
by__csdn2 小时前
Node.js版本与npm版本的对应关系
前端·npm·node.js
AI_56782 小时前
Webpack性能优化终极指南:4步实现闪电打包
前端·webpack·性能优化
xuehuayu.cn3 小时前
js es6 class 类中的值是异步赋值, 子类中如何获取这个值?
javascript·es6
威风的虫3 小时前
ES6 数组方法:告别循环,拥抱函数式编程
开发语言·前端·javascript
小杨快跑~3 小时前
ES6 Promise:告别回调地狱的异步编程革命
前端·javascript·ecmascript·es6
linweidong3 小时前
VIVO前端面试题及参考答案
前端·跨域·localstorage·重绘·浏览器兼容·git管理·前端重构
有意义3 小时前
从零搭建:json-server+Bootstrap+OpenAI 全栈 AI 小项目
前端·后端·llm
温宇飞3 小时前
CCState:为大型 Web 应用设计的状态管理库
前端