EnvBoard v2.0.0 正式发布:PWA 离线可用、中英双语、CLI 三连,320 用例护航
EnvBoard v2.0.0 正式发布PWA 离线可用、中英双语、CLI 三连320 用例护航从 v1.0.0 到 v2.0.0EnvBoard 又走了 6 个版本。这一版没有继续堆解析格式而是把开发重心放在了**「让工具更可用」**上PWA 离线安装、全站中英双语、CLI 补齐 diff / sync / init以及一套从组件到 E2E 的测试体系本文记录 v2.0.0 的开发过程与设计取舍——包括「为什么 PWA 和 i18n 都选择零依赖手写」⭐ 项目信息GitHub 仓库yyyhhh0317/EnvBoard在线 Demohttps://yyyhhh0317.github.io/EnvBoard/v2.0.0 ReleaseRelease NotesStar ⭐觉得有用请点一下你的 Star 是持续更新的动力️ 版本演进回顾从 v1.0.0 到 v2.0.0EnvBoard 一共经历了 6 个版本版本核心功能主要定位v1.0.0搜索替换 测试基线 163 用例 关键 Bug 修复稳定发布v1.1.0撤销 / 重做 会话持久化 无障碍a11y编辑器体验v1.2.0密钥泄露检测 导出脱敏安全v1.3.0ini / properties / TOML 解析 任意文件对比 Schema 校验格式扩展v1.4.0依赖漏洞检查 依赖关系图 Monorepo 多包扫描依赖管理v2.0.0PWA 离线可安装 中英双语 CLI 增强 测试体系升级平台化2.0 的定位很明确把「能用」升级成「好用」——离线也能用、老外也能用、命令行也能用。✨ 新功能一PWA 离线可安装痛点EnvBoard 是部署在 GitHub Pages 上的纯前端工具。在线时一切正常但——出差路上网络不稳打开工具就是白屏想把它当本地工具用每次都要开浏览器敲网址浏览器收藏夹里几十个工具找不到它PWA 正好解决这两件事离线可用可安装到桌面独立窗口像原生应用一样启动。一个重要的设计决策手写 Service Worker当时第一反应是引入vite-plugin-pwa一步到位。但这个项目有个坚持了很久的原则——Web 端零运行时依赖除 React / Vite / Tailwind 框架本身。vite-plugin-pwa 本质上是帮你生成 Service Worker 模板对于 EnvBoard 这种单页应用手写一个也就 60 行。于是我选择了手写// public/sw.js节选constCACHEenvboard-v2.0.0constPRECACHE[/,/index.html,/manifest.webmanifest,...icons]self.addEventListener(install,(e){e.waitUntil(caches.open(CACHE).then((c)c.addAll(PRECACHE)))self.skipWaiting()})self.addEventListener(fetch,(e){const{request}econsturlnewURL(request.url)if(request.modenavigate){// HTML网络优先离线回退 index.htmlSPA 路由兜底e.respondWith(fetch(request).catch(()caches.match(/index.html)))}elseif(sameOrigin(url)){// 静态资源缓存优先e.respondWith(caches.match(request).then((hit)hit||fetchAndCache(request)))}})几个取舍设计点选择原因缓存策略HTML 网络优先、资源缓存优先、离线回退 index.html既保证更新及时又保证离线可用缓存键带版本号envboard-v2.0.0发版后旧缓存自动清理不残留脏数据注册时机仅生产环境注册开发时 HMR 不受 Service Worker 干扰图标scripts/gen_pwa_icons.pyPillow生成 192/512含 maskable一键生成不依赖在线图标工具安装后Chrome 地址栏会出现安装按钮点击即可像原生应用一样独立窗口启动。✨ 新功能二中英双语i18n痛点EnvBoard 一开始只有中文界面。中文没问题但GitHub 上的海外用户看不懂按钮演示 demo 给英文团队看时还得现场翻译开源项目的 README 是英文界面是中文割裂零依赖自研同样没有引入react-i18next之类的库而是自己写了一个极简方案src/i18n/核心就三件事扁平字典zh.ts/en.ts两个文件key 按组件分区命名header.title/table.searchPlaceholder插值t(key, params)支持{name}占位符替换回退链当前语言 → 中文 → key 本身缺翻译也不白屏// src/i18n/zh.ts节选exportdefault{header.switchLang:切换语言,table.searchPlaceholder:搜索变量名 / 值 / 注释…,secretScan.total:检测到 {count} 个疑似泄露的密钥,}// 使用const{t}useI18n()button title{t(header.switchLang)}{t(header.switchLang)}/button语言选择会持久化到localStorage并同步html lang属性利于读屏与 SEO首次访问时自动探测本地记忆 浏览器语言英文系统默认英文 中文。这一轮一共抽取了19 个组件 App 共约 300 个文案 key连「撤销历史描述」「环境预设标签」开发 / 测试 / 预发布 / 生产这种细节都做了双语映射。✨ 新功能三CLI 增补 diff / sync / initv0.4.0 给 CLI 打下了基础scan / status / install / uninstall / edit。这版补齐了日常最常做的三件事命令说明典型场景envboard diff对比 .env 与 .env.example输出一致 / 缺失 / 多余 / 空值统计与明细上线前检查环境变量有没有漏配envboard sync把 example 里缺失的 key 追加到 .env不覆盖已有值-n预演同事新增了配置项一键同步到本地envboard init从 example 生成 .env或从 .env 反推模板值清空、注释保留新成员 clone 项目后 30 秒初始化环境# 新同事初始化环境envboard init# .env.example → .env# 上线前检查配置是否齐全envboarddiff-e.env.example-t.env# 同步新增的配置项先预演再执行envboardsync-nenvboardsyncinit的「从 .env 反推模板」是这轮最实用的细节老项目通常只有.env没有.env.example反推时值清空、注释保留生成的模板既安全不会带出真实密钥又保留了每个变量的说明。✨ 新功能四测试体系升级组件测试 E2E之前 EnvBoard 只有纯函数层的单测320 个用例。这轮把测试向上补了两层组件层测试22 例用testing-library/react覆盖核心组件的交互逻辑组件覆盖点Header品牌展示、主题切换、语言切换EnvImport粘贴解析、文件导入EnvTable渲染、过滤、增删变量、敏感值显隐EnvEditor保存 / 取消 / 禁用态SecretScanPanel泄露检测、单条 / 全部清除E2E 冒烟Playwrightplaywright.config.tse2e/smoke.spec.ts用真实浏览器跑通「导入 → 编辑 → 语言切换」主流程test(导入 .env 并完成编辑,async({page}){awaitpage.goto(/)awaitpage.getByText(粘贴内容).click()// ... 粘贴、断言表格、编辑变量、切换语言})本地运行npmi-Dplaywright/test npx playwrightinstallchromium npx playwrighttest 这轮顺手修的 BugBug 1TemplatePicker 的 map 参数与 i18n 的t命名冲突i18n 引入后组件里到处是t(xxx)。TemplatePicker 里恰好有一个templates.map((t) ...)——t被模板元素遮蔽i18n 的t在回调里全部失效。修复很简单map 参数改名tpl但这类「命名空间污染」在接入 i18n 时很典型值得注意。Bug 2EnvEditor 用了错误的弹窗 hook之前的useModal重构遗留了一个问题EnvEditor 里调用了不存在的 hook 名useModal→ 应为useModalFocus(open, close)类型检查没拦住的隐性错误。修正后弹窗的焦点管理恢复正常。 最终交付数据指标数值测试用例数32032 个测试文件全部通过组件测试22 例5 个核心组件E2E 冒烟4 用例Playwright Chromiumi18n中英双语约 300 个文案 keyCLI 命令8 个scan / status / install / uninstall / edit / diff / sync / initPWA可安装 离线可用手写 Service Worker运行时依赖0除 React / Vite / Tailwind 框架本身 本地体验gitclone https://github.com/yyyhhh0317/EnvBoard.gitcdEnvBoardnpminstallnpmrun dev# http://localhost:5173npmruntest# 跑 320 个测试npmrun build# 构建生产版本含 PWA体验清单离线打开 在线 Demo → 按 F12 切到离线 → 刷新页面依然可用安装地址栏右侧点「安装」按钮独立窗口启动双语右上角 中/EN 一键切换刷新后保持CLIcd cli npm install然后npx tsx src/index.ts init -f .env.example️ 下一步v2.0.0 之后的方向初步考虑CLI 文档完善diff / sync / init 的 README 使用说明更多导出格式Docker env file、Kubernetes ConfigMap性能优化大文件1000 变量的虚拟滚动CI 集成 E2EPlaywright 接入 GitHub Actions具体优先级看 Issue 反馈。写在最后这版最想分享的体会是「零依赖」不是洁癖而是可控性。手写 Service Worker 和 i18n 方案确实比引库多花了一些调试时间但换来的是打包产物小整包 ~330 KB无翻译库、无 PWA 插件开销升级不慌不依赖第三方库的 breaking change每一行都能看懂出了问题能自己修如果你的工具也在 GitHub Pages 上建议试试 PWA——60 行 Service Worker换来的是「网络不好也能用」的体验ROI 极高。欢迎Star ⭐IssuePR三件套。如果你有想要的功能或遇到的 Bug直接发 Issue 就行每一条我都会回复。

