CabloyJS

一款内置工作流引擎的Node.js全栈框架

接单快手、创业神器

Github 快速开始 在线演示

>>>>> 接单快手、创业神器 <<<<<
PC = MOBILE + PAD
将Mobile场景的操控体验和开发模式无缝带入PC场景,只需开发一套代码即可通用Mobile和PC两个场景
业务模块化体系
业务组件与逻辑被组织为模块,有利于功能内聚与重用
NodeJS工作流引擎
内置简便灵活扩展性强的NodeJS工作流引擎,可轻松适配各类业务流程和审批流程

引言

凡是可以用 JavaScript 来写的应用,最终都会用 JavaScript 来写 | Atwood 定律

目前市面上出现的大多数与 NodeJS 相关的框架,基本都将 NodeJS 定位在工具层中间层代理层,很少在业务层面进行深耕,认为这是 JAVA 的领域,NodeJS 不适合。这种思潮明显是与Atwood 定律相悖的

如果您想感受不同的 NodeJS 全栈开发体验,一定要试试自带工作流引擎的 CabloyJS 全栈开源框架。为了提升业务层面的开发效率和开发体验,CabloyJS 在前端和后端均提供了大量实用的工具和组件,在这里仅简要的介绍 CabloyJS 的功能三大亮点架构三大亮点

1. 功能三大亮点

  1. 自适应布局:pc = mobile + pad

    请大家分别在 PC 端和移动端打开前面提供的演示链接: https://test.cabloy.com/ ,来体会与众不同的自适应机制

    市面上大多数后台管理系统,都是优先适配 PC 端,然而移动端体验却极差,想必大家都深有同感

  2. 基于 JSON Schema 的表单自动渲染与数据验证引擎:

    通过在一处定义 JSON Schema,就可以同时支持前端的表单自动渲染和后端的数据验证,既能开箱即用又可灵活定制

  3. 内置 NodeJS 工作流引擎:

    若要让 NodeJS 深入业务领域的开发,工作流引擎是一个绕不过去的核心组件。CabloyJS 充分利用 JS 语言的灵活性和 JSON 格式的便捷性,提供的 NodeJS 工作流引擎远比 Activiti 简洁易用

    比如我们都知道Activiti中提供的活动节点边界事件怎么使用,却很少有途径来了解如何开发自定义的活动节点自定义的边界事件。但是 CabloyJS 提供的工作流引擎却可以轻松的定制所有的工作流元素,而且源码层次清晰,易于学习

2. 架构三大亮点

  1. 模块化开发体系与模块隔离

    为了满足大型业务系统开发的诉求,CabloyJS 采用模块思维规划系统架构,以业务功能为单位,将与业务功能相关的前端组件与后端逻辑组织为一个业务模块,从而有利于业务功能的内聚与重用,也有利于以业务为单位进行团队分工 此外,业务模块内部的页面、数据、逻辑、路由、配置等元素均进行了命名空间隔离处理,从而避免模块之间的变量污染与冲突

  2. 前后端分离,全场景开发

    通过前后端分离的架构设计,可以支持全场景业务的快速开发

场景 前端 后端
PC:Web CabloyJS 前端 CabloyJS 后端
PC:Exe CabloyJS 前端 + Electron CabloyJS 后端
Mobile:IOS CabloyJS 前端 + Cordova CabloyJS 后端
Mobile:Android CabloyJS 前端 + Cordova CabloyJS 后端
微信公众号 CabloyJS 前端 + 微信 API CabloyJS 后端
企业微信 CabloyJS 前端 + 企业微信 API CabloyJS 后端
钉钉 CabloyJS 前端 + 钉钉 API CabloyJS 后端
Slack CabloyJS 前端 + Slack API CabloyJS 后端
小程序:微信、支付宝等 Uni-app + CabloyJS 前端 SDK CabloyJS 后端
  • 后端:由于完整的前后端分离设计,只需开发一套 CabloyJS 后端代码即可
  • 前端:所有可基于 H5 的场景,只需开发一套 CabloyJS 前端代码即可
  • 小程序:提供 CabloyJS 前端 SDK 让 Uni-app 可以轻松对接 CabloyJS 后端代码
  1. 原生分布式架构

    EggJS 的定位是框架的框架,CabloyJS 后端就是在 EggJS 的基础上采用自定义Loader扩展出来了一套适配业务场景的新特性

    比如,EggJS 原有的Worker + Agent进程模型,对于单机而言非常便利。但是面对多机集群,特别是基于docker的集群部署而言,Agent进程就失去了用武之地。更重要的是,如果一开始基于Agent进程进行开发,后续很难平滑的过渡到分布式场景。因此,CabloyJS 后端采用Redis,从框架底层就开始原生分布式的架构设计,并衍生出了Broadcast、Queue、Schedule、Startup等一系列分布式的开发组件,方便我们从一开始就进行分布式的开发。因此当系统起量后,可以轻松做集群扩展,参见:Broadcast, Queue, Schedule, Startup

