发布你的项目

完成了一个项目,可以把它打包成一个发布页——别人点一下就能复刻出一模一样的。这一篇讲怎么发、发出去的是什么,以及公开之前你必须自己过一遍的几件事。

一览

前提必须先编译出可用固件。没编译过的项目发不了,按钮是灰的
从哪里发顶栏的「打包发布」只负责打开发布页编辑器。真正发布的是编辑器里的两个按钮:私有发布公开发布
打包要多久2–3 分钟(会重新编译一次)
生成页面文案要多久大约 7 分钟,完成后页面自动刷新
会打包什么进去完整源码、硬件方案、依赖清单、你上传的资料、编译好的固件
公开之后谁能看任何人,包括没登录的访客。能读全文、下载固件,以及下载你在「关键资料」里标注出来的单个文件;完整源码要登录之后克隆才拿得到
能撤回吗能撤下,但已经被下载的副本收不回来

两个发布按钮

顶栏最右边的打包发布不是发布动作,点它只会打开发布页编辑器,一个字节都还没打包。发布在编辑器里进行,编辑器里有「私有发布」和「公开发布」两个动作,按哪一个决定这一版发完之后是私有还是公开。

私有发布把整个工程打包成一个版本。结果是私有的,只有你能看。之后想公开,用同一栏里的「转为公开」
公开发布同一条流水线跑完之后直接转为公开,不需要你再点第二次。这一版对所有人可见,并出现在「公开共享」里

两个按钮都会从源码重新编译一次固件,保证发出去的固件和源码是配套的。没有成功编译过的项目,这两个按钮都是灰的,鼠标停上去会告诉你原因。

发布一版

  1. 确认项目已经编译出固件(顶栏的「打包发布」是亮的)。
  2. 打包发布,进入发布页编辑器。
  3. 在右栏把图、附件备注、购买链接和发布者说明先填好——公开页显示的是发布那一刻的快照,发完再改要等下一版才生效。
  4. 私有发布公开发布
  5. 等 2–3 分钟。流水线走四步:占位与冻结 → 从源码重新编译 → 打包并落库 → 生成双语正文。选的是公开发布的话,末尾还会多出「转为公开」一条,一共五条。

正文还要再等大约 7 分钟。打包本身 2–3 分钟就完了,页面的双语正文要另外花大约 7 分钟。这期间页面上写着「这一版的说明正在生成」,好了之后自动刷新。这一步可能失败:失败时那句话变成「这一版的说明还没有生成成功」,旁边出现重试生成按钮。生成开始满 25 分钟仍没有结果的,平台也按失败处理。

公开发布会发生什么

点了「公开发布」之后不再有第二道确认。平台强制告知的那五条——可见范围、密钥自查、撤下的限度、地址变化、署名——在这一版公开期间一直挂在编辑器的发布栏上;改用「转为公开」按钮手动转公开时,它们还会在发布流水的「公开前须知」那一步逐条写出来。它们不阻止发布,你是作者,最终你说了算,但请一条条读完。

公开之后:

  • 任何人(包括没登录的访客)都能看到这一版的硬件方案和功能说明,并下载固件和你标注出来的那几个文件;完整源码要登录之后克隆才拿得到
  • 会以你的名义公开——发布页上会显示你的名字和头像。
  • 地址会变成一个公开链接。切回私有会让别人手上的链接失效。

⚠️ 硬编码的配置会连值一起印在公开页上。

源码扫描到的每一项配置,都会连当前的字面值一起写进公开页上的「字段 / 值 / 位置」表。这是有意为之——复刻者要照着它把每一行改成自己的。代价是:写在 #define 里的 WiFi 密码,会以明文出现在公开页面上——访客不必登录、也不必下载任何东西就能读到。

而且扫描有盲区,它不能证明你的源码里没有不该公开的东西:

  • 只看 main/src/ 两个目录,components/lib/ 里的内容一律看不见。
  • platformio.inisdkconfig.defaults 这几个根配置文件只解析依赖,不查密钥
  • 单个源文件超过 512KB 就整个跳过,一行都不扫。

公开之前请自己过一遍源码,尤其是这几类:WiFi 名和密码、各种 token 和 API key、内网地址、你自己的账号信息。

编辑器里的九个内容槽

发布页编辑器把内容分成固定的九个槽。正文由平台生成,但九个槽每一节都有「添加」,都能传图片、视频或 PDF,而你提供的东西会原样使用。下表的编号是编辑器里的编号——公开页的分节和次序都和它不一样,后几节的次序还能让它重排。

内容你要做的
1 · 成品图 / 演示视频做出来长什么样传图或视频
2 · 概述该项目的用途正文自动生成,可以另外配图
3 · 烧录固件下载与烧录参数正文自动生成,可以另外配图
4 · 复刻这个项目别人怎么做出一样的正文自动生成,可以另外配图
5 · 元件实拍需要采购哪些器件传图
6 · 框图 / 时序图工作原理传图
7 · 接线与装配怎么接线传图
8 · 测试结果 / 故障排查验证过什么、遇到过哪些问题传图
9 · 参考与附件原理图、datasheet传 PDF,或选工程文件加备注

