前段时间,我结识了一位前端工程师「1024小神」。他的“战友”是一台 MacBook Air M3(8G+256GB),原本用来开发网页、小程序,绰绰有余。

然而,他的噩梦始于老板轻描淡写的一个需求。

  • 某天,老板让他开发 Windows 软件。他二话没说,装了虚拟机、Win11、Flutter...硬盘瞬间少了 100GB。
  • 一个月后,老板又让他开发 iPhone 和 iWatch 程序。他再次接下所有,安装了 Xcode、SwiftUI...硬盘再减 128GB。
  • 接下来,还有用 Cocos 开发直播间小游戏、把 CRM 系统做成跨平台应用等各种需求接踵而至。

直到那天,小神的电脑屏幕上弹出一个冰冷的提示——“您的磁盘空间不足”。

这台曾经与他并肩作战的 MacBook Air,如今仅剩 300M 空间。此刻它像一个被塞满的行囊,发出了无声的悲鸣。

那个深夜,小神望着屏幕,陷入了沉思。一个前端工程师,为何要活成一个“八爪鱼”,被迫装上所有平台的开发环境?难道就没有一种更优雅、更轻量的方式,去实现所谓的“跨平台”吗?

他试图在开源社区中寻求破解之道,但始终没有找到完全契合需求的项目。如果换作是你,面对这样的困境,你会怎么做?

如果前方没路,那就走出一条路来。

在小神决定自己动手,打造解决方案的那一刻起,他的开源故事便就此拉开序幕。

一、PakePlus 的诞生

如果能将打包和编译放到云端,借助 GitHub Actions 的免费资源,是不是就能实现一个人人可用、免费且轻巧的“云打包”工具呢?

基于这个想法,PakePlus 应运而生。

GitHub 地址:github.com/Sjj1024/PakePlus

PakePlus 是一款基于 Rust 和 Tauri 构建的开源工具,能够将任意网页或前端项目(如 Vue、React 等)快速转换为轻量级的桌面应用和移动应用,支持 Windows、Linux、macOS、Android 和 iOS 等平台

1.1 快速开始

不管是程序员,还是仅仅想把常用网站桌面化的普通用户,都无需在本地安装任何复杂的环境,整个过程十分简单。

  1. 提交项目:输入网址或上传静态文件
  2. 点击发布:选择想要打包的目标平台
  3. 下载使用:等云端打包完成后,即可得到下载地址

对于非程序员来说,PakePlus 也有不少实用场景,例如:

  1. 偶尔用 AI 写些小工具,比如课堂随机点名,却不知道怎么发布给别人用。有了 PakePlus,只需一键打包成 exe 文件,就能轻松分享,同学们用起来也方便,还显得你很专业。

  2. 常用的网站每天都要打开,反复启动笨重的浏览器很麻烦。用 PakePlus 把网站打包成桌面应用后,只需双击图标即可进入,无需等待浏览器启动,体验更加轻快高效,比传统快捷方式更省心。

  3. 手机访问某些网站时,地址栏总占据屏幕空间,尤其苹果手机还无法用万能浏览器插件。现在可以让 AI 帮忙写个 JS 脚本,在用 PakePlus 打包 iOS App 时直接注入,完美解决插件无法使用的问题。

1.2 核心优势

特性 PakePlus Tauri Electron Pake
依赖环境 无需 需要 需要 需要
开发复杂度 简单 复杂 复杂 中等
打包速度 分钟级 小时级 小时级 分钟级
安装体积 10MB 2GB+ 2GB+ 2GB+
支持移动端 部分
支持中文名
图形化界面

那么,PakePlus 背后究竟采用了怎样的技术方案?又是如何在不同平台实现高效、轻量的打包体验的呢?接下来,就让我们一起深入探索它的实现原理吧。

二、技术原理

PakePlus 之所以能够将 Web 项目打包为跨平台应用,核心原理在于对 WebView 的灵活运用。

在桌面端,Tauri 框架内部其实是基于对 wry 库的封装。Wry 是一个用 Rust 语言开发的 WebView 库,它让开发者能够在 Rust 中轻松创建和管理 WebView,并且原生支持 Windows、Linux、macOS、Android 和 iOS 等多平台。

