前言·项目开发背景

本人长期热衷于各类小型实用工具自研,初衷是打造一套一次开发、全终端复用、免频繁更新的聚合工具箱,收拢日常开发、办公用到的IP查询、时间转换、进制换算、科学计算器、单位转换等零散小工具。

在前期大量使用原生HTML+CSS+JS裸写工具的落地过程中,接连遭遇原生前端架构与生俱来的各类痛点,也是推动本工具箱选用Vue3框架、制定本地+云端四层分类架构、多容器差异化打包方案的核心诱因:

  1. AI协作编码痛点:原生单HTML大文件开发模式下,AI习惯性将样式、逻辑、页面全部堆砌在单个文件,无组件化拆分;迭代新增功能、微调逻辑时,要么代码超长超出AI输入输出字符限制,要么AI无差别篡改无关业务代码;手动拆分HTML/CSS/JS为三份独立文件后,改动一项功能仍需全量上传三份源码,问题未根治;若进一步拆分子组件,仅上传局部代码给AI,AI缺失全局引用上下文,自动补全冗余代码、重写已有工具逻辑,开发效率极低。
  2. 原生项目工程化痛点:无标准化目录与组件约束,多工具并存时JS、CSS引用关系杂乱无章;第三方依赖只能依赖CDN引入,离线无网络环境下工具直接失效;手动本地化第三方库繁琐无序,无包管理器统一管控依赖,多个复用型工具无法共用公共依赖代码,冗余代码泛滥。
  3. 多端打包与权限分化痛点:部分轻量工具仅需浏览器LocalStorage/SessionStorage缓存即可落地持久化,但串口调试、本地文件管理器等工具需要操作系统底层文件、硬件API调用权限;纯浏览器套壳打包无法获取系统权限,不同打包内核(Electron、移动端打包框架)系统API调用语法不统一,原生代码跨端改造成本极高;衍生三种数据存储方案:浏览器前端缓存、打包容器内置系统API、桌面端内嵌本地微型后端,需要架构提前预留三种方案接入入口。
  4. 版本迭代痛点:传统打包软件所有工具页面全部内置安装包,新增工具、修复BUG必须下发客户端安装包更新,用户需要反复下载重装,无法做到免更新在线扩容工具库。

基于以上落地踩坑问题,确定核心目标:依托Vue3标准化工程架构搭建前端主体,划分四层工具分类实现本地/云端资源分离,依托多容器打包实现一套源码全平台分发,区分三种数据持久化方案适配不同工具场景,最终产出可无缝打包Web/H5/小程序/鸿蒙/安卓/iOS/Windows/Linux/Mac的万能工具箱基座。

一、开发前期遇到的核心阻碍与对应解决思路

阻碍1:原生单文件开发无法适配AI协同迭代

问题详情
原生HTML全糅合写法导致单文件体积庞大,AI改代码存在超限、乱改无关代码问题;多级拆分零散文件后,局部传参代码缺失项目上下文,AI重复造轮子重构已有代码,大量浪费开发时间。
解决思路
主体项目采用Vue3工程化规范开发,统一目录分层:公共组件、工具业务页面、全局样式、公共工具函数、第三方依赖完全分目录存放;单个工具功能收拢在独立Vue单文件组件中,迭代修改时仅向AI提交当前修改对应的1~2个业务组件源码,全局公共依赖、底层路由、框架配置文件固定不动不参与AI提交;AI仅聚焦当前工具逻辑修改,规避全量代码上传、乱改底层代码的问题。

阻碍2:原生无包管理,第三方依赖管理混乱、离线失效

问题详情
原生项目无npm包管理,第三方工具库全部CDN在线引入,断网工具失效;本地化依赖需要逐个手动下载JS/CSS文件,多工具共用依赖重复存放,项目臃肿。
解决思路
Vue3+Vite工程化依托npm统一管理所有第三方依赖,公共依赖全局安装打包进项目资源,打包后全离线可用;区分全局公共依赖与单个工具私有依赖,私有依赖按需异步引入,精简打包体积。

