阅读视图

发现新文章,点击刷新页面。

《前端周刊》尤大官宣 Vite 8 稳定版首发!npm 新官网?React 官网更新。focusgroup 新功能!

🌐 今日要闻

打破信息壁垒,走近全球前端。Hello World 大家好,我是林语冰。

欢迎阅读《Web 周刊》,上周 Web 开发圈的主要情报包括:

  • ⚡️ 尤大官宣 Vite 8,第一个 Rust 驱动的稳定版本正式发布
  • ✨ React 官网重写了 2 个 Hooks 文档,我学不动了
  • 🤝 谷歌诚邀大家测评 focusgroup,“后 HTML5 时代“的新功能
  • 📦 全新的 npmx 注册源网站上线,npm 官网惨遭“降维打击“

PS:本文附带甜妹解说的动画视频,粉丝请搜索哔哩哔哩@Web情报局

🎉 每周热搜

Rolldown + Vite 稳定版首发

Vite 是 GitHub 第一 构建工具,提供了基于原生 ESM 模块的开发服务器,和打包优化的构建功能。

Vite 团队官宣 Vite 8 正式发布,这是 第一个 使用 Rust 打包器 Rolldown 驱动的 稳定版本,标志着 Rust 催生的“前端工业革命“日益流行。

Vite 8 除了把 esbuild + rollup 换用为 Oxc + Rolldown,该主版本还有下列亮点。

首先是开发体验,新增 Vite Devtools 开发工具,可以直接从开发服务器调试;支持浏览器控制台转发到 CLI 终端,方便 AI 分析。

Vite Devtools

然后,内置了 TypeScript 功能,支持 tsconfig path,解析路径别名;支持 emitDecoratorMetadata 选项,无需安装外部插件。

此外,@vitejs/plugin-react v6 主版本更新,集成 Oxc,不再依赖 Babel;.wasm?init 导入可以在 SSR 环境运行。

最后,新增 Vite Plugin 插件官网,方便大家搜索 Vite 生态的插件。

vite-plugin.png

Vite 8 之前,为了避免反复造轮子,Vite 开发时使用 esbuild 快速编译,构建时使用 rollup 打包优化,但双打包机制“天衣有缝“,两种流程始终存在 不一致性

为此,尤大组建 Rolldown 团队,换用 Rust 编写的 Rolldown 统一流程,它既兼容 Rollup 插件 API,又媲美 esbuild 的性能,构建速度暴涨 10 倍。

直至今日,我们终于拥有基于 Rust 的打包神器!

感谢尤大和 Vite 团队,感谢 esbuild、rollup 和所有社区贡献者~

🛜 官方情报

Vercel 重定向算法优化

Vercel 分享了一篇重定向算法优化的官方博客。

Vercel 采用 JSON 文件、Bloom filter 布隆过滤器,sharding 分片和二分搜索等优化技术持续迭代,实现了低延迟的百万静态重定向。

flow.png

React 文档重写

React 官网中,useActionState()useOptimistic() 这两个 Hooks 的文档重写了。

useActionState() 涵盖了表单集成、错误处理等内容,useOptimistic() 渐进式教学,提供了从简单按钮高到复杂购物车的示例。

这部分文档还更新了互动教程,可以边玩边读。

react-state.png

JS 七年之痒

Patreon 耗时 7 年把百万行 JavaScript 代码迁移到 TypeScript,历经三大时期。

前期,团队授权引入 TS,自愿使用;中期,团队手动迁移,奠定类型良好的基建;后期,团队采用 ts-migrate codemods(代码批改工具),进一步借助 AI 肌肉自动批改,程序员负责复杂架构和最终审核,有组织地迁移。

如果你也有大型项目想要重构,可以借鉴这种渐进式的迁移方案。

focusgroup 新功能公测

无障碍的常见场景之一,是使用 Tab 和方向键在子项中移动聚焦。现存技术的痛点在于,这需要开发者编写 JS 手动管理 tabindex

focusgroup.gif

目前,不同大厂的 UI 库反复造轮子,各自攻克最后焦点记忆、忽略禁用项、动态子项等技术难关。

为此,微软发明了 focusgroup 新特性,联手谷歌和 OpenUI 迭代这个“后 HTML5 时代“的新功能。