unstable_struct!(
#[doc = "A builder for a webview."]
struct WebviewBuilder<R: Runtime> {
pub(crate) label: String,
pub(crate) webview_attributes: WebviewAttributes,
pub(crate) web_resource_request_handler: Option<Box<WebResourceRequestHandler>>,
pub(crate) navigation_handler: Option<Box<NavigationHandler>>,
pub(crate) on_page_load_handler: Option<Box<OnPageLoad<R>>>,
pub(crate) download_handler: Option<Arc<DownloadHandler<R>>>,
}
);

2.1 移动端优化

对于桌面端来说,大多数操作系统都自带 WebView 组件,因此应用体积可以做到十分小巧。不过,Tauri 在移动端的表现却不尽如人意——即便是最简单的 Demo,编译后体积也有 30+MB,这对于有“体积洁癖”的 PakePlus 作者来说是无法接受的。

因此,他决定在移动端采用更为轻量的原生 WebView 实现。以下是 Android 部分的核心代码:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/ConstraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"> <WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

iOS 部分的核心代码如下:

import SwiftUI
import WebKit struct WebView: UIViewRepresentable {
let url: URL
let debug = false func makeUIView(context: Context) -> WKWebView {
let webView = WKWebView()
// load url
webView.load(URLRequest(url: url))
}
//此处省略1万行....
}

2.2 打包流程

用户只需填写 GitHub Token,系统会自动 fork 一份完整的 PakePlus 仓库(含所有分支)到用户账号下。用户可以在自己的仓库中创建和编辑项目,系统会根据 web/dist/中文名称 等逻辑,用自动化脚本完成项目配置,最后触发 GitHub Actions 完成打包与发布。

const main = async () => {
const { name, showName, version, webUrl, id, pubBody, debug } = ppconfig.ios
// 应用名
await updateAppName(showName)
// 更新 Web URL
await updateWebUrl(webUrl)
// 配置 debug 模式
await updateDebug(debug)
// 更新 Android 应用 ID
await updateBundleId(id)
// 设置 github 环境变量
setGithubEnv(name, version, pubBody)
// 成功
console.log(' Worker Success')
}

三、开源路上的插曲

据小神回忆,2025 年 4 月 29 日堪称他的“高光时刻”:

  • PakePlus 被 HelloGitHub 收录
  • 接的私活项目顺利交付
  • 手中的股票成功卖出落袋为安

这一连串的好消息,让他开心上扬的嘴角比 AK 还难压。

3.1 GitHub 账号被封

然而,谁能想到,第二天清晨醒来,他却如遭晴天霹雳——GitHub 账号(Sjj1024)竟然被封了!

3.2 申诉和解封

幸运的是,在热心的日本同事(海外手机号)和 HelloGitHub 站长的鼎力相助下,事情终于迎来了转机。经过 13 天的申诉和催促,他的账号最终顺利解封。

封号原因:由于 PakePlus 项目短时间内涌入大量用户,导致作者账号的 Token 频繁调用 GitHub Actions,最终被平台识别为滥用行为,账号因此被封。这次经历值得大家引以为戒

四、写在最后

从一名被硬盘空间告急“逼到墙角”的前端工程师,成长为备受欢迎的开源项目作者。「1024小神」这一路并不轻松,但幸好,他都坚持了下来。

PakePlus 未来的开源之路还很长。它还在快速迭代和持续优化中,功能也将不断丰富。欢迎更多伙伴加入,一起打造更强大、更易用的工具生态!

GitHub 地址:github.com/Sjj1024/PakePlus


PakePlus 的故事,其实也是无数开源作者的缩影。如果你也热爱开源,欢迎把你的故事讲给我听,HelloGitHub 愿成为每一位开源作者的朋友

请记住,你并不孤单,开源让我们彼此相识,也让我们变得更加团结和强大!