阻碍3:工具迭代必须更新安装包,无法在线新增功能

问题详情
全部工具内置客户端安装包,新增工具、优化功能必须发布新版安装包,用户重装升级,维护成本高。
解决思路
设计本地+云端双层资源架构、四大工具分类,本地工具固化打包进安装包,云端工具页面托管至自建服务器/CDN;客户端无需更新,联网即可动态拉取云端新增工具页面,实现热扩容、免客户端升级。

阻碍4:跨多端打包逻辑混乱,原生代码平台适配成本高

问题详情
原生代码无统一适配规范,桌面端Electron、移动端UniApp X、小程序渲染环境不一致,多端需要多套源码,复用率极低;部分工具需要系统底层权限,浏览器沙箱限制无法调用硬件/本地文件API。
解决思路
主体页面统一Vue3开发,遵循一套代码多规范标准;Web/H5直接部署上线,移动端交由UniApp X容器编译打包、桌面端交由Electron/Qt容器套壳运行,平台独有功能单独抽离平台适配层代码,主体业务代码100%复用;架构预留三种数据存储接口,按需接入前端缓存、容器系统API、内嵌本地后端三种持久化方案。

阻碍5:多终端展示逻辑差异化(移动端四类分类、桌面端两类分类)

问题详情
不同产品形态(小程序、桌面软件、浏览器网页)产品逻辑不同:小程序无法自由内置本地页面、桌面端不需要区分本地/云端存储逻辑,原生开发无法自动做分类视图切换。
解决思路
前端增加环境识别模块,运行时自动识别当前运行环境(Web/小程序/安卓/桌面客户端),根据环境配置动态渲染分类菜单,实现移动端展示四大分类、桌面&网页合并为离线/联网两大分类的自动切换。

二、整体项目架构落地方案

(一)技术选型方案:Vue3 + Vite 作为项目底层基座,少量原生HTML混合补充

选型理由
  1. 适配AI协同开发:Vue单文件组件化规范,功能颗粒度拆分合理,一个工具对应一个页面组件,修改仅上传对应组件,完美解决原生大文件AI改码乱象;项目目录标准化,公共方法、全局配置、样式分离,AI可清晰区分业务代码与底层公共代码,减少无关修改。
  2. 依赖工程化管理:Vite+npm统一管控所有第三方类库,公共依赖全局引入,离线打包后依赖内嵌资源,告别CDN离线失效问题;多个复用工具共享公共依赖,减少项目冗余代码。
  3. 全端兼容开发标准统一:Vue语法可同时兼容UniApp X、Electron渲染规范,主体业务页面代码不用多端重写,仅平台专属逻辑抽离独立适配文件,最大化代码复用率;少量原生HTML用于极简小型工具页面,兼容特殊轻量化场景。
  4. 完善前端路由体系:依托Vue Router搭建无刷新前端路由,实现首页分类→工具页面平滑跳转,统一全端页面跳转规则,适配浏览器、小程序、桌面客户端路由规范。

(二)四大工具分类架构落地(核心分层设计,区分存储位置+联网依赖)

页面存放位置(本地打包/云端CDN)+运行是否需要联网两个维度划分四类工具,从根源解决版本迭代与离线可用性矛盾:

  1. 本地离线分类
    页面源码直接打包嵌入客户端安装包/项目资源内,全部运算逻辑在前端本地完成,无任何接口依赖,全场景断网可用;适合计算器、进制转换、时间戳转换等纯算法类工具。

存储方案:工具数据量小采用浏览器LocalStorage前端缓存持久化;若为桌面端需要本地大文件存储、系统硬件交互(串口、本地文件浏览),启用Electron容器原生系统API,复杂本地业务可对接内嵌微型本地后端。

  1. 本地联网分类
    页面同样内置打包进本地资源,页面本体无法在线更新,功能运行依赖远端API接口,断网无法使用;如公网IP详细地理位置查询、实时汇率换算等依赖在线数据源工具。

