项目概况
前阵子我开源系统了一个项目——Huntly,它是一个信息化管理专用工具,不但可以自代管,还可以通过手机客户端在本地运作。
先简单介绍一下这是个什么样的东西,生活中有下列作用:
- RSS 定阅。
- 网页页面个人收藏,全自动/手动式储存访问完的网页页面,接着以储存、稍候读、个人收藏或归档的形式将其储存。
- 文章储存,对于推特网站有独特的解决,会自动备份要求完的推文 timeline,纪录是不是访问过,在 huntly 中我们乃至可以使用更高效的方法再次查询这种文章。
- 具体内容全文检索,能从文章标题、具体内容、种类、个人收藏方法等多个维度点击搜索。
- 联接特色服务,现阶段适用 GitHub,因此它也是一个 Github stars 可视化工具。
系统软件截屏
有兴趣的读者朋友能够使用下列。
关键技术栈
之上仅仅简单介绍一下这样的项目,写这篇主要目的是分享一下在其中所用过的技术性。
这是一个为自己使用的服务项目,不属于分布式系统云计算等情景,可能就不存在任何深奥技术性,可是它需要用到的技术栈却还是算丰富多彩,算得上是麻雀虽小五脏俱全。
通过学习该项目的源代码,你没法成为一个高手,但却可以对在其中需要用到的许多技术性有一个快速地掌握。
这样的项目需要用到的关键技术栈有:
- Spring Boot
- React
- Lucene
- SQLite
- Tauri
应用过的计算机语言有:
- Java
- TypeScript
- Rust
Spring Boot 服务器端
服务器端选用简单单体架构,如下图:
选用 JPA
操作数据库,默认设置应用 SQLite
数据库系统,应用 Lucene
部件和 IK
分词器去进行全文索引。
应用 Springfox
给予 OpenApi
文本文档,前面应用 OpenAPI-Generator
专用工具形成 API 启用编码。
应用 frontend-maven-plugin
软件将 React 前端资源装包到 Jar 库中。
将前端资源装包到 Jar 库中,必须解决好前面 Url 的路由器投射,归功于 Spring Boot 强悍的路由规则,新创建一个 ReactAppController 就可以,下边代码将 /api 开始之外的要求就交给核心技术的 index.html 解决,并实现核心技术的恰当路由器。
@Controller
@ApiIgnore
public class ReactAppController {
@RequestMapping(value = {"/", "/{x:[\\w\\-] }", "/{x:^(?!api$).*$}/**/{y:[\\w\\-] }"})
public String getIndex() {
return "/index.html";
}
}
React 前面
款式层面,使用了 MUI
和 TailwindCSS
混合使用,MUI 提供了大量的部件,TailwindCSS 也可以在很大程度上提高款式撰写高效率。
插口层面,在 package.json 中加入 api-generate 脚本制作用以形成 api 启用编码,启用时当地开发设计服务器端应为工作状态。
"scripts": {
"api-generate": "cd ./src/api/ && openapi-generator-cli generate -i http://localhost:8080/v3/api-docs -g typescript-axios -o ."
}
数据统计,使用了 react-query
部件,针对简单运用还没需要使用状态管理,应用 react-query 能够减少编码量。
表格管理方法,使用了 formik
和 yup
部件,formik 很灵便,能够以及各种 UI 架构配合使用,组合 yup 认证表格。
还使用一些实用的桌面小组件,如:moment
、react-beautiful-dnd
、react-photo-view
等,实际应用请看源码。
Tauri 手机客户端
其实一开始使用的是 electron,也可以在 React 前面里看到一部分 electron 代码,最终认为在手机客户端展现本来是网址的页面有一些不必要,它没法运用电脑浏览器上的各种软件,不符个人用户习惯,因此改成了 Tauri,Tauri 装包的体积比 electron 要低许多,因为他不内置浏览器兼容性。
最后的手机客户端包括一个服务器端设置页面、自动运行和拖盘标志。自然,如果要把 Huntly 的前端界面在这其中表明,使其看上去更像一个手机客户端是并不一定新增加什么代码的,只不过是在这一场景中,我觉得没必要。
将 Spring Boot Fat Jar、JRE11 装包进手机客户端,最后还不到 120MB,是一个彻底能接受的尺寸,下载链接:Release v0.3.5 · lcomplete/huntly · GitHub。
选用 jlink 指令来装包 JRE:
jlink --module-path $JAVA_HOME/jmods --add-modules java.compiler,java.sql,java.naming,java.management,java.instrument,java.rmi,java.desktop,jdk.internal.vm.compiler.management,java.xml.crypto,java.scripting,java.security.jgss,jdk.httpserver,java.net.http,jdk.naming.dns,jdk.crypto.cryptoki,jdk.unsupported --verbose --strip-debug --compress 2 --no-header-files --no-man-pages --output jre11
Tauri 是一个新型的手机客户端架构,它对比 electron 有一些优点,但是目前不算平稳,这一点应注意。
项目构建
选用 GitHub Actions 去进行完整的搭建,实际请参阅开放源码 Huntly workflows。
本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!