从硬盘爆满到 GitHub 封号,一位前端开发者的开源历险记的更多相关文章

  1. GitHub 上 57 款最流行的开源深度学习项目

    转载:https://www.oschina.net/news/79500/57-most-popular-deep-learning-project-at-github GitHub 上 57 款最 ...

  2. GitHub上排名前100的Android开源库介绍(来自github)

    本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍,至于排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果,然后过滤了 ...

  3. GitHub 上 57 款最流行的开源深度学习项目【转】

    GitHub 上 57 款最流行的开源深度学习项目[转] 2017-02-19 20:09 334人阅读 评论(0) 收藏 举报 分类: deeplearning(28) from: https:// ...

  4. 我的Android进阶之旅】GitHub 上排名前 100 的 Android 开源库进行简单的介绍

    GitHub Android Libraries Top 100 简介 本文转载于:https://github.com/Freelander/Android_Data/blob/master/And ...

  5. GitHub上排名前100的Android开源库介绍

    GitHub上排名前100的Android开源库介绍 文章来源: http://www.open-open.com/news/view/1587067#6734290-qzone-1-31660-bf ...

  6. 给力!斩获 GitHub 14000 Star,两周创办开源公司获数百万美元融资

    文章来源|AI科技大本营 作者|伍杏玲 上世纪 90 年代初,21 岁大学生 Linus Torvalds 开源 Linux 操作系统,自此掀起全球开源浪潮.随后"中国 Linux 第一人& ...

  7. 40个GitHub上最受欢迎的iOS开源项目

    40个GitHub上最受欢迎的iOS开源项目(一) http://www.weste.net/2013/8-1/92975.html 40个GitHub上最受欢迎的iOS开源项目(二) http:// ...

  8. GitHub最全的前端资源汇总仓库(包括前端学习、开发资源、求职面试等)

    在GitHub上收集的最全的前端资源汇总(包括前端学习.前端开发资源.前端求职面试等) 个人结合github上各位大神分享的资源进行了简单的汇总整理,每一个条目下面都有丰富的资料,是前端学习.工作的好 ...

  9. GitHub上最受欢迎的Android开源项目TOP20

    以下这些开源项目都是从GitHub上筛选的,我强烈推荐android程序源代码有时间的时候自己在上面淘淘,或许能发现自己须要的开源程序. 了解开源项目有两个优点: 1.借鉴代码,一般来说.火爆的开源项 ...

  10. GitHub上有很多不错的iOS开源项目

    GitHub上有很多不错的iOS开源项目,个人认为不错的,有这么几个:1. ReactiveCocoa:ReactiveCocoa/ReactiveCocoa · GitHub:GitHub自家的函数 ...

随机推荐

  1. 【MOOC】华中科技大学操作系统慕课答案-第1~3章单元测试

    单选 1 下列说法错误的是 . A. 手工操作阶段,资源利用率低的原因是因为程序的准备和撤销都需要手工完成. B. 单道批处理系统中CPU和外设交替工作和空闲. √C. 单道批处理系统效率之所以比手工 ...

  2. MySQL保姆级安装教程(附资源包+5分钟极速配置+环境变量调试技巧)

    mysql简介 MySQL 是一种开源关系型数据库管理系统(RDBMS),由瑞典 MySQL AB 公司于 1995 年开发,现由 Oracle 公司维护.它采用客户端-服务器架构,支持多线程处理和高 ...

  3. kubernetes service 原理精讲

    --- # 介绍 Kubernetes Service 用于流量的负载均衡和反向代理,其通过 kube-proxy 组件实现.从服务的角度来看,kube-controller-manager 实现了服 ...

  4. win10无选字框

    设置-->时间与语言-->语言-->中文-->选项 下滑到最底 微软拼音-->选项 常规-->(下滑到最底)打开使用以前版本的微软拼音输入法-->确定

  5. 题目集8~9总结性Blog

    一.前言 对这两次题目集的总结: 这两次题目集相较于上次迭代作业来说,在题目量和难度上都做了下调.但要求我们在理解题目意思.设计好程序结构.掌握并运用知识这三方面有一定的要求.涉及到类的继承与多态,抽 ...

  6. HTTP请求使用http、socks代理demo,包含有认证和无认证

    package cn.daenx.myadmin.email.utils; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpU ...

  7. 记人生第一次DIY装机之旅

    一.调研 想装一台个人工作站很久了,原因是大学自用的笔记本总是在使用过程中过热关机,导致做一些CPU负载较高的工作时总是中断而无法连贯进行.考虑到目前手头还有一个Surface 3在使用,再买一个笔记 ...

  8. Python 潮流周刊#105:Dify突破10万星、2025全栈开发的最佳实践

    本周刊由 Python猫 出品,精心筛选国内外的 400+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  9. 我做了个 AI 高考分数预测器,这次终于能上清华了!

    马上高考了,可惜我今年有事情参加不了了,就帮帮广大考生朋友们,送大家一个我自己做的高考神器吧! 铛铛铛铛,就是这个 高考分数预测器! 体验地址:https://gaokao.codefather.cn ...

  10. ArrayList与LinkedList的增删改查

    ArrayList: 1 package com.lv.study.am.first; 2 3 //ArrayList 有下标 可重复 有序(添加到集合里面的顺序)不等于排序 4 5 6 import ...