<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Node.js on 肥鱼港湾</title><link>https://wyr233.com/tags/node.js/</link><description>Recent content in Node.js on 肥鱼港湾</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Mon, 14 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://wyr233.com/tags/node.js/index.xml" rel="self" type="application/rss+xml"/><item><title>网页变 App 三件套</title><link>https://wyr233.com/projects/webview-shell/</link><pubDate>Mon, 14 Sep 2026 00:00:00 +0000</pubDate><guid>https://wyr233.com/projects/webview-shell/</guid><description>&lt;img src="https://wyr233.com/img/cover_proj_webview.webp" alt="Featured image of post 网页变 App 三件套" /&gt;&lt;h2 id="这是什么"&gt;这是什么&#10;&lt;/h2&gt;&lt;p&gt;一套「把自己搭的网页服务变成手机 App」的完整方案:&lt;strong&gt;独立图标、全屏无地址栏、能调相册相机、关屏也能收到消息推送&lt;/strong&gt;。整套东西零第三方依赖,全部可自托管。&lt;/p&gt;&#10;&lt;p&gt;一个仓库三部分:Android 壳、手机端页面、聊天后端——可以整套用,也可以只拿其中一块。&lt;/p&gt;&#10;&lt;h2 id="-android-壳把网页装进真正的-app"&gt;① Android 壳:把网页装进真正的 App&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;自己做推送,不依赖厂商通道&lt;/strong&gt;:手写 RFC6455 WebSocket 长连接 + 前台服务保活;国产 ROM(小米 / 华为 / vivo / 联想)的保活引导都写在文档里&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Android 15 适配&lt;/strong&gt;:前台服务类型、键盘避让、返回键与页面抽屉的冲突处理&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;WebView 的真实坑&lt;/strong&gt;:某些 WebView 不保存 cookie、页面缓存不刷新——都有对应处理&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="-手机端页面一个-html-就是界面"&gt;② 手机端页面:一个 HTML 就是界面&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;不用 npm、不用打包器,&lt;strong&gt;单个 HTML 文件&lt;/strong&gt;丢到任意静态服务器就能用&lt;/li&gt;&#10;&lt;li&gt;流式回复(边生成边显示)、发图自动压缩上传、亮暗双主题跟随系统&lt;/li&gt;&#10;&lt;li&gt;改一行刷新就生效,移动端调试成本低&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="-聊天后端441-行-node-原生"&gt;③ 聊天后端:441 行 Node 原生&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;不用 &lt;code&gt;npm install&lt;/code&gt;,直接 &lt;code&gt;node server.mjs&lt;/code&gt; 就能跑&lt;/li&gt;&#10;&lt;li&gt;SSE 流式对话 + 多模态(图片直喂模型)&lt;/li&gt;&#10;&lt;li&gt;内容寻址图床:上传按内容哈希存,自动去重&lt;/li&gt;&#10;&lt;li&gt;可选长期记忆:用 markdown 卡片做跨对话记忆,纯文件、可读可改、方便备份&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="说明"&gt;说明&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;全部 &lt;strong&gt;MIT 许可&lt;/strong&gt;,随便用、随便改&lt;/li&gt;&#10;&lt;li&gt;定位是&lt;strong&gt;侧载自用&lt;/strong&gt;(不上架应用商店):想要「自己的服务自己用」的体验,这套正合适&lt;/li&gt;&#10;&lt;li&gt;所有个人标识(域名、密钥、账号)在开源前都已替换成占位符,各目录 README 写明要改哪几处&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item></channel></rss>