低代码平台辨析

  1. 拖拽式低代码平台

    大多数业务表单不仅仅是一些字段的简单组合和增删改查,不同的业务都有自己独特的业务诉求,往往需要前端界面的定制和后端逻辑的定制。拖拽式低代码平台,对于业务人员而言没有足够的工具进行深入定制,对于研发人员而言也没有足够的机制深入开发

    许多拖拽式低代码平台认识到了这一点,所以针对不同的业务场景提供官方预配置的套装解决方案,这同样也把业务人员和研发人员置于不上不下的尴尬境地,成为食之无味 弃之可惜的鸡肋平台

  2. 编码式低代码平台

    CabloyJS 提供了大量基础工具和组件,使研发人员可以快速创建业务表单和审批流程(比拖拽式还要快),达到开箱即用的效果,同时又可以进行深入的定制开发

    此外,编码式低代码平台有利于版本变更管理,便于排查问题和持续升级维护

  3. 业务运营场景

    其实,对于业务和运营场景而言,普适化的表单引擎并不是刚需,而是要根据具体的垂直场景提供可灵活定制的工具。比如,CabloyJS 提供的 CMS 内容管理和渲染引擎,可以满足大多数业务运营场景的诉求

谁会用这款Node.js全栈框架?

>>>>> 0. 场景画像

小王准备创业,需要开发一款多租户的SAAS业务系统,想请小明帮忙,希望能用有限的预算让系统尽快落地,以便尽早验证商业模型,从而控制创业的风险

小明原本在公司里做开发,由于公司有完整的技术团队做支撑,做项目还是比较顺利。但是,当小明独立面对这样一个需求时,发现原本在公司使用的技术栈用不上了

这时候,小明就希望能找到一个全栈业务开发框架,内置各种功能特性,既开箱即用,又方便二次开发、灵活定制。在此基础上进行业务的快速开发,从而能保质保量的为朋友创业助一把力

>>>>> 1. 外包接单

痛点

客户希望项目按质如期完工、价格低、风险小;服务商希望毛利高、投入少、进度快、客户满意。如何实现二者的平衡呢?

如果接到项目,从零开始代码开发,就会放大客户与服务商之间的矛盾,增大项目的实施风险。因此,一款高质、高效、灵活的全栈框架,可以让外包接单之路走得更顺一些,更远一些

优点

  1. 高效灵活:CabloyJS历时5年精心打造的Node.js全栈框架,内置大量特性功能,开箱即用,同时又具有强大的可扩展性,便于定制开发
  2. 二次机会:CabloyJS完善的基础建设,不仅让开发效率更高,而且可以引导和培育客户的日常操控体验,从而衍生出更多的业务需求和合作机会

>>>>> 2. 初创企业

诉求

在创业成本高企、竞争越发激烈的今天,初创企业往往希望在尽短的时间、以尽少的成本,研发出最小可用产品(MVP),从而尽早发布测试、收集反馈、迭代优化

优点

  1. 尽快落地:CabloyJS采用模块化体系,支持全场景开发,确保MVP产品尽快落地
  2. 保值(纵向深入):CabloyJS从底层内置分布式设计,并且内置工作流引擎等核心特性。当系统起量之后可以无缝支持集群部署,并在MVP产品的基础上继续深入开发更核心的业务,从而达到保值的效果
  3. 增值(横向拓展):CabloyJS提供了模块市场,可以通过模块市场直接选购与自身业务需求相匹配的模块,以低成本快速实现业务需求,从而达到增值的效果

CabloyJS可以开发什么系统

  1. 可以开发多租户SAAS业务系统
  2. 可以开发前后端分离的后台业务管理系统,如OA、CRM、ERP、电商,等等
  3. 可以开发JAMStack架构的CMS内容管理系统,支持SEO优化,如博客、技术文档、社区、知识店铺,等等
  4. 既可以先开发后台业务管理系统,再延伸开发CMS内容管理系统;也可以反过来,先开发CMS内容管理系统,再延伸开发后台业务管理系统
  5. 可以通过Cordova开发各类App应用,支持IOS、Android
  6. 可以通过Electron开发桌面应用
  7. 可以开发微信公众号、企业微信、钉钉,等第三方平台的应用,解决信息孤岛的问题
  8. 可以为Uniapp小程序开发后端API接口