focusgroup 目前处于实测阶段,它可以为 tablist / menu 等复合部件添加键盘方向键导航功能,这是一种更符合人体工程学的纯 HTML 声明式魔法,可以消灭 JS “代码屎山“,简化无障碍开发。

<div focusgroup="toolbar" aria-label="Text formatting">
  <button type="button">👍</button>
  <button type="button"></button>
  <button type="button">❤️</button>
</div>

现在,谷歌和微软诚邀大家测评 focusgroup,它们将根据大家的测评反馈继续完善这项新技术。

🚦 版本更新

Lightning CSS v1.32

Lightning CSS 是一个用 Rust 编写的 CSS 解析器 & 压缩神器,被 GitHub 第一 构建工具 Vite 采用,速度比用 JS 编写的同款工具快 100x 倍。

rank.gif

Lighting CSS 发布了 v1.32 次版本:

  • 支持解析器标记 @import 为外部导入,不会被打包
  • 允许访问者添加依赖,实现文件监视或缓存
  • 支持 CSS mix-blend-mode 新属性

Electron v41.0

Electron 是 GitHub 第一 跨平台桌面应用框架,地表最强 IDE VSCode 就是用它写的。

Electron 发布了 v41 主版本,主要包括:

  • 新增了 MacOS 应用新功能,比如支持嵌入 ASAR 完整性摘要,提升安全性;新增 --disable-geolocation flag,禁用定位服务等
  • 技术栈升级,Chromium 升级到 146.0.7680.65,Node 升级到 24.14
  • 支持通过 login 事件,实现 WebSocket 认证

reveal v6.0

reveal 是 GitHub 第一 HTML 幻灯片框架,允许我们使用 Markdown + Web 技术栈来写 PPT。

reveal 发布了 v6.0 主版本,主要包括:

  • 使用 Vite 替代 Gulp 作为构建工具
  • TypeScript 类型开箱即用,无需安装类型开发依赖
  • 新增 @revealjs/react 模块,支持使用 React 组件制作 PPT

Astro v6.0

Astro 是 GitHub 第三 的全栈框架或通用 SSG(静态站点生成器),它允许我们在一个框架中编写所有主流前端框架的组件,包括 React / Vue / Svelte 等。

Astro 发布了 v6.0 主版本,主要包括:

  • 重写 astro dev,借助 Vite Environment API,开发服务器可以跑在非 Node 的生产运行时,包括 Cloudflare Workers,Bun 等,统一开发体验和生产环境
  • 新增 Fonts API,支持从本地文件或谷歌等供应商配置字体
  • 实时内容合集稳定,在请求时获取内容,发布后立即更新,无需重建
  • 内容安全策略 API 稳定
  • 实验性支持基于 Rust 的新编译器,未来有望取代基于 Go 的编译器;顺便一提,React 也爆料将上线基于 Rust 的 React Compiler

Prisma v7.5

Prisma 是 GitHub 第一 NodeJS ORM(对象关系映射),发布了 v7.5 次版本,支持 SQL 数据库的嵌套事务回滚行为,如果外部事务失败,内部嵌套事务也会回滚。

另外,Prisma 官网重做了。

docs.png

Preact v10.29

Preact 是拥抱 DOM 规范的 React 替代品,发布了 v10.29 次版本,实现了 flushSync

💡 前端信息差

Next 升级后遗症

去年,Next 爆出核弹级安全漏洞后,就鼓励用户赶快升级 fix bug 嘛。

结果嘞,部分用户反馈升级到 Next v16 后,请求跟延迟反而增加了。

image.png

由于 Vercel 是按请求收费,请求增加后,成本也会递增,导致经费增长、性能负增长的“消费降级“现象......

因此,部分用户选择回退到了 Next v15,部分用户被退回了 25% 的平台费用。

今年二月底,Next 团队终于找到“万恶之源“,这似乎与预请求有关,并且已经合并了实验性补丁 prefetchInlining flag。

// next.config.js
module.exports = {
  experimental: {
    prefetchInlining: true,
  },
};

如果你升级到 Next v16 后发现成本增长,但性能反而负增长,可以参考这个 GitHub issue,重新制定技术方案。

Fastify 之父分享 Skills

最近 AI 编程中 Skills 的应用挺火的,很多大神纷纷分享自己的 Skills。

