Webpack
Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它能够分析项目结构,找到 JavaScript 模块以及其他浏览器不能直接运行的语言(如 TypeScript、SASS、JSX 等),将其转换和打包为合适的格式供浏览器使用。Webpack 的核心概念包括入口(Entry)、输出(Output)、Loader、插件(Plugin)和模式(Mode)。在本工具中,Loader 链的模拟正是基于 Webpack 的模块转换机制。
Loader
Loader 是 Webpack 的核心概念之一,本质上是一个函数,接收源文件内容作为参数,返回转换后的结果。Loader 用于对模块的源代码进行转换,使其能够被 Webpack 识别和打包。例如 babel-loader 可以将 ES6+ 语法转换为 ES5,css-loader 可以解析 CSS 中的 @import 和 url() 语法。Loader 支持链式调用,多个 Loader 可以串联使用,按照从右到左的顺序依次处理。本工具模拟的正是这种链式 Loader 的执行过程。
Loader 链(Loader Chain)
Loader 链是指多个 Loader 按照特定顺序串联执行的过程。在 Webpack 配置中,通过 use 数组定义多个 Loader,执行时按照从右到左(从下到上)的顺序依次处理。第一个 Loader 接收原始文件内容,将其转换后传递给第二个 Loader,以此类推,形成一条数据处理流水线。本工具为了直观展示,采用从左到右的顺序显示数据流方向,帮助开发者理解 Loader 之间的数据传递关系。
数据流方向
在 Webpack 的 Loader 执行机制中,数据流方向是从右到左。但在本工具的可视化界面中,为了符合人类从左到右的阅读习惯,数据流方向被设定为从左到右——即添加的第一个 Loader 最先处理源代码。这种显示方式让数据在 Loader 链中的传递过程更加直观。开发者在实际 Webpack 配置中需注意执行顺序与本工具显示方向的差异。
Babel 转换
Babel 是一个 JavaScript 编译器,用于将 ECMAScript 2015+(ES6+)语法转换为向后兼容的 JavaScript 版本,使其能够在当前和旧版浏览器或环境中运行。在本工具中,Babel 转换 Loader 模拟了这一过程,将包含箭头函数、解构赋值、模板字符串、const/let 等 ES6+ 语法的代码转换为传统的 ES5 写法,让开发者直观看到语法降级的效果。
CSS 处理器
CSS 处理器在 Webpack 生态中通常对应 css-loader 和 style-loader 等 Loader 的组合。css-loader 负责解析 CSS 文件中的 @import 和 url() 引用,style-loader 将 CSS 代码注入到 DOM 中。本工具中的 CSS 处理器模拟了对 CSS 代码的解析和格式化过程,帮助开发者理解 Webpack 如何处理样式文件以及 CSS 在构建流程中的转换行为。
代码压缩
代码压缩是前端构建流程中的重要环节,通常由 terser-webpack-plugin 等工具实现。压缩过程包括移除代码中的空格、换行、注释,缩短变量名,删除未使用的代码等操作,目的是减小文件体积、加快网络传输和页面加载速度。本工具中的代码压缩 Loader 模拟了这一转换过程,让开发者观察压缩前后代码体积和可读性的变化。
Plugin(插件)
Plugin 是 Webpack 的另一个核心概念,与 Loader 不同,Plugin 作用于整个构建流程而非单个文件。Plugin 可以执行更广泛的任务,包括打包优化、资源管理、环境变量注入、构建产物分析等。常见的 Plugin 有 HtmlWebpackPlugin、MiniCssExtractPlugin、DefinePlugin 等。Loader 负责文件级别的内容转换,Plugin 负责构建级别的流程控制,二者协同工作完成整个构建任务。
Pitching Loader
Pitching Loader 是 Webpack Loader 机制中的一个特殊阶段。除了正常的 normal 执行阶段(从右到左),Loader 还有一个 pitching 阶段(从左到右),允许 Loader 在文件被处理前进行拦截。如果某个 Loader 的 pitch 方法返回了值,后续 Loader 的 normal 执行会被跳过。Pitching Loader 常用于需要在数据处理前进行预判断或缓存检查的场景。本工具主要模拟 normal 阶段的执行过程。
WebP支持检测 - 浏览器兼容性测试
通过检查Canvas toDataURL或加载测试图,判断当前浏览器是否支持WebP格式。
Canvas 文字适配器 - 测量文本宽度并自动缩放
输入文本和最大宽度,计算在 Canvas 上绘制所需字体大小,生成自适应的 fillText 代码。
PDF页数统计 - 快速前端获取页数
上传PDF文件,利用pdf.js快速显示文档总页数,无需打开文件。
gRPC-Web 反射调用工具 - 浏览器端RPC测试
通过gRPC-Web反射协议列出服务方法,并构造请求在浏览器直接调用gRPC后端,简化微服务调试。
大文本文件分段读取器 - FileReader分块
使用FileReader.slice逐段读取大型文本文件的前几行或随机位置,避免内存溢出。
上传文件获取MIME类型 - 前端检测
选择本地文件,通过浏览器File API获取其MIME类型、大小及最后修改时间。
网页资源瀑布图展示 - 请求时间线和大小
利用Performance API绘制当前页面所有资源的加载时间线和文件大小瀑布图。
近距离传感器测试 - 设备接近检测前端API
使用Proximity Sensor API检测设备屏幕附近是否有物体靠近,显示距离与状态。
Canvas触摸绘画测试 - 多点触控支持检测
在Canvas上使用触摸绘制线条,检验设备的触摸点数量和压力感应支持,辅助调试。
Selection API 浏览器 - 获取选中文本与位置信息
选中页面文字后,显示选区的起止偏移、矩形边界、包含节点等详细信息。
儒略日转换器 - 公历与儒略日互转
将任意公历日期转换为儒略日数,或从儒略日反推公历日期,用于天文计算。
Webpack 打包分析器 - stats.json 可视化
上传 webpack 的 stats.json,生成交互式树状图、模块大小排名,辅助优化构建体积。
字节序转换工具 - 大端与小端互转
输入十六进制或二进制数据,切换查看大端序和小端序下的数值解释。
立体声左右声道测试 - 音频试听辨别
播放左声道/右声道单独音频,检验耳机或音响接线。
脉轮能量平衡自测 - 对应问题解析过旺/弱
回答关于身心灵各层面的问题,评估七大脉轮能量是否平衡。
步行配速转换 - 分钟/公里与分钟/英里互换
输入每公里所需分钟数,自动换算为每英里配速或速度。
色觉辨认测试图 - 石原假同色图挑战
显示一系列石原色觉测试图,框选所见数字,初步判断色觉异常。
移调乐器转换器 - 记谱音与实际音高
选择乐器类型(如降B小号),输入记谱音,显示演奏的实际音高及钢琴对照。
标准银河字母转换 - Minecraft附魔台
将普通英文转换为《我的世界》中附魔台显示的标准银河字母(Standard Galactic Alphabet)。
MIDI转CSV转换器 - 提取音符数据
上传.mid文件,将里面的音符事件(时间、音高、力度)提取为CSV表格。
智能引号转换器 - 直引号与弯引号互转
将文本中的直引号(' ') 自动转换为排版正确的弯引号 (“ ”),适合文章美化。
交通标志识别测试 - 国际路标小测验
显示交通标志图片,从多个选项中选择正确含义,帮助备考驾照理论。
盲点测试 - 发现视觉盲点位置
通过移动圆点帮助找到眼球盲点位置,演示视神经盘效应。
中文竖排转换工具 - 横排转竖排显示
将横向中文文本转换为传统的从右至左竖排格式,可复制或导出为图片。
视力表展示 - Snellen/E图表在线
全屏显示标准视力表(E字或C字),可自动随机生成方向,辅助粗略视力检查。
主视眼测试 - 简单对齐判断
通过三角形手势对准屏幕物体,闭左右眼判断哪只眼是主视眼。
环绕声测试工具 - 移动声源空间定位
使用HRTF处理让声源像在头部周围旋转,检查立体声/环绕声设备空间感受。
数字记忆广度测试 - 递增序列复述
系统依次显示一组数字,听后要求按顺序或逆序输入,长度逐渐增加,测试工作记忆容量。
持续注意力测试 - CPT连续表现测验
屏幕快速闪出字母,要求看到特定字母时立即按键,评估持续注意力和冲动控制。
Stroop效应测试 - 颜色字义与颜色冲突
显示用颜色墨水书写的颜色名称,但字义与墨水色不一致,要求忽略字义报告墨水色,测试反应抑制。
UD5工具箱