CabloyJS开发的正式系统

网站类型 网站链接
后台管理系统(PC布局) https://admin.cabloy.com
后台管理系统(Mobile布局) cabloy-admin-qrcode
博客 https://zhennann.com
技术文档(英文) https://cabloy.com/index.html
技术文档(中文) https://cabloy.com/zh-cn/index.html
社区(英文) https://community.cabloy.com/index.html
社区(中文) https://community.cabloy.com/zh-cn/index.html
课程(英文) https://course.cabloy.com/index.html
课程(中文) https://course.cabloy.com/zh-cn/index.html
Cabloy商店(英文) https://store.cabloy.com/index.html
Cabloy商店(中文) https://store.cabloy.com/zh-cn/index.html

CabloyJS的研发历程

CabloyJS从2016年启动开发,主要历经两个研发阶段:

1. 第一阶段:EggBornJS

EggBornJS关注的核心就是模块化体系模块隔离,并以此实现一套完整的全栈开发框架

比如模块egg-born-front是框架前端的核心模块,模块egg-born-backend是框架后端的核心模块,模块egg-born是框架的命令行工具,用于创建项目骨架

这也是为什么所有业务模块都是以egg-born-module-为命名前缀的原因

2. 第二阶段:CabloyJS

EggBornJS只是一个基础的全栈开发框架,如果要支持业务的快速开发,还需要考虑许多与业务相关的支撑特性,如:工作流引擎用户管理角色管理权限管理菜单管理参数设置管理表单验证登录机制,等等。特别是在前后端分离的场景下,对权限管理的要求就提升到一个更高的水平

CabloyJS在EggBornJS的基础上,提供了一套核心业务模块,从而实现了一系列业务支撑特性,并将这些特性进行有机的组合,形成完整而灵活的上层生态架构,从而支持具体的业务开发进程

有了EggBornJS,从此可复用的不仅仅是组件,还有业务模块

有了CabloyJS,您就可以快速开发各类业务应用

CabloyJS架构图与技术栈

CabloyJS并不盲目重新造轮子,而是采用业界成熟的开源框架和组件,经过有机组合、再次创新,补充业务层面的基建特性,从而具备了丰富的功能特性,又保持了强大的可扩展性

cabloy-2x

1. 第一层:NodeJS

基于NodeJS,从而使得前后端均可以采用Javascript语言进行全栈开发,从而显著提升开发效率

2. 第二层:VueJS、KoaJS

3. 第三层:Framework7、EggJS

  • 前端:采用Framework7作为主体的UI组件库,同时根据业务需要搭配其他UI组件库,如AntD Vue的表格组件、AntV X6工作流绘制组件、ChartJS图表组件,等等
  • 后端:采用EggJS作为底层框架,从而沿用了EggJS成熟的基础建设和丰富的插件生态

4. 第四层:egg-born-front、egg-born-backend

  • egg-born-front:是前端的核心模块,主要进行了以下几方面的工作:
  1. 模块前端隔离:对模块前端的页面、数据、逻辑、路由、配置等元素进行了命名空间隔离处理,避免模块之间的变量污染与冲突
  2. 模块加载机制:只需给模块名称增加一个sync后缀,即可实现模块的同步加载异步加载,参见:加载机制
  3. pc=mobile+pad自适应布局:对Framework7进行了改造,只需要一套代码,mobile端达到原生效果,同时将mobile端的操控体验和开发模式无缝带入pc端,参见自适应布局:pc = mobile + pad
  4. 组件环境对象:向Vue组件实例注入了大量环境对象,方便开发,参见:Component
  • egg-born-backend:是后端的核心模块,主要进行了以下几方面的工作:
  1. 模块化开发体系:EggJS原有的目录结构并不适合模块化的开发风格。但是EggJS提供了强大的扩展机制,允许提供自定义的Loader加载器。通过开发自定义的Loader加载器,实现了以业务模块为单元的目录结构。每个业务模块可以定义与自身业务相关的资源,如:Routes、Controllers、Services、Models、Middlewares、Config、i18n语言资源,等等。而且这些元素可以编译打包成一个js文件,同时也可以进行丑化,从而保护商业代码。由于这种模块化的开发体系,也方便把编译打包的模块直接发布到NPM仓库或者模块市场,与社区分享,参见:模块编译与发布
  2. 模块后端隔离:以自定义的Loader加载器为基础,对模块后端的Routes、Controllers、Services、Models、Config等元素进行了命名空间隔离处理,避免模块之间的变量污染与冲突
  3. Bean容器与AOP编程:基于原生JS(Vanilla JS)实现了更轻量、更灵活的Bean容器,并可以通过AOP机制进行扩展,参见:Bean
  4. 原生分布式架构:EggJS原有的Worker + Agent进程模型,对于单机而言非常便利。但是面对多机集群,特别是基于docker的集群部署而言,Agent进程就失去了用武之地。更重要的是,如果一开始基于Agent进程进行开发,后续很难平滑的过渡到分布式场景。因此,egg-born-backend采用Redis,从框架底层就开始原生分布式的架构设计,并衍生出了Broadcast、Queue、Schedule、Startup等一系列分布式的开发组件,方便我们从一开始就进行分布式的开发。因此当系统起量后,可以轻松做集群扩展,参见:Broadcast, Queue, Schedule, Startup