Fastify 之父也是 Node 核心贡献者,也分享了自己的 Skills:

  • Node 最佳实践,事件循环和异步错误处理等
  • TypeScript 高级类型系统和 any 消除等
  • ESLint v9 扁平化配置等

最近 Node 开发圈爆发了抵制 AI 提交 Node 源码和开源贡献的反 AI 运动,但目前适当使用 AI 辅助编程还是可行的。

🛠️ 工具推荐

npmx:现代化 npm 注册搜索源

npmx 是一个类似 npm 官网的现代搜索源,旨在优化 npm 官网的设计和开发体验。

npmx 目前处于 Alpha 阶段,我替大家进行了人体试验,目前感觉良好。

首先,npmx 支持更机智的模糊搜索算法,比如搜索“Vite JS“,npm 会搜索出不准确的结果;而 npmx 即便输入的模块名不完全匹配,也能智能搜索出目标模块。

npmx 还支持模块 PK 跑分,帮助开发者挑选模块,比如这是 Vite vs webpack 的“对照实验“。

npmx-pk.png

UI 和无障碍方面,现代化的 npmx 支持深浅模式和自定义主题等。

此外,npmx 支持在线查看模块打包后的源码,不需要我们自己去 GitHub 下载源码打包。

数据可视化方面,我们还可以在线免费下载统计图表,比如本文的这张 Vite vs webpack 的本月下载量。npmx 还支持编辑标注截图,用来发帖或写博客都挺高效的。

npmx-chart.png

npmx 项目由 Nuxt 团队主席提出,团队成员包括 antfu 等前端大神。npmx 采用 VoidZero 和 Vite+ 全家桶构建,提供了更现代化的 UI 设计跟更棒的开发体验,还有更多隐藏功能,欢迎大家测评体验,真的超好用。

🙏 特别鸣谢

以上就是本期《Web 周刊》的全部内容了。

👍 感谢大家按赞跟转发分享本文,你的手动支持是我坚持创作的不竭动力喔。

😘 已经关注我的粉丝们,我们下期再见啦,掰掰~~

cat-thank.gif

TypeScript 6 官宣,JS “最后之舞“,版本升级踩雷指南

今日要闻

打破信息壁垒,走近全球前端。Hello World 大家好,我是林语冰。

TypeScript 团队官宣,TypeScript v6.0 主版本正式发布,这也是基于 JavaScript 实现的最后一个主版本。

TypeScript v7 开始,TypeScript 将正式移植到 Go 语言,利用原生代码和共享内存多线程提升性能。目前,我们已经可以通过 VS Code 扩展或 npm 手动安装,抢先体验 TypeScript-Go 原生预览版了。

TypeScript v6 是主版本更新,所以此版本会涵盖新功能支持和破坏性更新,主要用于当前版本和基于 Go 语言版本的过渡。换而言之,如果你的项目能顺利迁移到 v6,未来迁移到 v7 的阻力也会更小。

JS 新功能支持

TypeScript v6 新增了 3 个最新的 JS 新功能,所以当我们使用这些新功能时,现在也能获得良好的类型提示。

Map 新方法

来看一段简单的 Vite 源码:

// Vite 源码
if (!hmrClient.dataMap.has(ownerPath)) {
  hmrClient.dataMap.set(ownerPath, {});
}

hmrClient.hotModulesMap.get(ownerPath);

这是一种常见的 Map 模式,先判断某个键是否存在,如果有就取值,没有就设置并读取默认值。

针对这种无聊的使用场景,Map 数据结构新增了 2 个实例方法,用于快速判断和设置某个键的默认值:

  • map.getOrInsert()
  • map.getOrInsertComputed()

我们使用 Map 新方法重构一下 Vite 源码:

hmrClient.hotModulesMap.getOrInsert(ownerPath, {});

这基本上是一个更精简的“方法糖“,一行代码消灭样板代码,更符合人体工程学。

Temporal API

日期和时间一直是 JS 开发中的痛点之一,过去我们经常借助 Moment.js 之类的工具库来改善开发体验。

新出的 Temporal API 被设计来取代 Date 对象,支持多种场景的日期和时间管理,无需安装依赖。

一个计算今天和明天的简单例子:

// 今天
let today = Temporal.Now.instant();
// 24 小时后的明天
let tomorrow = today.add({ hours: 24 });