相关新闻

NSDBO算法在微电网优化调度中的应用与Matlab实现

NSDBO算法在微电网优化调度中的应用与Matlab实现

1. 项目概述:微电网优化调度与NSDBO算法 微电网作为分布式能源系统的核心单元,其优化调度直接关系到供电可靠性和经济性。传统调度方法在处理风光出力不确定性、负荷波动性等多目标优化问题时往往捉襟见肘。我们团队提出的基于非支配排序蜣螂优化算法&am…

2026/8/9 3:00:03 阅读更多 →
Python数据质量实战:从矛盾点探查到自动化监控

Python数据质量实战:从矛盾点探查到自动化监控

1. 背景与核心概念:数据背后的“矛盾”意味着什么?在数据驱动的时代,无论是数据分析师、产品经理还是后端开发者,我们每天都在与海量数据打交道。当我们拿到一份看似权威的宏观数据报告,例如“全国案件年增数据”&…

2026/8/9 3:00:03 阅读更多 →
Verity概念解析与Spring Boot验证模块实战指南

Verity概念解析与Spring Boot验证模块实战指南

最近在开发一个需要验证用户输入的场景时,发现很多开发者对verity这个单词感到困惑。它看起来像verify,但又不太一样,网上资料也多是零散的讨论。其实,verity在技术领域,尤其是在一些框架、库或特定上下文中&#xff0…

