liyupi / yuindex

✨ 新项目 - 极客范儿的浏览器主页 💻 Vue 3 + Node.js 全栈项目,自实现 web 终端 + 命令系统
http://yuindex.yupi.icu
Apache License 2.0
1.96k stars 706 forks source link
backend frontend javascript node-js typescript vue web-terminal

YuIndex - 极客范儿的浏览器主页

Coolest browser index for geeks!

前后端全栈项目 By 程序员鱼皮

在线体验:http://yuindex.yupi.icu

视频演示:https://www.bilibili.com/video/BV19B4y1Y7m8/

YuIndex 定制你的最强主页

YuIndex 用命令来控制网页

⭐️ 我在自己的 编程知识星球 内花 4 个小时直播给大家详细解读了这个项目的创作思路 + 技术选型 + 系统设计 + 源码解读 + 思路扩展 + 简历亮点分享,如果你希望把这个项目写到简历上、或者深入学习,欢迎加入我的星球观看

YuIndex 是什么?

一个很特别的浏览器主页,支持使用输入命令的方式来操作,目标是帮你在一个 web 终端中高效完成所有的事情!(all in one)

此外,它也是一个功能强大的 web 终端组件。开发者可以在它的基础上定制自己的 web 终端,并且可以在终端中集成任何内容!

如果你是一名程序员,相信你会爱上它~

你可以将音乐、游戏,甚至可以将自己的偶像封装到主页~

1 分钟上手使用

请打开网站:https://yuindex.com

然后在网站内依次输入以下命令:

baidu 程序员鱼皮
github yuindex
goto yupi.icu
todo
music 坤坤
moyu
按键 Ctrl + O 触发折叠, 再按可展开
history
按键 Ctrl + L 清屏

使用 help 命令英文名 可以查询某命令的具体用法,如:help search

使用 shortcut 可以查看所有的快捷键。

完整命令用法请见:命令手册

尽情探索吧~

项目优势

用户

开发者

学习者

功能和特性

web 终端

已支持命令

完整命令用法请见:命令手册

技术栈

前端

主要技术:

依赖库:

库:getopts

后端

主要技术:

依赖库:

依赖服务:

点击了解后端详情

目录结构

系统设计

设计理念

  1. 开放:采用类插件化设计,便于开发者自定义新命令,且能够通过配置自动生成帮助提示
  2. 重前端轻后端:考虑到扩展性、安全性以及实现的方便,除了核心模块外,尽量不请求后端

核心

系统分为 3 个核心模块,各模块职责分明:

前端架构图:

微终端

从 0 开始实现的 web 终端控制台,包含以下模块:

命令系统

一套独立于终端的命令解析执行引擎,包含以下模块:

命令集

一组可用命令的集合(类似插件),通过 TS 明确命令的定义,支持配置别名、选项、子命令等,便于开发者扩展和定制。

核心命令包括:

为什么要自己写终端?

  1. 本来打算使用现成的 xterm.js,但实际使用中发现它的文档比较少、问题难解决(比如中文字符),解决问题消耗的时间足够自己写一套新的 web 终端了。而且它更适用于和后端服务器强交互的场景,与本项目的定位不符。
  2. 开源的 web 终端很少,给开源贡献一份力。
  3. 帮助自己复习 Vue,突破个人系统开发设计能力的边界。

更多讲解

如果你希望获取该项目的完整详细讲解,欢迎加入 鱼皮的编程知识星球 ,这是鱼皮的编程学习圈子,我会在圈子内带大家从 0 到 1 分析解读这个项目,让你也能独立做一个,项目经历 + 1。

贡献指南

欢迎各位朋友贡献代码,还请先阅读以下指南。

开发新命令

  1. 在 commands 下新建目录,目录名称为命令英文名称,所有该命令相关的代码都必须放在该目录中
  2. 编写命令定义文件 xxxCommand.ts(xxx 为命令英文名称),可以参考其他命令,如 music、goto 等
  3. 若命令包含子命令,需要将子命令相关文件放到 subCommands 目录中,可以参考 user 命令
  4. 在 commandRegister 的 commandList 中补充新命令
  5. 测试验证通过后,可以发起 PR 等鱼皮合并

致谢

摸鱼命令的实现依赖于 https://haiyong.site/moyu ,感谢大佬的开源分享。