console.log(`Today: ${today}`);
// Today: 2026-03-25T14:12:53.760909912Z
console.log(`Tomorrow: ${tomorrow}`);
// Tomorrow: 2026-03-26T14:12:53.760909912Z

此外,还有 RegExp.escape() 静态方法,用于保留字符串在构造正则时的字面量行为,这是 ES2025 的旧功能,示例就略过了。

这三大 JS 功能必知必会,最晚的功能今年也会正式发布,建议先学为敬!

项目更新

tsconfig.json 文件中,一些配置选项的默认值修改了。

编译选项现在默认启用严格的类型检查,不需要显式设置;"types": [] 默认为空数组,防止构建时无意包含多余的声明文件,你可以按需添加类型声明文件;如果你不介意自动加载所有声明文件,可以使用 "types": ["*"]

三种常见情况如下,任选其一:

{
  // 保留旧版行为,全部自动包含
  "types": ["*"],

  // 默认值
  "types": [],

  // 也可以像 Vite 源码一样,
  // 按需添加声明文件
  "types": ["node"]
}

lib 库声明也有所改动,dom 库现在包含了 dom.iterabledom.asynciterable 两个声明文件,所以可以简化配置。

{
  // v6 之前:
  "lib": ["dom", "dom.iterable", "dom.asynciterable"],
  // v6:
  "lib": ["dom"]
}

编译目标默认为当年的 ECMAScript 版本,比如现在是 ES2025,根据年份和最新标准自动更新。

默认的模块系统为 ESNext,也就是下一代的 ESM 模块,这不仅支持广为人知的 ES6 import 语句,还支持最新的导入属性等标准功能,弃用导入断言等过时语法;esModuleInterop 现在始终启用,让 ESM 和 CJS 的交互更安全。

// v6 之前:
import * as express from "express";
// 导入断言
import data from "./data.json" asserts { type: "json" };

// v6: esModuleInterop 启用
import express from "express";
// 导入属性
import data from "./data.json" with { type: "json" };

出于篇幅考虑,更完整的升级建议阅读官方文档最为妥当。

为了方便上手和学习,我把几个重要的默认配置总结到了这个配置中。

{
  "compilerOptions": {
    "strict": true,
    "target": "ES2025",
    "module": "ESNext",
    "esModuleInterop": true,
    "types": [],
    "rootDir": ".",
  },
}

这意味着,这些选项现在不需要我们自己配置也会启用了。可以看到,这些默认配置的改动基本上为了容易迁移到 TypeScript v7,拥抱现代化的前端工程。

其他更新

TypeScript v6 还新增了 Node 20 的新功能,支持 #/ 开头的子路径导入,要求配置 --moduleResolutionnodenextbundler

此外,TypeScript v6 的类型系统也有微妙的更新,比如没有 this 的方法不当做上下文敏感处理,引入--stableTypeOrdering Flag 对齐 TypeScript 7 的行为。

这些类型系统的技术细节比较复杂,本文不再一一展开,官方文档解释得很清楚,我读了三遍基本已经能看懂了。

破坏性更新

TypeScript v6 也弃用了一些过时的技术,或者不兼容 v7 的功能。

TypeScript v6 弃用了非主流的模块格式,包括 amd / umd / systemjs,因为后 ES6 时代的模块系统优先使用原生 ESM,偶尔使用 CJS。

同理,--moduleResolution 弃用 node / node10classic,Node 10 和经典的两种模块解析算法早已过时。

v6 还弃用了 ES5,最低输出版本要求至少是 ES2015,因为 IE 浏览器退役之后,现代浏览器基本都支持 ES6,ES5 市场份额几乎为零。

同理,--downlevelIteration 被弃用,因为这个配置主要用于将 ES6 的迭代器优雅降级到 ES5。ES5 和 IE 都无了,还要它做什么。

此外,v6 要求始终启用 --alwaysStrict true,因为 TypeScript v6 假设所有代码都开启 "use strict",因为现代 JS 开发基本会启用“阉割模式“,阉割掉那些乱七八糟的 JS 怪癖。

特别鸣谢

总体而言,TypeScript v6 主要做了两方面的工作,一个是新增一些 JS 的新功能,同步最新的 JS 标准;二是提供一个过渡版本,让用户未来迁移到基于 Go 原生版本的阻力最小化,提前对齐 v7 的部分行为。