2026/8/9 3:00:03 阅读更多 →

最新新闻

MyBatis Plus核心功能与最佳实践解析

MyBatis Plus核心功能与最佳实践解析

1. MyBatis Plus核心价值解析作为MyBatis的增强工具包,MyBatis Plus在保留原生MyBatis所有特性的基础上,通过内置通用Mapper和Service,显著减少了约80%的样板代码量。我在实际企业级项目开发中发现,团队采用MyBatis Plus后&#x…

2026/8/9 3:50:40 阅读更多 →
电力系统鲁棒状态估计:改进EKF与Matlab实现

电力系统鲁棒状态估计:改进EKF与Matlab实现

1. 电力系统动态状态估计的核心挑战电力系统动态状态估计是现代电网运行控制的基础环节,其核心任务是通过有限量测数据实时重构系统运行状态。传统方法面临三个主要痛点:量测噪声的非高斯特性、系统参数不确定性以及突变工况下的跟踪滞后。我在参与某区域…

2026/8/9 3:50:40 阅读更多 →
本地PV、PC、PVC等材料炼油该怎么选

本地PV、PC、PVC等材料炼油该怎么选

在选择本地PV材料、PC材料、PVC材料等用于炼油时,要考虑多方面因素。PV材料一般指光伏材料,常用于太阳能电池板等领域;PC材料是聚碳酸酯,具有高强度和透明性;PVC材料则是聚氯乙烯,应用广泛。从性能上看&…

2026/8/9 3:50:40 阅读更多 →
英语句型完全教程(从简单到复杂)

英语句型完全教程(从简单到复杂)

📐 英语句型完全教程(从简单到复杂) 一、为什么学句型? 词性解决“单词是什么”,成分解决“单词在句中的职位”,而句型解决的是“句子怎么组合”。 掌握句型,你就能: 看懂任何长度的…

2026/8/9 3:50:40 阅读更多 →
AWS 监控、告警和日志分析,应该从哪些服务开始?

AWS 监控、告警和日志分析,应该从哪些服务开始?

业务迁上 AWS 后,EC2、Lambda、RDS、API Gateway、DynamoDB 等服务交错运行,资源数量迅速增长。运维和开发团队最关心资源是否健康、何时扩容、错误日志如何定位、安全事件怎样及时发现。这些需求都指向 AWS 可观测性的三大核心:监控、告警和…

2026/8/9 3:50:39 阅读更多 →
Claude Code Extension Stack架构解析与开发实践

Claude Code Extension Stack架构解析与开发实践

1. Claude Code Extension Stack 技术架构解析 Claude Code Extension Stack 是一套面向AI辅助编程的扩展工具集,其核心组件包括CLAUDE.md规范文档、Skills技能库、插件系统和MCP管理平台。这套系统最初由Anthropic团队为Claude AI设计,现已成为开发者社…

2026/8/9 3:49:39 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/8 17:02:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/8 17:02:44 阅读更多 →