数据存储:配置信息本地前端缓存,业务运行数据依托远端接口,无需系统底层权限。

  1. 云端离线分类
    页面资源存放自建服务器/CDN,首次打开客户端需要联网拉取页面资源;页面加载完成后自动缓存至浏览器/客户端本地,缓存完成后断网即可全离线使用,运算逻辑前端本地化;新增此类工具仅需在云端部署页面,用户不用更新客户端。

缓存实现:依托浏览器CacheStorage+LocalStorage做页面静态资源缓存,桌面端复用Electron本地文件缓存机制。

  1. 云端联网分类
    页面资源托管云端CDN,每次使用需要联网加载页面+请求后端接口,全程依赖网络,无离线运行能力;实时行情、在线数据解析类工具适用,新增工具云端部署即可全用户生效。
多终端分类视图自动适配规则(前端环境自动识别实现)
  1. 移动端(安卓/iOS/鸿蒙/快应用/UniApp小程序):完整渲染四大分类菜单(本地离线、本地联网、云端离线、云端联网);
    • 小程序特殊逻辑:受平台限制无真正本地打包页面,原「本地分类」页面部署在小程序后台资源,页面支持小程序自带缓存;「云端分类」沿用自建CDN资源。
  2. 桌面端(Windows/Linux/Mac,Electron/Qt打包)、Web网页、移动端H5:前端自动合并分类,本地离线+云端离线=离线工具分类,本地联网+云端联网=联网工具分类,页面仅展示两大菜单,简化桌面端使用体验。

(三)三种数据持久化&系统权限接入方案(按工具场景按需选用)

结合工具体量、运行平台、权限需求,三种方案架构全部预留统一调用接口,上层业务无需关心底层实现:

  1. 方案1:前端浏览器缓存(LocalStorage/IndexedDB)
    适用场景:所有轻量小工具、仅需要少量配置存储、无系统文件/硬件调用需求,全平台通用(网页/移动端/桌面端全部兼容);
    优势:零额外依赖、开箱即用、无需后端,符合即开即用的工具定位;局限:存储容量受限、无法访问操作系统底层资源。
  2. 方案2:打包容器原生系统API
    适用场景:打包为桌面客户端、移动端,需要访问本地磁盘文件、串口、硬件外设等系统能力的工具(本地文件管理器、串口调试助手);
    实现逻辑:Electron/ UniApp X容器各自封装系统API,前端通过统一封装的适配方法调用,底层根据运行环境自动分发至对应容器接口;
    局限:桌面与移动端API语法存在差异,平台独有逻辑单独封装,主体业务代码不变。
  3. 方案3:桌面端内嵌本地微型后端
    适用场景:仅Windows/Linux/Mac桌面客户端,需要大量本地文件读写、复杂硬件交互、数据库存储,且后续可能拆分远程服务的工具;
    实现逻辑:打包包内附带轻量化后端程序,客户端启动时自动在本机localhost启动后端服务,前端通过本地http请求和后端交互获取系统权限;
    优势:后端跨系统成熟生态完善,统一一套后端代码适配全桌面系统,前端不用区分系统API差异,后期需要改成云端服务仅需修改请求地址。

(四)多容器全平台打包落地方案

项目主体为Vue3前端源码,一套源码依托三类打包容器实现全终端分发,主体业务代码完全复用,平台差异化代码单独抽离文件夹隔离

  1. Web+H5端:项目直接打包静态资源,部署至服务器/CDN,浏览器、手机浏览器直接访问,自动响应式布局适配所有屏幕;
  2. 移动端(安卓/iOS/鸿蒙/小程序/快应用):将Vue源码导入UniApp X工程,依托UniApp编译规则一键打包各类移动端安装包与小程序代码;小程序差异化逻辑单独配置,不污染主体工具代码;
  3. 桌面端(Windows/Linux/Mac)
    • 常规工具选用Electron套壳打包,内置前端页面,按需启用Electron系统API;
    • 重度系统交互工具采用Qt+内嵌本地后端打包,前端页面嵌入Qt容器,由内置后端承接系统底层操作。