5. 第五层:EggBornJS

egg-born-frontegg-born-backend,再加上一些周边工具,共同构成了EggBornJS,也就是CabloyJS研发历程的第一阶段

6. 第六层:CabloyJS

CabloyJS在EggBornJS的基础上,研发了一套核心全局模块,实现了一系列业务支撑特性,并将这些特性进行有机的组合,形成完整而灵活的上层生态架构,从而支持具体的业务开发进程

7. 第七层:Project(项目)

实际的项目由全局模块局部模块构成

  • 全局模块:CabloyJS内置的核心模块、来自NPM仓库或者模块市场的第三方模块,统称为全局模块,一般安装在node_modules目录
  • 局部模块:项目实际的开发工作一般在局部模块中展开。局部模块位于项目目录内,参见:新建模块

信念

凡是可以用JavaScript来写的应用,最终都会用JavaScript来写 | Atwood定律

相信,Javascript的深度探索者都会被这句名言激发,共同努力,为Javascript生态添砖加瓦,构建更繁荣的应用生态

CabloyJS正是对这一名言的探索之作。欢迎您也加入CabloyJS的社区生态,一起促进Javascript的繁荣与应用

名称的由来

1. EggBorn

这个名称的由来比较简单,因为有了Egg(后端框架),所以就有了EggBorn。有一部动画片叫《天书奇谭》,里面的萌主就叫“蛋生”,我很喜欢看(不小心暴露了年龄😅)

2. Cabloy

Cabloy来自蓝精灵的魔法咒语,拼对了Cabloy这个单词就会有神奇的效果。同样,CabloyJS是有关化学的魔法,基于模块的组合与生化反应,您将实现您想要的任何东西

部分特性摘要

>>>>> 第一部分: 基础功能

>>>>> 第二部分: 业务功能

>>>>> 第三部分: 解决方案

由于CabloyJS提供了大量的前端组件和后端特性,使得开发具体场景的业务也变得非常方便、流畅。CabloyJS仍然通过提供不同的业务模块来支援不同的业务场景开发

目前,CabloyJS提供了以下业务场景的解决方案

名称 说明
Cabloy-CMS 动静结合(即JAMStack模式)的CMS,可以快速构建企业网站博客技术文档社区商城等Web应用
Cabloy-Community 基于Cabloy-CMS开发的社区(论坛)Web应用
Cabloy-微信 微信接口模块,当前整合了微信公众号微信Web登录微信小程序的接口,达到开箱即用的使用效果。在Cabloy-微信的基础上,可以很方便的开发各类微信业务系统
Cabloy-企业微信 企业微信接口模块,当前整合了自建应用企业微信小程序的接口,达到开箱即用的使用效果。在Cabloy-企业微信的基础上,可以很方便的开发各类企业微信业务系统
Cabloy-钉钉 钉钉接口模块,当前整合了H5微应用钉钉小程序的接口,达到开箱即用的使用效果。在Cabloy-钉钉的基础上,可以很方便的开发各类钉钉业务系统
Cabloy-Uniapp Cabloy-Uniapp专门为Uniapp应用提供了一套量身定制的前端SDK,用于便捷的访问CabloyJS提供的所有API接口,让Uniapp前端开发再无后顾之忧

资源

- 英文版

- 中文版

- CabloyJS官方交流群

请添加个人微信,联系加群,备注:加群

wx-zhennann

- 图片

一图胜千言: 如何学习使用CabloyJS

how-to-read

预览

  • 白色主题

theme-light

  • 暗色主题

theme-dark

  • 风信子主题

theme-hyacinth

  • 灿烂主题

theme-brilliant

  • 显示侧边栏

theme-light-panel

  • 移动端风格

theme-light-mobile

License

MIT