OceanPress
为什么从go转为js开发
我 js 比 go 更熟练(事实上之前使用go开发完全依赖于我对于心中js实现的翻译),这意味着相同精力下我能够开发出更好的程序,还有我真的很想要直接在浏览器中使用OceanPress
特性
2.
生成
彻底的静态站点,可以直接将文件拖拽到浏览器打开不需要启动 http 服务(非常适合用来分发软件的使用说明文档之类的)
1.
目前完全离线会有显示上的一些问题,主要是 vditor 依赖的一些 cdn 资源还没有配置成本地资源,之后会实现完全离线
6.
良好的 SEO 支持 ,可以放心大胆的随意重构所有文档结构 不用担心用户无法通过原来的链接访问到重构后的文档。
7.
1.
website-check (
尚未施工完毕 ) , 检查静态站点中的全部同站链接是否存在死链 (支持 a、iframe、video、audio、img 标签)
快速开始
待办
对于底部反链中的块引用解析发出的警告 添加对应的描述
版本迭代记录
最新代码
v0.5
兼容思源 v1.2.5 版本的文件目录改为 id 的行为,现在支持两种模式 id, title
之前编译所生成的数据目前会存储在 设定的输出目录/assets/historical_data/redirect.json 中
对于打开失败的文件进行跳过,不直接报错退出(不然每次我使用都要关掉思源)
v0.4
v0.3
✨ feat(rss): rss 生成功能:在文档名为
[/s/S]*.rss.xml 这种格式的时候(例如:
最近更新.rss.xml 最近新增.rss.xml )
会根据该文档内引用的其他文档另外生成一份 xml 格式的文件。
v0.2.9 以及之前的提交
一开始想实现后来放弃了的特性(没有足够的收益)
利用 go:embed 将静态资源嵌入到二进制文件
开发记录
演示截图
其他相关信息
OceanPress 开发规范
使用 github 的 actions 功能在添加特定 tag 时自动发版
tag 采用 v0.5.3_tested_on_siyuan_v1.3.3_Kernel_v1.3.3 这样的格式,前面的 v0.5.3 代表 OceanPress 自身的版本号,后面的 siyuan_v1.3.3_Kernel_v1.3.3 表示该版本在思源对应版本所生成的数据下进行测试和开发的
起始-qq群讨论
2234839 2021-05-25 22:08:27
@88250 看上去如果没有运行时的api调用的话 oceanPress 可以兼容 /疑问
88250 2021-05-25 22:09:08
iframe 得有伺服环境
2234839 2021-05-25 22:16:28
直接兼容好像不可能,不过挂件块如果提供一个hook函数在这个函数内做完从用户输入以及思源api调用返回他需要的数据,oceanpress 将这个数据持久化到页面然后再通过iframe喂给挂件块。还是有一定的机会
88250 2021-05-25 22:18:14
了解,这部分下个月我们讨论一下
2234839 2021-05-25 22:18:23
@88250 OK
可行性
对 es6 的支持还不太行(也许可以通过运行 babel.js 来解决这个问题)
提供一个npm包,用来支持 思源笔记的api请求和数据持久化,方便用于 oceanpress 这样的离线场景
原理:在处于思源笔记内运行时,对于查询类的 api 对请求结果进行缓存(存到自定义属性)
处于非思源笔记场景时对于查询请求就不会发送xhr了而是使用之前缓存的结果
其它特性
- 利用 .d.ts 提供思源接口的类型
- 提供环境判断的函数使挂件可以知道当前处于什么模式,便于其停止写操作以及相关 ui 的展现
架构设计