TypeScript v6 是一个主版本更新,包含新功能和破坏性更新,整体目的旨在简化配置,提前适应现代化的 JavaScript 开发环境,为迁移 v7 奠定基础。

以上就是今日“前端快讯“的全部内容了,感谢大家按赞跟转发分享本文,你的手动支持是我坚持创作的不竭动力喔。

已经关注我的粉丝们,我们下期再见啦,掰掰~~

参考文献

TypeScript v6 官方博客:devblogs.microsoft.com/typescript/…

《前端周刊》React 败北,虾皇登基,OpenClaw 勇夺 GitHub 第一开源软件

今日要闻

打破信息壁垒,走近全球前端。Hello World 大家好,我是林语冰。

欢迎阅读《Web 周刊》,上周 Web 开发圈的主要情报包括:

  • 🦞 OpenClaw 赶超 React,加冕 GitHub 第一软件
  • 💰 Linux 基金会成立 React 基金会,华为加盟
  • 🔄 Cloudflare 入驻 B 站,尝试把 Next 移植到 Vite
  • 🛠️ 尤大推出 Vite+,Oxfmt 性能吊打 Prettier

PS:本文附带甜妹解说的动画视频,粉丝请搜索哔哩哔哩@Web情报局

每周热搜

OpenClaw 勇夺 GitHub 第一

GitHub 星榜

如图,目前 GitHub 第一仓库是 build-your-own-x,一个聚合了各种资源的懒人包项目。

而涨星最快的仓库是 996.ICU,它其实一场中国社畜抗议 996 过劳文化的运动。

ICU996.png

但以上两者都不算真正的开源软件。

在此之前,GitHub stars 超过 20 万的开源软件有且仅有 3 个:React、Linux 和 Vue。

但两周前,没有 996 的 Open Claw 打破了 996.ICU 的不败神话,赶超了 Linux,一周后 stars 再度反超 React,标志着开源软件的“四皇“正式诞生。

big4-oss.png

更恐怖的是,React 在 2013 年首发,耗时 13 年才积累了 20 万 stars;而 Open Claw 赶超 React 竟然只用了 1/3 年,百日封神。

Star History Chart

目前,OpenClaw 是唯一一个狂砍 GitHub 三大记录的开源软件:

  • 🚀 GitHub 涨星最快的仓库
  • ⭐ GitHub stars 第一的开源软件
  • 👍 GitHub 第一个、也是唯一一个 stars 超过 30 万 的开源软件

恭喜虾皇,AI 的惊喜还在到处涌现!!!

官方情报

React 基金会成立

Linux 基金会官宣 React 基金会成立。

这个独立基金会拥有 Meta、微软、华为等 8 位创始成员,将接管 React、React Native、JSX 等项目。

CLoudflare 将 Next 移植到 Vite

上周,一位 Cloudflare AI 程序员只耗费 $1,100 美元的 token,就将 React 第一全栈框架 Next 移植到 Vite 生态,这个项目就是 vinext。

Cloudflare 认为,Next 的痛点在于它基于 Turbopack 构建,在 Serverless 平台部署存在阻力。

虽然这可以通过 OpenNext “曲线救国“,但更好的方案是基于 GitHub 第一 Web 构建工具 Vite 来驱动,因为 Vite Environment API 可以在任何平台运行。

目前,vinext 处于实验状态,README 说明了若干设计权衡和限制,Next 社区还反馈了安全漏洞。但 vinext 投入成本极低,再次证明了 AIGC 惊人的生产力和无限可能。

此外,Cloudflare 还重做了 Turnstile 人机验证部件。

有趣的是,目前地球总人口大约 80 亿,而这个部件每天就被点击了约 77 亿次,堪称地球上曝光量最大、交互最多的网页小部件了。

所以,你可能也已经在 ChatGPT、Youtube 等各种网站点击过这个人机验证控件了。

最后,Cloudflare 官宣入驻 B 站,感兴趣的粉丝可以一键三连。

bili.png

Angular SRR 漏洞

@angular/ssr 模块发现了 2 个安全漏洞:

  • 首先是一个 Critical 致命漏洞:SSRF 漏洞(服务端请求伪造),存在 HTTP header(请求头)注入风险
  • 还有一个 Moderate 中等漏洞:开放重定向漏洞,存在通过 X-Forwarded-Prefix 发动攻击的风险