(五)基础功能落地细则

  1. 首页分类系统:前端根据运行环境自动渲染分类菜单,点击分类跳转对应工具列表页,列表动态渲染本地+云端全部工具;云端工具启动时异步请求CDN目录接口,自动拉取云端新增工具列表;
  2. 默认内置基础工具:IP查询、时间戳时区转换、科学计算器、多维度单位换算全部归类为本地离线工具,打包内置项目资源,全场景离线可用;
  3. 离线缓存引擎:单独封装全局缓存工具类,管控云端离线页面的资源缓存、过期清理,用户首次加载云端页面后自动落地缓存,断网自动读取缓存资源;
  4. 响应式全局布局:全局采用自适应布局方案,一套页面自动适配手机、平板、桌面显示器尺寸,不用为不同屏幕单独开发页面。

三、项目长期扩展与迭代规划

  1. 工具新增扩展
  • 本地工具:新增Vue页面放入本地资源目录,重新打包客户端即可;
  • 云端工具:在CDN/服务器部署页面+录入工具目录配置,全平台所有用户无需更新软件,打开软件自动加载新工具,实现零更新扩容。
  1. 平台专属工具扩展
    各平台独有功能(如Windows注册表工具、安卓文件权限工具)单独新建平台专属目录,通过环境判断动态挂载至工具箱列表,不影响其他端编译打包。
  2. 存储方案灵活切换
    同一工具可配置切换存储模式,开发调试用前端缓存,打包桌面正式版按需切换容器API或内嵌后端存储,架构预留配置开关。

四、最终总结

放弃原生前端零散开发模式、选用Vue3工程化架构是解决前期所有开发痛点的最优解:

  1. 解决AI协作难题:组件化拆分代码,精准局部交付AI修改,规避超大文件、乱改代码问题;
  2. 解决依赖与离线难题:npm统一依赖管理,告别CDN离线失效;
  3. 解决版本更新难题:四层本地+云端分类,云端工具免客户端更新热更;
  4. 解决全端打包难题:一套Vue源码对接UniApp X/Electron/Qt多容器,全平台复用主体代码;
  5. 解决系统权限难题:三级存储架构按需匹配不同工具的持久化、系统API需求,兼顾轻量化前端存储与重度系统交互开发。

整套架构实现一次开发、全端部署、灵活迭代、离线联网双适配,完美契合个人批量自研小工具、多端分发、低成本维护的开发需求。

三种「前端(Vue/原生HTML)+本地内嵌后端、桌面打包EXE」方案选型对比&最终选型结论

适配我的场景:万能工具箱桌面端、本地内嵌后端、需要系统文件/串口等系统API、单EXE分发、配合Vue工具箱前端、兼顾后续可改为远程服务、个人小工具开发、AI辅助写代码

三个方案:
A:Vue+Node.js + Electron打包EXE
B:Vue+Python Flask + Qt(PyQt/PySide6)打包EXE
C:Vue+SpringBoot + WebView+JDK捆绑打包

最终优先级:B>A>C,首选【Python Flask+Qt】方案,次选Electron+Node,Java方案不推荐用于我的工具箱项目

一、分项拆解三种方案优缺点、适配我的工具箱场景

方案A:Vue + NodeJS + Electron(Node后端+Electron壳)

优势
  1. 前后端同JS生态,前端Vue开发者语法统一,AI生成JS代码兼容性最好;
  2. Electron天然内置Chromium浏览器内核,不用额外配置WebView,Vue页面直接载入;
  3. 可二选一架构:
    • 架构1:Electron主进程做系统API,不用独立Node后端;
    • 架构2:Electron启动时自动拉起内嵌Node服务(localhost本地接口),前端Vue请求本地接口,符合我「内置本地后端」设计;
  4. 打包electron-builder一键打包Windows/Linux/Mac单EXE,开箱即用。
短板(对我痛点很关键)
  1. Node对串口、底层硬件、复杂本地文件、系统驱动级API生态弱于Python;串口、外设、系统目录操作第三方库参差不齐;
  2. 打包后EXE体积偏大(基础包普遍80MB+),我的是一堆小工具聚合,轻量化劣势;
  3. Electron沙箱限制,部分系统权限需要特殊配置。