第 1 节没有图,公开出去那一节就是空的。而那是他人打开页面第一眼看到的位置。至少放一张成品照——一张「它真的在跑」的图,比任何文字都管用。

加图和视频

在发布页编辑器的右栏加。几条规则:

iPhone 拍的视频会被直接拒收。iPhone 默认录的是 HEVC 编码,平台在上传确认那一步就会把它挡回来,理由是一部分访客的浏览器放不了。请到 设置 → 相机 → 格式 选「兼容性最高」之后重拍,或者在「照片」里分享/导出一次(导出会自动转成 H.264),再传。

你写的那几样,会原样使用

关键资料选几个工程文件加上备注。只有写了备注的文件才会展示,备注原样显示
购买链接给整机或某个器件加购买地址。只接受 https:// 链接。平台不参与交易,也不保证链接长期有效
发布者说明写本版的功能、限制、注意点。这是一手声明,会作为权威事实写进发布简介。最多 2000 字符

「发布者说明」值得认真写。自动生成的正文只知道代码里有什么,不知道你实际测过什么、什么情况下会不准、哪些功能只做了一半。这些只有你知道,而它们恰恰是别人复刻时最需要的。

用一句话改页面

发布出第一版之后,发布页编辑器里有一个对话框。需要调整文案或观感,直接描述即可:

介绍压到三句,整体素一点,把硬件清单挪到工作原理后面。

改动有修订历史,不满意可以回滚到之前某一版。

撤下

撤下之前想清楚,这是不可逆的。

  • 撤下某一版:访客看不到这一版了,这一版的重负载数据会被清空、展示媒体会被回收。
  • 撤下整个模板:它的所有版本都不再对外可见,并且没有任何办法恢复
  • 两种撤下都只能阻止之后的访问。已经被下载的固件、以及已经被克隆走的源码,收不回来。

还有一条容易忽略的:删除项目 ≠ 下架。删掉项目不会把它的公开发布页撤下来,而且删除之后你就再也没法撤下它了。要下架,顺序是:先回项目里转成私有,再删除项目。

三种可见性

🔒 私有只有你能看。私有发布的结果
🌐 公开所有人可见,会出现在「公开共享」里
🔗 链接分享持有链接的人可以查看。目前还没开放
如果你熟悉软件开发

两个发布按钮的语义都接近打一个 release tag:它们会从源码重新编译一次,而不是复用你最近那次构建的产物——这样发出去的固件和源码包一定是配套的,不会出现「二进制是三天前的、源码是今天的」。两者的差别只在跑完之后要不要接着做一次可见性变更。

「转为公开」本身纯粹是可见性变更,不重新构建。所以你可以先用「私有发布」打包放着,过几天再决定要不要公开。

源码扫描是有的,但它是提示,不是门。一个确定性的扫描器读冻结后的工程,把 #define 里名字带 WIFI / SSID / PASS / KEY / TOKEN / SECRET / URL 之类的常量,连同文件名、行号和当前的字面值一起列出来,界面上写成「源码扫描发现可能会随公开包暴露的硬编码配置」。它只看 main/src/ 两个目录下的 .c .cc .cpp .h .hpp .inoCMakeLists.txtidf_component.ymlplatformio.inisdkconfig.defaults 这四个根配置文件只被解析依赖,不查密钥;单个文件超过 512KB 就整个跳过而且发现什么都不会阻止你发布。它另外认得三处运行时调用(WiFi.begin()setenv("TZ", …)esp_sntp_setservername()),但更绕的写法——分片拼出来的凭据、藏在资源文件里的密钥——它一个都看不见。

还有一点值得知道:「进告警」和「上公开页」是两套口径。转公开时列出来的告警只挑凭据、网络、URL 三类,而扫到的每一项——包括 TZLATLONINTERVAL 这些——都会连值一起渲染到公开页的配置表里。没进告警不等于没公开。

常见问题

为什么发布要重新编译一次?

为了保证发出去的固件和源码包是配套的。直接用你最近那次构建的产物,可能和当前源码对不上。

发布之后我还能继续改项目吗?

能。发布出去的是一个版本快照,你的项目照常继续开发。想让新的改动出现在发布页上,再发一版。

别人复刻我的项目,我能看到吗?

能看到被复刻了多少次,卡片和发布页上都有。看不到是谁。

发布出去的源码,别人能商用吗?

发布页上有「许可」一项。这是你和复刻者之间的事,平台不介入。

我不想公开,只想自己留个备份?

私有发布。打出来的版本只有你能看;哪天改了主意,再用发布栏里的「转为公开」。