Angular 团队建议你尽快将 SSR(服务端渲染)应用更新到最新补丁版。对于无法及时更新的项目,Angular 也提供了一些变通方案。

Prisma 再进化

Prisma 是 GitHub 第一 Node.js ORM(对象关系映射),它能跟后端数据库的 Restful 或 GraphQL 等 API 完美搭配使用。

Prisma 团队正用 TypeScript 重写下一代的 Prisma Next,它是 Prisma 8 的雏形。

目前,Prisma 7 暂定不支持 MongoDB 等非 SOL 数据库,但 Prisma Next 会支持。

此外,它还支持直接写 TS 来替代 schema.prisma 这种 Prisma 专属的声明式 schema 语言。

还有,Prisma Next 会把“查询地狱“重整为更优雅可读的链式调用。

版本更新

这一节我们有精选一些 GitHub stars 过万的仓库或流行的 npm 模块,共享它们近期主/次版本的更新内容,略有删改。

Nuxt UI v4.5

Nuxt UI 是一个全面的 Vue 组件库,最近发布了 4.5 版本。

这个次版本更新主要包括:

  • 新增 <Theme /> 组件,它可以一次性覆盖所有子组件主题
  • 得益于 Tailwind 4.2,它新增了 4 种中性色
  • useToast() 现在会自动去重,在重复通知时显示脉冲动画

toast.gif

Shiki v4.0

Shiki 是 GitHub 第一 Textmate 语法高亮库,能实现 VS Code 的高亮样式,由 Antfu 大神维护。

Shiki 发布了 4.0 主版本,主要包括:

  • 它要求 Node 版本至少 20,因为 Node 18 去年停止维护了
  • 删除一些拼写错误的废弃 API
// 删除之前过去式的方法名
createdBundledHighlighter();

// 重构为一般现在时的方法名
createBundledHighlighter();

Better Auth v1.5

Better Auth 是 GitHub 前十的认证与授权库,兼容 React 跟 Next,也支持 Vue 和 Nuxt 等流行框架。

Better Auth 发布了 1.5 次版本,是迄今为止最大的一次更新,主要包括:

  • @better-auth/electron 支持 Electron 桌面应用认证,它能处理完整的 OAuth 流程
  • MCP 插件现在自带一个远程认证客户端。如果你的 MCP 服务器与 Better Auth 实例分开,你可以验证 token,无需重复认证逻辑
  • 新插件 @better-auth/oauth-provider 将 Better Auth 实例变成一个兼容 OIDC 的 OAuth 2.1 授权服务器,将取代 OIDC Provider 插件,MCP 插件也将迁移到这个新插件
  • 新的 CLI 取代了原来的 @better-auth/cli
# npx auth 取代旧的 CLI
npx auth init

工具推荐

Oxfmt beta(公测)

Oxfmt 是一款 Rust 驱动、兼容 Prettier 的代码格式化神器。

它是 Vite Rolldown 版底层 Oxc 编译器生态的产品之一,也是最近尤大推出的 Vite+ 工具链的一部分,旨在用 Rust 重写的 Prettier 打败 Prettier。

Oxfmt 进入 beta(公测)阶段,我们刚刚提到的 GitHub 第一软件 OpenClaw 已经在用 Oxfmt 了,亮点主要有:

  • 内置 JS 的 import 导入语句排序(强迫症晚期狂喜)
  • 内置 Tailwind CSS class 类名自动排序,不需要 prettier-plugin-tailwindcss 插件
  • 默认启用 package.json 属性字段自动排序
  • 支持海量 IDE,包括 VS Code、WebStorm、Cursor、Neovim 等
  • JS / TS 一致性测试 100% 兼容 Prettier,少数不一致性正在和 Prettier 团队合作,但性能堪称降维打击

在性能跑分中,Oxfmt 比 Biome 快 3 倍,比 Prettier 快 30 倍。

oxfmt-rank.gif

特别鸣谢

以上就是本期《Web 周刊》的全部内容了,感谢大家按赞跟转发分享本文,你的手动支持是我坚持创作的不竭动力喔。

已经关注我的粉丝们,我们下期再见啦,掰掰~~

PS:本文附带甜妹解说的动画视频,粉丝请搜索哔哩哔哩@Web情报局

❌