适用场景:仅文件读写、简单本地存储,不需要串口/硬件交互的轻量工具箱

方案B:Vue+Flask + PySide6/Qt(首选方案,完美匹配我的需求)

Qt自带WebEngine浏览器内核,直接加载打包后的Vue静态页面,无需额外WebView壳,Python做本地后端

核心优势(全贴合我的工具箱诉求)
  1. Python系统生态天花板:串口(pyserial)、本地文件、系统进程、硬件读写、数据库、系统注册表、外设调用库极其完善,正是我串口助手、本地文件管理器这类工具刚需;
  2. Flask轻量化,启动本地localhost后端,Vue前端http请求本地接口,后续只改接口地址就能一键转云端服务,契合我前期设计;
  3. Qt自带WebEngine,Vue打包dist丢进项目资源,Qt启动→自动启Flask后台→WebEngine加载本地前端,架构干净;
  4. PyInstaller打包单EXE,相比Electron体积更小,精简可压到20~40MB,小工具分发友好;
  5. AI生成Python/JS代码成熟度高,我用AI批量开发工具成本最低;
  6. 跨Windows/Mac/Linux打包一套代码,适配全桌面端;
  7. 可灵活拆分:简单工具只用前端缓存,重度系统工具走Python后端接管系统API,完美匹配我的三种存储方案。
小缺点

需要同时维护前端Vue代码+Python后端代码,双语言,但我的架构本身就是前后端分离设计,本来就要两套代码。

适用场景:我的工具箱主力方案,包含串口、文件管理、系统交互、多工具聚合全场景

方案C:Vue+SpringBoot+捆绑JDK+WebView(不推荐)

硬伤(完全不匹配个人小工具开发)
  1. JDK打包体积巨大,捆绑JRE后单EXE普遍200MB起步,一堆小工具聚合极其臃肿;
  2. Java对串口、桌面系统轻量API生态笨重,依赖庞大,开发小工具冗余度极高;
  3. 打包复杂:需要WebView容器+内嵌SpringBoot+捆绑JDK,打包配置繁琐,AI生成代码效率远低于Python/Node;
  4. 启动速度慢,SpringBoot启动耗时明显高于Flask/Node,小工具追求即开即用体验很差。
仅适用:大型企业级后台客户端,个人工具箱直接排除。

二、结合我的项目架构落地细则(Qt+Flask最优落地规范)

标准运行流程

  1. Vue项目打包生成dist静态资源(本地离线/云端分离架构不变);
  2. Python+PySide6程序:
    • 程序启动:自动在本机随机端口启动Flask后端服务;
    • Qt内置WebEngine组件加载 http://127.0.0.1:xxxx 访问前端页面;
  3. 前端Vue所有系统相关请求(文件、串口、本地存储)调用本地Flask接口,普通计算逻辑前端本地执行;
  4. PyInstaller一键打包全部资源(Vue dist+Python代码+依赖)→单个exe,用户双击直接运行,无需预装Python/浏览器。

备选降级方案(部分简单工具不用Qt)

轻量无硬件交互工具:改用Electron+NodeJS,快速开发打包,两种技术在我的工具箱项目里可以混用

  • 系统交互类工具:统一Qt+Python Flask
  • 纯前端计算小工具:Electron+Node

三、针对我之前四大分类架构的适配

  1. 本地离线工具:计算全在Vue前端,需要本地持久化走前端IndexedDB;
  2. 本地联网工具:前端请求公网API,配置信息存在Python后端本地文件;
  3. 云端离线/云端联网:Vue动态拉取CDN云端页面,缓存逻辑由Python后端接管本地缓存目录,比浏览器缓存管控更灵活。

四、总结落地建议

  1. 主力主力:统一采用【Vue + Flask + PySide6(Qt)】全栈方案,作为桌面端需要系统API工具的标准模板
  2. 辅助备选:Electron+NodeJS,用于纯离线、无硬件交互的简易小工具,快速迭代
  3. 彻底放弃Java+SpringBoot方案,不纳入工具箱技术选型。
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