<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>zhennann (健哥)</title>
    <link>https://beta.w2solo.com/zhennann</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>一文讲透 CabloyJS 全栈框架的来龙去脉</title>
      <description>&lt;h2 id="本文受众"&gt;&lt;strong&gt;本文受众&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;咱们做软件开发，就好比是建造一幢幢房屋，一座座桥梁，既可以是北方宫殿的巍峨，也可以有南方庭院的雅致，更可以是横跨群山的峻险与孤悬。那么，不同的语言、不同的框架也都由其内在的秉质吸引着一批粉丝，坚持不懈的耕耘，营造出不同的生态，呈现出不同的开发风格和开发体验。正如&lt;code&gt;Rails之于Ruby&lt;/code&gt;，&lt;code&gt;Lavaral之于PHP&lt;/code&gt;，&lt;code&gt;Django之于Python&lt;/code&gt;，&lt;code&gt;Spring Boot之于Java&lt;/code&gt;。那么，又是什么之于 Javascript 呢？毋庸置疑，Javascript 面对着更多的使用场景，前端、后端、移动端、IOT，等等。不同的场景都有出色的解决方案存在。而且，基于不同的使用偏好，又分裂出 Javascript 和 Typescript 两个风格体系。那么，基于业务开发而言，就目前的 Node 生态可以说，&lt;code&gt;Nest之于Typescript&lt;/code&gt;，&lt;code&gt;Cabloy之于Javascript&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;正因为面对业务开发，不同的语言、不同的框架，会有不同的解决方案和风格体验。因此，不论您使用 CabloyJS 或者不使用 CabloyJS，都有必要进来看看在坚守&lt;code&gt;原生Javascript&lt;/code&gt;（Vanilla JS）的土壤上，可以开出怎样的花朵。因此，不论您是&lt;code&gt;前端开发&lt;/code&gt;、&lt;code&gt;后端开发&lt;/code&gt;、&lt;code&gt;全栈开发&lt;/code&gt;，或者&lt;code&gt;其他语言的粉丝&lt;/code&gt;，或者&lt;code&gt;技术经理&lt;/code&gt;、&lt;code&gt;产品经理&lt;/code&gt;、&lt;code&gt;项目经理&lt;/code&gt;，都可以从 CabloyJS 提供的文档和视频中汲取不一样的解题思路和方法，相互交流，相互借鉴，共同进步！&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;在英语语境中，原生 Javascript 有一个专属名称：Vanilla JS。而 Vanilla 有香草🌿之意，看来所言不虚&lt;/p&gt;
&lt;/blockquote&gt;
&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th style="text-align:left;"&gt;&lt;strong&gt;语言&lt;/strong&gt;&lt;/th&gt;
&lt;th style="text-align:left;"&gt;&lt;strong&gt;框架&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:left;"&gt;Ruby&lt;/td&gt;
&lt;td style="text-align:left;"&gt;Rails&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:left;"&gt;PHP&lt;/td&gt;
&lt;td style="text-align:left;"&gt;Lavaral&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:left;"&gt;Python&lt;/td&gt;
&lt;td style="text-align:left;"&gt;Django&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:left;"&gt;Java&lt;/td&gt;
&lt;td style="text-align:left;"&gt;Spring Boot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:left;"&gt;Typescript&lt;/td&gt;
&lt;td style="text-align:left;"&gt;Nest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align:left;"&gt;Javascript&lt;/td&gt;
&lt;td style="text-align:left;"&gt;Cabloy&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h2 id="CabloyJS是什么"&gt;CabloyJS 是什么&lt;/h2&gt;
&lt;p&gt;CabloyJS 是一款自带&lt;code&gt;工作流引擎&lt;/code&gt;的 Node.js 全栈框架，一款&lt;code&gt;面向开发者&lt;/code&gt;的低代码开发平台，更是一款兼具低代码的&lt;code&gt;开箱即用&lt;/code&gt;和专业代码的&lt;code&gt;灵活定制&lt;/code&gt;的 PAAS 平台。只需一套代码，即可同时实现&lt;code&gt;中后台管理系统&lt;/code&gt;和&lt;code&gt;前台应用&lt;/code&gt;。只需一套代码，即可同时跨端&lt;code&gt;pc&lt;/code&gt;和&lt;code&gt;mobile&lt;/code&gt;，并且&lt;code&gt;mobile端&lt;/code&gt;是接近原生体验&lt;/p&gt;

&lt;p&gt;CabloyJS 内置的每一项特性都做到精心调校，均体现了从&lt;code&gt;开箱即用&lt;/code&gt;到&lt;code&gt;灵活定制&lt;/code&gt;的无缝衔接，包括：角色系统、用户认证、菜单权限、数据权限、表单渲染、表单验证、工作流引擎、字典、仪表板、在线推送、页面主题、多语言国际化、CMS 渲染引擎、微信接口、企业微信接口、钉钉接口，等等&lt;/p&gt;
&lt;h2 id="技术栈"&gt;&lt;strong&gt;技术栈&lt;/strong&gt;&lt;/h2&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;场景&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;技术栈&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;前端&lt;/td&gt;
&lt;td&gt;vue2 + framework7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;后端&lt;/td&gt;
&lt;td&gt;koa2 + egg2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;数据库&lt;/td&gt;
&lt;td&gt;mysql&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;分布式（缓存/队列/消息）&lt;/td&gt;
&lt;td&gt;redis、bullmq、websocket&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Markdown 富文本编辑&lt;/td&gt;
&lt;td&gt;Prosemirror&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h2 id="在线演示"&gt;在线演示&lt;/h2&gt;
&lt;p&gt;CabloyJS 提供了大量在线演示：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;演示如何在一套代码中同时开发&lt;code&gt;B端中后台管理系统&lt;/code&gt;和&lt;code&gt;C端前台应用&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;演示如何在一套代码中同时跨端&lt;code&gt;pc&lt;/code&gt;和&lt;code&gt;mobile&lt;/code&gt;，并且&lt;code&gt;mobile端&lt;/code&gt;是接近原生体验&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;因此，强烈建议您移步查看：&lt;a href="https://cabloy.com/zh-cn/articles/demo-online.html" rel="nofollow" target="_blank" title=""&gt;在线演示&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;凡是可以用 JavaScript 来写的应用，最终都会用 JavaScript 来写 | Atwood 定律&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;如果您想感受不同的 NodeJS 全栈开发体验，一定要试试自带工作流引擎的 CabloyJS 全栈开源框架。为了提升业务层面的开发效率和开发体验，CabloyJS 在前端和后端均提供了大量实用的工具和组件&lt;/p&gt;
&lt;h2 id="CabloyJS 解决了哪些现实痛点问题？"&gt;&lt;strong&gt;CabloyJS 解决了哪些现实痛点问题？&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;在 NodeJS 开发领域，目前 (截止 2022 年 11 月) 存在以下几个痛点问题：&lt;/p&gt;
&lt;h3 id="1. 中后台管理系统如何更优雅的支持移动端？"&gt;&lt;strong&gt;1. 中后台管理系统如何更优雅的支持移动端？&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;随着移动终端的普及和升级换代，大量业务场景都需要移动端的支持，比如管理层需要通过手机查看统计数据、审核业务单据；运维人员通过手机远程查看服务器状态，并进行调整优化&lt;/p&gt;

&lt;p&gt;我们知道，市面上大多数中后台管理系统，都是优先适配 PC 端，然而移动端体验却不佳，处于&lt;code&gt;勉强可用，但不好用&lt;/code&gt;的阶段&lt;/p&gt;

&lt;p&gt;此外，大多数&lt;code&gt;XXX Admin框架&lt;/code&gt;和&lt;code&gt;中后台管理框架&lt;/code&gt;其本质是&lt;code&gt;代码模版&lt;/code&gt;。在具体开发项目时，直接在&lt;code&gt;代码模版&lt;/code&gt;中编写代码。这样，虽然修改起来很直接，但是不利于模版的持续升级和优化；也不利于业务代码的持续沉淀和迁移（至其他项目）。因此，当把&lt;code&gt;代码模版&lt;/code&gt;从源码仓库下载下来之后，&lt;code&gt;修改三分之一&lt;/code&gt;，&lt;code&gt;增加三分之一&lt;/code&gt;，&lt;code&gt;删减三分之一&lt;/code&gt;，从此就与&lt;code&gt;代码模版&lt;/code&gt;的后续升级版本绝缘了&lt;/p&gt;
&lt;h3 id="2. NodeJS 领域没有好用的工作流引擎！"&gt;&lt;strong&gt;2. NodeJS 领域没有好用的工作流引擎！&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;如果单说 CRUD，大多数编程语言的开发框架都可以轻松实现，这不应该成为 NodeJS 开发业务系统的核心优势。若要让 NodeJS 深入业务领域的开发，&lt;code&gt;工作流引擎&lt;/code&gt;是一个绕不过去的核心组件&lt;/p&gt;
&lt;h3 id="3. 拖拽式低代码平台已经成为鸡肋方案！"&gt;&lt;strong&gt;3. 拖拽式低代码平台已经成为鸡肋方案！&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;大多数业务表单不仅仅是一些字段的简单组合和增删改查，不同的业务都有自己独特的业务诉求，往往需要前端界面的定制和后端逻辑的定制。拖拽式低代码平台，对于业务人员而言没有足够的工具进行深入定制，对于研发人员而言也没有足够的机制深入开发&lt;/p&gt;

&lt;p&gt;许多拖拽式低代码平台认识到了这一点，所以针对不同的业务场景提供官方预配置的套装解决方案，这同样也把业务人员和研发人员置于&lt;code&gt;不上不下&lt;/code&gt;的尴尬境地，成为&lt;code&gt;食之无味 弃之可惜&lt;/code&gt;的鸡肋平台&lt;/p&gt;
&lt;h2 id="CabloyJS 亮点介绍"&gt;&lt;strong&gt;CabloyJS 亮点介绍&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;基于上述分析的问题，CabloyJS 实现了如下&lt;code&gt;功能三大亮点&lt;/code&gt;和&lt;code&gt;架构三大亮点&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="1. 功能三大亮点"&gt;&lt;strong&gt;1. 功能三大亮点&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1）自适应布局：pc = mobile + pad&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CabloyJS 首创独树一帜的&lt;code&gt;pc = mobile + pad&lt;/code&gt;跨端自适应布局机制：只需要一套代码，就可以同时兼容&lt;code&gt;mobile端&lt;/code&gt;和&lt;code&gt;pc端&lt;/code&gt;。&lt;code&gt;mobile端&lt;/code&gt;达到原生效果，同时将&lt;code&gt;mobile端&lt;/code&gt;的操控体验和开发模式无缝带入&lt;code&gt;pc端&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;请大家分别在 PC 端和手机端打开&lt;code&gt;演示链接&lt;/code&gt;: &lt;a href="https://test.cabloy.com/" rel="nofollow" target="_blank"&gt;https://test.cabloy.com/&lt;/a&gt; ，来体会与众不同的自适应机制&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2）基于 JSON Schema 的表单自动渲染与数据验证引擎&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;3）内置 NodeJS 工作流引擎&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CabloyJS 充分利用 JS 语言的灵活性和 JSON 格式的便捷性，提供的 &lt;code&gt;NodeJS工作流引擎&lt;/code&gt;远比 JAVA 领域的&lt;code&gt;Activiti&lt;/code&gt; 简洁易用&lt;/p&gt;

&lt;p&gt;比如，我们一般只知道如何使用&lt;code&gt;Activiti&lt;/code&gt;中提供的&lt;code&gt;活动节点&lt;/code&gt;和&lt;code&gt;边界事件&lt;/code&gt;，却很少有途径来了解如何开发&lt;code&gt;自定义的活动节点&lt;/code&gt;和&lt;code&gt;自定义的边界事件&lt;/code&gt;。由于&lt;code&gt;Activiti&lt;/code&gt;的架构繁杂，大多数人甚至不愿意尝试去阅读源码。但是 CabloyJS 提供的&lt;code&gt;工作流引擎&lt;/code&gt;却可以轻松的定制所有的工作流元素，而且源码层次清晰，易于学习&lt;/p&gt;
&lt;h3 id="2. 架构三大亮点"&gt;&lt;strong&gt;2. 架构三大亮点&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;作为一款面向开发者的低代码开发平台，为了将低代码的&lt;code&gt;开箱即用&lt;/code&gt;和专业代码的&lt;code&gt;灵活定制&lt;/code&gt;有机融合，CabloyJS 在架构层面主要做了以下几点：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1）模块化开发体系与模块隔离&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;为了满足大型业务系统开发的诉求，CabloyJS 采用&lt;code&gt;模块思维&lt;/code&gt;规划系统架构，以业务功能为单位（比如出差申请），将与业务功能相关的前端组件与后端逻辑组织为一个&lt;code&gt;业务模块&lt;/code&gt;，从而有利于业务功能的内聚与重用，也有利于以业务为单位进行团队分工&lt;/p&gt;

&lt;p&gt;此外，业务模块内部的页面、数据、逻辑、路由、配置等元素均进行了命名空间隔离处理，从而避免模块之间的变量污染与冲突。换句话说，当我们在自己的业务模块中为某个资源命名时，不用担心其他业务模块是否存在相同名称的资源，从而减少心智负担&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2）原生分布式架构&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;EggJS 的定位是框架的框架，CabloyJS 后端在 EggJS 的基础上采用&lt;code&gt;自定义Loader&lt;/code&gt;机制扩展出来了一套适配业务场景的新特性&lt;/p&gt;

&lt;p&gt;比如，EggJS 原有的&lt;code&gt;Worker + Agent&lt;/code&gt;进程模型，对于单机而言非常便利。但是面对多机集群，特别是基于&lt;code&gt;docker&lt;/code&gt;的集群部署而言，&lt;code&gt;Agent进程&lt;/code&gt;就失去了用武之地。更重要的是，如果一开始基于&lt;code&gt;Agent进程&lt;/code&gt;进行开发，后续很难平滑的过渡到分布式场景。因此，CabloyJS 后端采用&lt;code&gt;Redis&lt;/code&gt;，从框架底层就开始原生分布式的架构设计，并衍生出了&lt;code&gt;Broadcast、Queue、Schedule、Startup&lt;/code&gt;等一系列分布式的开发组件，方便我们从一开始就进行分布式的开发。因此当系统起量后，可以轻松做集群扩展，参见：&lt;a href="https://cabloy.com/zh-cn/articles/broadcast.html" rel="nofollow" target="_blank" title=""&gt;Broadcast&lt;/a&gt;, &lt;a href="https://cabloy.com/zh-cn/articles/queue.html" rel="nofollow" target="_blank" title=""&gt;Queue&lt;/a&gt;, &lt;a href="https://cabloy.com/zh-cn/articles/schedule.html" rel="nofollow" target="_blank" title=""&gt;Schedule&lt;/a&gt;, &lt;a href="https://cabloy.com/zh-cn/articles/startup.html" rel="nofollow" target="_blank" title=""&gt;Startup&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3）前后端分离，全平台跨端开发&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;通过前后端分离的架构设计，只需要一套代码就可以支持全平台业务的跨端开发，包括&lt;code&gt;B端后台管理应用&lt;/code&gt;和&lt;code&gt;C端前台应用&lt;/code&gt;&lt;/p&gt;
&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;平台&lt;/th&gt;
&lt;th&gt;前端&lt;/th&gt;
&lt;th&gt;后端&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC：Web&lt;/td&gt;
&lt;td&gt;CabloyJS 前端&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC：Exe&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + Electron&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile：IOS&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + Cordova&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile：Android&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + Cordova&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;微信公众号&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + 微信 API&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;企业微信&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + 企业微信 API&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;钉钉&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + 钉钉 API&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slack&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + Slack API&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;小程序：微信、支付宝等&lt;/td&gt;
&lt;td&gt;Uni-app + CabloyJS 前端 SDK&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;后端&lt;/code&gt;：由于完整的前后端分离设计，只需开发一套 CabloyJS 后端代码即可&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;前端&lt;/code&gt;：所有可基于 H5 的场景，只需开发一套 CabloyJS 前端代码即可&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;小程序&lt;/code&gt;：提供 CabloyJS 前端 SDK 让 Uni-app 可以轻松对接 CabloyJS 后端代码&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="CabloyJS可以开发什么系统"&gt;CabloyJS 可以开发什么系统&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;可以开发&lt;code&gt;多租户SAAS业务系统&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;可以开发前后端分离的&lt;code&gt;后台业务管理系统&lt;/code&gt;，如 OA、CRM、ERP、电商，等等&lt;/li&gt;
&lt;li&gt;可以开发&lt;code&gt;JAMStack&lt;/code&gt;架构的&lt;code&gt;CMS内容管理系统&lt;/code&gt;，支持 SEO 优化，如博客、技术文档、社区、知识店铺，等等&lt;/li&gt;
&lt;li&gt;既可以先开发&lt;code&gt;后台业务管理系统&lt;/code&gt;，再延伸开发&lt;code&gt;CMS内容管理系统&lt;/code&gt;；也可以反过来，先开发&lt;code&gt;CMS内容管理系统&lt;/code&gt;，再延伸开发&lt;code&gt;后台业务管理系统&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;可以通过&lt;code&gt;Cordova&lt;/code&gt;开发各类 App 应用，支持 IOS、Android&lt;/li&gt;
&lt;li&gt;可以通过&lt;code&gt;Electron&lt;/code&gt;开发桌面应用&lt;/li&gt;
&lt;li&gt;可以开发微信公众号、企业微信、钉钉，等第三方平台的应用，解决&lt;code&gt;信息孤岛&lt;/code&gt;的问题&lt;/li&gt;
&lt;li&gt;可以为&lt;code&gt;Uniapp小程序&lt;/code&gt;开发后端 API 接口&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="CabloyJS的研发历程"&gt;CabloyJS 的研发历程&lt;/h2&gt;
&lt;p&gt;CabloyJS 从 2016 年启动开发，主要历经两个研发阶段：&lt;/p&gt;
&lt;h3 id="1. 第一阶段：EggBornJS"&gt;1. 第一阶段：EggBornJS&lt;/h3&gt;
&lt;p&gt;EggBornJS 关注的核心就是&lt;code&gt;模块化体系&lt;/code&gt;与&lt;code&gt;模块隔离&lt;/code&gt;，并以此实现一套完整的全栈开发框架&lt;/p&gt;

&lt;p&gt;比如模块&lt;code&gt;egg-born-front&lt;/code&gt;是框架前端的核心模块，模块&lt;code&gt;egg-born-backend&lt;/code&gt;是框架后端的核心模块，模块&lt;code&gt;egg-born&lt;/code&gt;是框架的命令行工具，用于创建项目骨架&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;这也是为什么所有业务模块都是以&lt;code&gt;egg-born-module-&lt;/code&gt;为命名前缀的原因&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="2. 第二阶段：CabloyJS"&gt;2. 第二阶段：CabloyJS&lt;/h3&gt;
&lt;p&gt;EggBornJS 只是一个基础的全栈开发框架，如果要支持业务的快速开发，还需要考虑许多与业务相关的支撑特性，如：&lt;code&gt;工作流引擎&lt;/code&gt;、&lt;code&gt;用户管理&lt;/code&gt;、&lt;code&gt;角色管理&lt;/code&gt;、&lt;code&gt;权限管理&lt;/code&gt;、&lt;code&gt;菜单管理&lt;/code&gt;、&lt;code&gt;参数设置管理&lt;/code&gt;、&lt;code&gt;表单验证&lt;/code&gt;、&lt;code&gt;登录机制&lt;/code&gt;，等等。特别是在前后端分离的场景下，对&lt;code&gt;权限管理&lt;/code&gt;的要求就提升到一个更高的水平&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;有了 EggBornJS，从此可复用的不仅仅是组件，还有业务模块&lt;/p&gt;

&lt;p&gt;有了 CabloyJS，您就可以快速开发各类业务应用&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="信念"&gt;信念&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;凡是可以用 JavaScript 来写的应用，最终都会用 JavaScript 来写 | Atwood 定律&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;CabloyJS 正是对这一名言的探索之作。欢迎您也加入 CabloyJS 的社区生态，一起促进 Javascript 的繁荣与应用&lt;/p&gt;
&lt;h2 id="名称的由来"&gt;名称的由来&lt;/h2&gt;&lt;h3 id="1. EggBorn"&gt;1. EggBorn&lt;/h3&gt;
&lt;p&gt;这个名称的由来比较简单，因为有了 Egg(后端框架)，所以就有了 EggBorn。有一部动画片叫《天书奇谭》，里面的萌主就叫 “蛋生”，我很喜欢看（不小心暴露了年龄😅）&lt;/p&gt;
&lt;h3 id="2. Cabloy"&gt;2. Cabloy&lt;/h3&gt;
&lt;p&gt;Cabloy 来自蓝精灵的魔法咒语，拼对了 Cabloy 这个单词就会有神奇的效果。同样，CabloyJS 是有关化学的魔法，基于模块的组合与生化反应，您将实现您想要的任何东西&lt;/p&gt;
&lt;h2 id="License"&gt;License&lt;/h2&gt;
&lt;p&gt;MIT，免费商用&lt;/p&gt;</description>
      <author>zhennann</author>
      <pubDate>Thu, 24 Nov 2022 11:53:35 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/3661</link>
      <guid>https://beta.w2solo.com/topics/3661</guid>
    </item>
    <item>
      <title>在一个项目中同时实现 “后台管理系统” 和 “前台应用”</title>
      <description>&lt;h2 id="微信一起点菜"&gt;&lt;strong&gt;微信一起点菜&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;一个月紧张而愉快的开发又过去了。在这个月，开发了一个&lt;code&gt;微信一起点菜&lt;/code&gt;项目，用来再次验证&lt;code&gt;CabloyJS全栈&lt;/code&gt;框架定制开发的灵活性和扩展性。实践再次证明，使用 CabloyJS 全栈框架开发项目确实可以做到&lt;code&gt;多快好省&lt;/code&gt;。因为：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;只需一个项目，既可同时实现 “后台管理系统” 和 “前台应用&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;只需一个项目，既可同时跨端 pc、mobile。mobile 端是接近原生体验&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;下面就以&lt;code&gt;微信一起点菜&lt;/code&gt;为例： &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;前台点菜应用：&lt;a href="https://test.cabloy.com/?appKey=diancai-h5%3AappDianCaiWechatH5&amp;amp;appIsolate=true" rel="nofollow" target="_blank"&gt;https://test.cabloy.com/?appKey=diancai-h5%3AappDianCaiWechatH5&amp;amp;appIsolate=true&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;后台商家管理系统：&lt;a href="https://test.cabloy.com/" rel="nofollow" target="_blank"&gt;https://test.cabloy.com/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;以上两个链接可以分别用 pc 和 mobile 打开。&lt;code&gt;全新交互体验，全新架构设计，试过便知&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="截图"&gt;&lt;strong&gt;截图&lt;/strong&gt;&lt;/h2&gt;&lt;h3 id="后台商家管理系统"&gt;&lt;strong&gt;后台商家管理系统&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;PC 端&lt;/p&gt;

&lt;p&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/75cfb17801d8421f84a5595186cebba3.png" title="" alt="dian-back-pc"&gt;&lt;/p&gt;

&lt;p&gt;Mobile 端&lt;/p&gt;

&lt;p&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/72ccc0e5680f4370b77bc50e46d6e53b.png" title="" alt="dian-back-mobile"&gt;&lt;/p&gt;
&lt;h3 id="前台点菜应用"&gt;&lt;strong&gt;前台点菜应用&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;PC 端&lt;/p&gt;

&lt;p&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/61b84c84071a4242b2af17cd36de1950.png" title="" alt="dian-front-pc"&gt;&lt;/p&gt;

&lt;p&gt;Mobile 端&lt;/p&gt;

&lt;p&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/87302575434146e587d14b4048973e83.png" title="" alt="dian-front-mobile-1"&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/8c47557558794085b41a6c5b51f48bc0.png" title="" alt="dian-front-mobile-2"&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/7a348332b1e84177a8b1f9041f43a729.png" title="" alt="dian-front-mobile-3"&gt;&lt;/p&gt;</description>
      <author>zhennann</author>
      <pubDate>Thu, 27 Oct 2022 07:34:04 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/3613</link>
      <guid>https://beta.w2solo.com/topics/3613</guid>
    </item>
    <item>
      <title>CabloyJS 4.22 重磅推出弹出式页面交互风格</title>
      <description>&lt;h2 id="升级说明"&gt;升级说明&lt;/h2&gt;
&lt;p&gt;我们知道 CabloyJS 提供了&lt;code&gt;pc=mobile+pad自适应布局&lt;/code&gt;机制，可以通过一套代码同时适配 mobile 端和 pc 端。基本思路就是优先适配 mobile 端，然后再把 mobile 端的交互体验带入 pc 端。因此，pc 端可以看作是许多 mobile 尺寸和 pad 尺寸页面组件的组合。在旧版本中，这些页面组件就像大大小小的手机和平板依次向右展开，可以称作&lt;code&gt;展开式&lt;/code&gt;交互风格&lt;/p&gt;

&lt;p&gt;新版本&lt;code&gt;CabloyJS 4.22&lt;/code&gt;提供了&lt;code&gt;弹出式&lt;/code&gt;交互风格。这样，用户可以根据 pc 电脑的尺寸大小和个人喜好，在这两个交互风格中随时切换&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;关于&lt;code&gt;pc=mobile+pad自适应布局&lt;/code&gt;机制的详细信息，请参见文档：&lt;a href="https://cabloy.com/zh-cn/articles/adaptive-layout.html" rel="nofollow" target="_blank" title=""&gt;自适应布局：pc = mobile + pad&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="意义"&gt;意义&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;CabloyJS 4.22&lt;/code&gt;的发布，重磅引入&lt;code&gt;弹出式&lt;/code&gt;页面交互风格，是及其主要的里程碑，将 CabloyJS 推入一个新的发展阶段&lt;/p&gt;

&lt;p&gt;是以为记2022年6月30日&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="预览"&gt;预览&lt;/h2&gt;&lt;h3 id="1. PC端（展开式）"&gt;1. PC 端（展开式）&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/487c6c81a8984da8822aaec7a5676c1e.gif" title="" alt="layoutpc-tile-zhcn"&gt;&lt;/p&gt;
&lt;h3 id="2. PC端（弹出式）"&gt;2. PC 端（弹出式）&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/95d88b18fd2347cd902507d44da81b1b.gif" title="" alt="layoutpc-popup-zhcn"&gt;&lt;/p&gt;
&lt;h3 id="3. Mobile端"&gt;3. Mobile 端&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/a0dd451e2bd74337ae026075aee9ca3d.gif" title="" alt="layoutmobile-zhcn"&gt;&lt;/p&gt;
&lt;h2 id="演示站点"&gt;演示站点&lt;/h2&gt;
&lt;p&gt;直接浏览 CabloyJS 的演示站点，增加更直观的感性认知&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;体验 CabloyJS 应对大型项目的&lt;code&gt;三驾马车&lt;/code&gt;：&lt;code&gt;套件&lt;/code&gt;、&lt;code&gt;模块&lt;/code&gt;、&lt;code&gt;App应用&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;体验与众不同的&lt;code&gt;pc=mobile+pad&lt;/code&gt;自适应布局风格，强烈推荐：分别用&lt;code&gt;PC&lt;/code&gt;和&lt;code&gt;Mobile&lt;/code&gt;单独体验演示站点。&lt;strong&gt;此言不虚，请您品鉴&lt;/strong&gt;！！！&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;演示站点：&lt;a href="https://test.cabloy.com/" rel="nofollow" target="_blank"&gt;https://test.cabloy.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;演示站点的二维码：
&lt;img src="https://admin.cabloy.com/api/a/file/file/download/d8cedc9dd14e4a10a06ba1627b6ed1a1.png" title="" alt="cabloy-test"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="相关链接"&gt;&lt;strong&gt;相关链接&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;文档: &lt;a href="https://cabloy.com/" rel="nofollow" target="_blank"&gt;https://cabloy.com/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub: &lt;a href="https://github.com/zhennann/cabloy" rel="nofollow" target="_blank"&gt;https://github.com/zhennann/cabloy&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>zhennann</author>
      <pubDate>Thu, 30 Jun 2022 21:43:38 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/3396</link>
      <guid>https://beta.w2solo.com/topics/3396</guid>
    </item>
    <item>
      <title>CabloyJS 的商业模式采用免费 + 增值模式，欢迎赐教</title>
      <description>&lt;h2 id="Cabloy商业模式"&gt;Cabloy 商业模式&lt;/h2&gt;
&lt;p&gt;为了支撑 CabloyJS 开源之路的长期发展，采用&lt;code&gt;免费+增值&lt;/code&gt;的商业模式，是否可行？如何改进？请大家多提意见&lt;/p&gt;
&lt;h3 id="1. 免费、开源"&gt;1. 免费、开源&lt;/h3&gt;
&lt;p&gt;CabloyJS 采用&lt;code&gt;免费+增值&lt;/code&gt;的商业模式。CabloyJS 框架本身是&lt;code&gt;开源、免费&lt;/code&gt;的，并且采用&lt;code&gt;MIT&lt;/code&gt;授权协议，同时还提供了大量的免费文档和免费视频。我们不需要花费一分钱，就可以使用 CabloyJS 开发各类&lt;code&gt;中小型项目&lt;/code&gt;，以及&lt;code&gt;大型项目&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;除了可以免费开发项目，我们还可以通过 CabloyJS 源码学习&lt;code&gt;NodeJS全栈开发&lt;/code&gt;方方面面的知识。有网友反馈说：&lt;code&gt;CabloyJS是一款教科书级的框架&lt;/code&gt;。我为 CabloyJS 注入了大量的心血，从宏观架构到微观编码，都反复的进行抉择和重构。如果您用 CabloyJS 做过项目，或者看过源码，一定可以感受到 “&lt;code&gt;字里行间&lt;/code&gt;” 的诚意。希望每一位有缘的您可以少一些加班、少一些 996，多一些休闲，多一些与家人的陪伴&lt;/p&gt;
&lt;h3 id="2. 增值、周边"&gt;2. 增值、周边&lt;/h3&gt;
&lt;p&gt;CabloyJS 通过&lt;code&gt;增值模块&lt;/code&gt;和&lt;code&gt;周边产品服务&lt;/code&gt;来获取回报。比如，有一款测试模块&lt;code&gt;test-party&lt;/code&gt;，包含大量前端和后端的测试用例和代码范例。在实际业务系统中不需要使用这个测试模块。但是这个测试模块却可以帮助我们更快的学习 CabloyJS，并且加速实际项目的开发。毋庸讳言，在实际开发中，针对不同的业务场景，我们可以把代码范例拷贝过来，再进行修正和调整，往往是最快的开发模式。而测试模块&lt;code&gt;test-party&lt;/code&gt;恰恰可以起到范例的作用。因此，把测试模块&lt;code&gt;test-party&lt;/code&gt;作为收费模块，就很好的平衡了&lt;code&gt;免费+增值&lt;/code&gt;的商业模式&lt;/p&gt;

&lt;p&gt;当然，不仅官方可以提供&lt;code&gt;增值模块&lt;/code&gt;，网友也可以提供&lt;code&gt;增值模块&lt;/code&gt;，为自己提供额外的增收途径&lt;/p&gt;

&lt;p&gt;此外，官方还会提供一系列&lt;code&gt;免费课程&lt;/code&gt;和&lt;code&gt;收费课程&lt;/code&gt;，提供&lt;code&gt;专业培训&lt;/code&gt;和&lt;code&gt;技术咨询&lt;/code&gt;等服务，从而构成 CabloyJS 的&lt;code&gt;周边产品和服务&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="相关链接"&gt;&lt;strong&gt;相关链接&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;官网: &lt;a href="https://cabloy.com/" rel="nofollow" target="_blank"&gt;https://cabloy.com/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub: &lt;a href="https://github.com/zhennann/cabloy" rel="nofollow" target="_blank"&gt;https://github.com/zhennann/cabloy&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>zhennann</author>
      <pubDate>Tue, 18 Jan 2022 16:52:22 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/3080</link>
      <guid>https://beta.w2solo.com/topics/3080</guid>
    </item>
    <item>
      <title>CabloyJS：一款 NodeJS 全栈开源框架，接单快手，创业神器</title>
      <description>&lt;h2 id="CabloyJS 是什么"&gt;CabloyJS 是什么&lt;/h2&gt;
&lt;p&gt;CabloyJS 是一款自带工作流引擎的 Node.js 全栈框架, &lt;code&gt;接单快手、创业神器&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;更进一步来说，CabloyJS 是一款直达业务场景诉求的 &lt;code&gt;PAAS 平台&lt;/code&gt;，兼具&lt;code&gt;低代码的开箱即用&lt;/code&gt;和&lt;code&gt;专业代码的灵活定制&lt;/code&gt;，角色系统、用户认证、菜单权限、数据权限、表单渲染、表单验证、工作流引擎、字典、仪表板、在线推送、页面主题、多语言国际化、CMS 渲染引擎、微信接口、企业微信接口、钉钉接口，等等，每一项特性都做到精心调校，均体现了从&lt;code&gt;开箱即用&lt;/code&gt;到&lt;code&gt;灵活定制&lt;/code&gt;的无缝衔接&lt;/p&gt;
&lt;h2 id="开发CabloyJS的初心"&gt;开发 CabloyJS 的初心&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;凡是可以用 JavaScript 来写的应用，最终都会用 JavaScript 来写 | Atwood 定律&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;为了打造与众不同的 NodeJS 全栈开发体验和用户体验，历经 5 年时间，全职研发 CabloyJS，代码提交数达 8000 多次，在前端和后端均提供了大量实用的工具和组件，主要实现了以下&lt;code&gt;功能三大亮点&lt;/code&gt;和&lt;code&gt;架构三大亮点&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="1. 功能三大亮点"&gt;1. 功能三大亮点&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;自适应布局：pc = mobile + pad

&lt;ul&gt;
&lt;li&gt;请大家分别在 PC 端和移动端打开&lt;code&gt;演示链接&lt;/code&gt;: &lt;a href="https://test.cabloy.com/" rel="nofollow" target="_blank" title=""&gt;https://test.cabloy.com/&lt;/a&gt; ，来体会与众不同的自适应机制&lt;/li&gt;
&lt;li&gt;市面上大多数后台管理系统，都是优先适配 PC 端，然而移动端体验却极差，想必大家都深有同感&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;基于 JSON Schema 的表单自动渲染与数据验证引擎：

&lt;ul&gt;
&lt;li&gt;通过在一处定义 JSON Schema，就可以同时支持前端的表单自动渲染和后端的数据验证，既能开箱即用又可灵活定制&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;内置 NodeJS 工作流引擎：

&lt;ul&gt;
&lt;li&gt;若要让 NodeJS 深入业务领域的开发，&lt;code&gt;工作流引擎&lt;/code&gt;是一个绕不过去的核心组件。CabloyJS 充分利用 JS 语言的灵活性和 JSON 格式的便捷性，提供的 NodeJS 工作流引擎远比 &lt;code&gt;Activiti&lt;/code&gt; 简洁易用&lt;/li&gt;
&lt;li&gt;比如我们都知道&lt;code&gt;Activiti&lt;/code&gt;中提供的&lt;code&gt;活动节点&lt;/code&gt;和&lt;code&gt;边界事件&lt;/code&gt;怎么使用，却很少有途径来了解如何开发&lt;code&gt;自定义的活动节点&lt;/code&gt;和&lt;code&gt;自定义的边界事件&lt;/code&gt;。但是 CabloyJS 提供的&lt;code&gt;工作流引擎&lt;/code&gt;却可以轻松的定制所有的工作流元素，而且源码层次清晰，易于学习&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="2. 架构三大亮点"&gt;2. 架构三大亮点&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;模块化开发体系与模块隔离

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

&lt;ul&gt;
&lt;li&gt;EggJS 的定位是框架的框架，CabloyJS 后端就是在 EggJS 的基础上采用&lt;code&gt;自定义Loader&lt;/code&gt;扩展出来了一套适配业务场景的新特性&lt;/li&gt;
&lt;li&gt;比如，EggJS 原有的&lt;code&gt;Worker + Agent&lt;/code&gt;进程模型，对于单机而言非常便利。但是面对多机集群，特别是基于&lt;code&gt;docker&lt;/code&gt;的集群部署而言，&lt;code&gt;Agent进程&lt;/code&gt;就失去了用武之地。更重要的是，如果一开始基于&lt;code&gt;Agent进程&lt;/code&gt;进行开发，后续很难平滑的过渡到分布式场景。因此，CabloyJS 后端采用&lt;code&gt;Redis&lt;/code&gt;，从框架底层就开始原生分布式的架构设计，并衍生出了&lt;code&gt;Broadcast、Queue、Schedule、Startup&lt;/code&gt;等一系列分布式的开发组件，方便我们从一开始就进行分布式的开发。因此当系统起量后，可以轻松做集群扩展，参见：&lt;a href="https://cabloy.com/zh-cn/articles/broadcast.html" rel="nofollow" target="_blank" title=""&gt;Broadcast&lt;/a&gt;, &lt;a href="https://cabloy.com/zh-cn/articles/queue.html" rel="nofollow" target="_blank" title=""&gt;Queue&lt;/a&gt;, &lt;a href="https://cabloy.com/zh-cn/articles/schedule.html" rel="nofollow" target="_blank" title=""&gt;Schedule&lt;/a&gt;, &lt;a href="https://cabloy.com/zh-cn/articles/startup.html" rel="nofollow" target="_blank" title=""&gt;Startup&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;前后端分离，全场景开发

&lt;ul&gt;
&lt;li&gt;通过前后端分离的架构设计，可以支持全场景业务的快速开发&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;场景&lt;/th&gt;
&lt;th&gt;前端&lt;/th&gt;
&lt;th&gt;后端&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC：Web&lt;/td&gt;
&lt;td&gt;CabloyJS 前端&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC：Exe&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + Electron&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile：IOS&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + Cordova&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile：Android&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + Cordova&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;微信公众号&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + 微信 API&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;企业微信&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + 企业微信 API&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;钉钉&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + 钉钉 API&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slack&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + Slack API&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;小程序：微信、支付宝等&lt;/td&gt;
&lt;td&gt;Uni-app + CabloyJS 前端 SDK&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;后端&lt;/code&gt;：由于完整的前后端分离设计，只需开发一套 CabloyJS 后端代码即可&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;前端&lt;/code&gt;：所有可基于 H5 的场景，只需开发一套 CabloyJS 前端代码即可&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;小程序&lt;/code&gt;：提供 CabloyJS 前端 SDK 让 Uni-app 可以轻松对接 CabloyJS 后端代码&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="低代码平台辨析"&gt;低代码平台辨析&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;拖拽式低代码平台

&lt;ul&gt;
&lt;li&gt;大多数业务表单不仅仅是一些字段的简单组合和增删改查，不同的业务都有自己独特的业务诉求，往往需要前端界面的定制和后端逻辑的定制。拖拽式低代码平台，对于业务人员而言没有足够的工具进行深入定制，对于研发人员而言也没有足够的机制深入开发&lt;/li&gt;
&lt;li&gt;许多拖拽式低代码平台认识到了这一点，所以针对不同的业务场景提供官方预配置的套装解决方案，这同样也把业务人员和研发人员置于不上不下的尴尬境地，成为&lt;code&gt;食之无味 弃之可惜&lt;/code&gt;的鸡肋平台&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编码式低代码平台&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CabloyJS 提供了大量基础工具和组件，使研发人员可以快速创建业务表单和审批流程（比拖拽式还要快），达到开箱即用的效果，同时又可以进行深入的定制开发&lt;/li&gt;
&lt;li&gt;此外，编码式低代码平台有利于版本变更管理，便于排查问题和持续升级维护&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;业务运营场景&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;其实，对于业务和运营场景而言，普适化的表单引擎并不是刚需，而是要根据具体的垂直场景提供可灵活定制的工具。比如，CabloyJS 提供的 CMS 内容管理和渲染引擎，可以满足大多数业务运营场景的诉求&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="谁会用这款 Node.js 全栈框架？"&gt;谁会用这款 Node.js 全栈框架？&lt;/h2&gt;&lt;h3 id="&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 0. 场景画像"&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 0. 场景画像&lt;/h3&gt;
&lt;p&gt;小王准备创业，需要开发一款多租户的 SAAS 业务系统，想请小明帮忙，希望能用有限的预算让系统尽快落地，以便尽早验证商业模型，从而控制创业的风险&lt;/p&gt;

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

&lt;p&gt;这时候，小明就希望能找到一个&lt;code&gt;全栈业务开发框架&lt;/code&gt;，内置各种功能特性，既开箱即用，又方便二次开发、灵活定制。在此基础上进行业务的快速开发，从而能保质保量的为朋友创业助一把力&lt;/p&gt;
&lt;h3 id="&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 1. 外包接单"&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 1. 外包接单&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;痛点&lt;/code&gt;：&lt;/p&gt;

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

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

&lt;p&gt;&lt;code&gt;优点&lt;/code&gt;：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;高效灵活&lt;/code&gt;：CabloyJS 历时 5 年精心打造的 Node.js 全栈框架，内置大量特性功能，开箱即用，同时又具有强大的可扩展性，便于定制开发&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;二次机会&lt;/code&gt;：CabloyJS 完善的基础建设，不仅让开发效率更高，而且可以引导和培育客户的日常操控体验，从而衍生出更多的业务需求和合作机会&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2. 初创企业"&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2. 初创企业&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;诉求&lt;/code&gt;：&lt;/p&gt;

&lt;p&gt;在创业成本高企、竞争越发激烈的今天，初创企业往往希望在尽短的时间、以尽少的成本，研发出&lt;code&gt;最小可用产品（MVP）&lt;/code&gt;，从而尽早发布测试、收集反馈、迭代优化&lt;/p&gt;

&lt;p&gt;&lt;code&gt;优点&lt;/code&gt;：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;尽快落地&lt;/code&gt;：CabloyJS 采用模块化体系，支持全场景开发，确保 MVP 产品尽快落地&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;保值(纵向深入)&lt;/code&gt;：CabloyJS 从底层内置分布式设计，并且内置工作流引擎等核心特性。当系统起量之后可以无缝支持集群部署，并在 MVP 产品的基础上继续深入开发更核心的业务，从而达到&lt;code&gt;保值&lt;/code&gt;的效果&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;增值(横向拓展)&lt;/code&gt;：CabloyJS 提供了&lt;code&gt;模块市场&lt;/code&gt;，可以通过&lt;code&gt;模块市场&lt;/code&gt;直接选购与自身业务需求相匹配的模块，以低成本快速实现业务需求，从而达到&lt;code&gt;增值&lt;/code&gt;的效果&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="CabloyJS 可以开发什么系统"&gt;CabloyJS 可以开发什么系统&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;可以开发&lt;code&gt;多租户SAAS业务系统&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;可以开发前后端分离的&lt;code&gt;后台业务管理系统&lt;/code&gt;，如 OA、CRM、ERP、电商，等等&lt;/li&gt;
&lt;li&gt;可以开发&lt;code&gt;JAMStack&lt;/code&gt;架构的&lt;code&gt;CMS内容管理系统&lt;/code&gt;，支持 SEO 优化，如博客、技术文档、社区、知识店铺，等等&lt;/li&gt;
&lt;li&gt;既可以先开发&lt;code&gt;后台业务管理系统&lt;/code&gt;，再延伸开发&lt;code&gt;CMS内容管理系统&lt;/code&gt;；也可以反过来，先开发&lt;code&gt;CMS内容管理系统&lt;/code&gt;，再延伸开发&lt;code&gt;后台业务管理系统&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;可以通过&lt;code&gt;Cordova&lt;/code&gt;开发各类 App 应用，支持 IOS、Android&lt;/li&gt;
&lt;li&gt;可以通过&lt;code&gt;Electron&lt;/code&gt;开发桌面应用&lt;/li&gt;
&lt;li&gt;可以开发微信公众号、企业微信、钉钉，等第三方平台的应用，解决&lt;code&gt;信息孤岛&lt;/code&gt;的问题&lt;/li&gt;
&lt;li&gt;可以为&lt;code&gt;Uniapp小程序&lt;/code&gt;开发后端 API 接口&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="CabloyJS 开发的正式系统"&gt;CabloyJS 开发的正式系统&lt;/h2&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;网站类型&lt;/th&gt;
&lt;th&gt;网站链接&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;后台管理系统（PC 布局）&lt;/td&gt;
&lt;td&gt;&lt;a href="https://admin.cabloy.com" rel="nofollow" target="_blank" title=""&gt;https://admin.cabloy.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;后台管理系统（Mobile 布局）&lt;/td&gt;
&lt;td&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/6cff1e6f30794cebbfe69f4c80bb3a81.png" title="" alt="cabloy-admin-qrcode"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;博客&lt;/td&gt;
&lt;td&gt;&lt;a href="https://zhennann.com" rel="nofollow" target="_blank" title=""&gt;https://zhennann.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;技术文档（英文）&lt;/td&gt;
&lt;td&gt;&lt;a href="https://cabloy.com/index.html" rel="nofollow" target="_blank" title=""&gt;https://cabloy.com/index.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;技术文档（中文）&lt;/td&gt;
&lt;td&gt;&lt;a href="https://cabloy.com/zh-cn/index.html" rel="nofollow" target="_blank" title=""&gt;https://cabloy.com/zh-cn/index.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;社区（英文）&lt;/td&gt;
&lt;td&gt;&lt;a href="https://community.cabloy.com/index.html" rel="nofollow" target="_blank" title=""&gt;https://community.cabloy.com/index.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;社区（中文）&lt;/td&gt;
&lt;td&gt;&lt;a href="https://community.cabloy.com/zh-cn/index.html" rel="nofollow" target="_blank" title=""&gt;https://community.cabloy.com/zh-cn/index.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;课程（英文）&lt;/td&gt;
&lt;td&gt;&lt;a href="https://course.cabloy.com/index.html" rel="nofollow" target="_blank" title=""&gt;https://course.cabloy.com/index.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;课程（中文）&lt;/td&gt;
&lt;td&gt;&lt;a href="https://course.cabloy.com/zh-cn/index.html" rel="nofollow" target="_blank" title=""&gt;https://course.cabloy.com/zh-cn/index.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cabloy 商店（英文）&lt;/td&gt;
&lt;td&gt;&lt;a href="https://store.cabloy.com/index.html" rel="nofollow" target="_blank" title=""&gt;https://store.cabloy.com/index.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cabloy 商店（中文）&lt;/td&gt;
&lt;td&gt;&lt;a href="https://store.cabloy.com/zh-cn/index.html" rel="nofollow" target="_blank" title=""&gt;https://store.cabloy.com/zh-cn/index.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h2 id="CabloyJS 的研发历程"&gt;CabloyJS 的研发历程&lt;/h2&gt;
&lt;p&gt;CabloyJS 从 2016 年启动开发，主要历经两个研发阶段：&lt;/p&gt;
&lt;h3 id="1. 第一阶段：EggBornJS"&gt;1. 第一阶段：EggBornJS&lt;/h3&gt;
&lt;p&gt;EggBornJS 关注的核心就是&lt;code&gt;模块化体系&lt;/code&gt;与&lt;code&gt;模块隔离&lt;/code&gt;，并以此实现一套完整的全栈开发框架&lt;/p&gt;

&lt;p&gt;比如模块&lt;code&gt;egg-born-front&lt;/code&gt;是框架前端的核心模块，模块&lt;code&gt;egg-born-backend&lt;/code&gt;是框架后端的核心模块，模块&lt;code&gt;egg-born&lt;/code&gt;是框架的命令行工具，用于创建项目骨架&lt;/p&gt;
&lt;h3 id="2. 第二阶段：CabloyJS"&gt;2. 第二阶段：CabloyJS&lt;/h3&gt;
&lt;p&gt;EggBornJS 只是一个基础的全栈开发框架，如果要支持业务的快速开发，还需要考虑许多与业务相关的支撑特性，如：&lt;code&gt;工作流引擎&lt;/code&gt;、&lt;code&gt;用户管理&lt;/code&gt;、&lt;code&gt;角色管理&lt;/code&gt;、&lt;code&gt;权限管理&lt;/code&gt;、&lt;code&gt;菜单管理&lt;/code&gt;、&lt;code&gt;参数设置管理&lt;/code&gt;、&lt;code&gt;表单验证&lt;/code&gt;、&lt;code&gt;登录机制&lt;/code&gt;，等等。特别是在前后端分离的场景下，对&lt;code&gt;权限管理&lt;/code&gt;的要求就提升到一个更高的水平&lt;/p&gt;

&lt;p&gt;CabloyJS 在 EggBornJS 的基础上，提供了一套核心业务模块，从而实现了一系列业务支撑特性，并将这些特性进行有机的组合，形成完整而灵活的上层生态架构，从而支持具体的业务开发进程&lt;/p&gt;
&lt;h2 id="信念"&gt;信念&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;凡是可以用 JavaScript 来写的应用，最终都会用 JavaScript 来写 | Atwood 定律&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;CabloyJS 正是对这一名言的探索之作。欢迎您也加入 CabloyJS 的社区生态，一起促进 Javascript 的繁荣与应用&lt;/p&gt;
&lt;h2 id="名称的由来"&gt;名称的由来&lt;/h2&gt;&lt;h3 id="1. EggBorn"&gt;1. EggBorn&lt;/h3&gt;
&lt;p&gt;这个名称的由来比较简单，因为有了 Egg(后端框架)，所以就有了 EggBorn。有一部动画片叫《天书奇谭》，里面的萌主就叫 “蛋生”，我很喜欢看（不小心暴露了年龄 😅）&lt;/p&gt;
&lt;h3 id="2. Cabloy"&gt;2. Cabloy&lt;/h3&gt;
&lt;p&gt;Cabloy 来自蓝精灵的魔法咒语，拼对了 Cabloy 这个单词就会有神奇的效果。同样，CabloyJS 是有关化学的魔法，基于模块的组合与生化反应，您将实现您想要的任何东西&lt;/p&gt;
&lt;h2 id="License"&gt;License&lt;/h2&gt;
&lt;p&gt;MIT&lt;/p&gt;</description>
      <author>zhennann</author>
      <pubDate>Fri, 17 Dec 2021 19:34:05 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/3010</link>
      <guid>https://beta.w2solo.com/topics/3010</guid>
    </item>
    <item>
      <title>历时 5 个月，6000+ 肝到 8000+，CabloyJS 4.12 震撼发布，及新版教程尝鲜</title>
      <description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;凡是可以用 JavaScript 来写的应用，最终都会用 JavaScript 来写 | Atwood 定律&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;如果您想感受&lt;code&gt;与众不同&lt;/code&gt;的 NodeJS 全栈开发体验，一定要试试&lt;code&gt;自带工作流引擎&lt;/code&gt;的 CabloyJS 全栈开源框架。为了提升业务层面的开发效率和开发体验，CabloyJS 在前端和后端均提供了大量实用的工具和组件&lt;/p&gt;
&lt;h2 id="CabloyJS 4.12"&gt;CabloyJS 4.12&lt;/h2&gt;
&lt;p&gt;CabloyJS 从&lt;code&gt;4.11&lt;/code&gt;升级到&lt;code&gt;4.12&lt;/code&gt;，历时 5 个月，Github 提交数从&lt;code&gt;6000+&lt;/code&gt;一路肝到&lt;code&gt;8000+&lt;/code&gt;，这次的功能更新绝对是诚意满满，一次爽到爆&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;新增特性&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;数据：增加 &lt;code&gt;simple&lt;/code&gt; 模式&lt;/li&gt;
&lt;li&gt;默认的业务数据都具有生命周期，即三个阶段：&lt;code&gt;草稿&lt;/code&gt;、&lt;code&gt;正式&lt;/code&gt;、&lt;code&gt;历史&lt;/code&gt;。&lt;code&gt;草稿&lt;/code&gt;到&lt;code&gt;正式&lt;/code&gt;之间还可以加入&lt;code&gt;审批流&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;新增的&lt;code&gt;simple&lt;/code&gt;模式，就是可以简化业务数据的生命周期，只保留&lt;code&gt;正式&lt;/code&gt;版本，从而满足一些简单业务数据的管理&lt;/li&gt;
&lt;li&gt;脏标记机制：所有 Form 表单均支持&lt;code&gt;脏标记&lt;/code&gt;机制。当有字段值变动时，Form 表单标题就会有醒目提示，并且当关闭当前表单页面时，也会提示用户&lt;code&gt;表单数据没有保存&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;测试：增加新的测试模块&lt;code&gt;test-note&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;演示&lt;code&gt;数据列表&lt;/code&gt;的布局切换：列表/卡片/表格&lt;/li&gt;
&lt;li&gt;演示&lt;code&gt;数据条目&lt;/code&gt;的布局切换：信息/正文 (Markdown)&lt;/li&gt;
&lt;li&gt;演示如何增加&lt;code&gt;便签&lt;/code&gt;部件，从而可以在&lt;code&gt;仪表板&lt;/code&gt;中直接编辑和查看便签数据&lt;/li&gt;
&lt;li&gt;测试：&lt;code&gt;test-party&lt;/code&gt; 模块&lt;/li&gt;
&lt;li&gt;演示如何增加&lt;code&gt;简单聊天&lt;/code&gt;部件，从而可以在&lt;code&gt;仪表板&lt;/code&gt;中进行直接的聊天互动&lt;/li&gt;
&lt;li&gt;工作流引擎：&lt;/li&gt;
&lt;li&gt;增加&lt;code&gt;转办&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;增加&lt;code&gt;代办&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;工作流引擎：&lt;/li&gt;
&lt;li&gt;增加&lt;code&gt;行为&lt;/code&gt;机制：从而实现与 activiti 中&lt;code&gt;边界事件&lt;/code&gt;所对应的应用场景

&lt;ul&gt;
&lt;li&gt;一个&lt;code&gt;节点&lt;/code&gt;可以附加多个&lt;code&gt;行为&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;行为&lt;/code&gt;可以指定专属的&lt;code&gt;边&lt;/code&gt;，从而进行&lt;code&gt;节点&lt;/code&gt;的迁移&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;增加一个具体的&lt;code&gt;行为&lt;/code&gt;实现: &lt;code&gt;超时处理&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;可以指定某个&lt;code&gt;审批节点&lt;/code&gt;的超时行为，一旦超时就跳转到指定的流程节点&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;工作流引擎：&lt;/li&gt;
&lt;li&gt;增加&lt;code&gt;网关节点&lt;/code&gt;，包括：

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;排他网关&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;并行网关&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;包含网关&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;数据字典：&lt;/li&gt;
&lt;li&gt;支持版本控制&lt;/li&gt;
&lt;li&gt;支持对字典单独授权&lt;/li&gt;
&lt;li&gt;支持多级树形字典&lt;/li&gt;
&lt;li&gt;内置：美国城市区划、中国城市区划&lt;/li&gt;
&lt;li&gt;通用的后端逻辑处理&lt;/li&gt;
&lt;li&gt;通用的前端渲染组件&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;增强&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Markdown：实现了一个&lt;code&gt;所见即所得&lt;/code&gt;的&lt;code&gt;Markdown富文本编辑器&lt;/code&gt;，&lt;strong&gt;绝对好用，一定要体验一下&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;JSON：重构了带格式化的&lt;code&gt;JSON编辑器&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="文档与教程："&gt;文档与教程：&lt;/h2&gt;
&lt;p&gt;伴随着 CabloyJS 4.12 新版功能的推出，还全新制作了一套教程。为了体现 CabloyJS&lt;code&gt;低代码的开箱即用&lt;/code&gt;和&lt;code&gt;专业代码的灵活定制&lt;/code&gt;，教程也由浅到深相应的分为几个部分：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://cabloy.com/zh-cn/articles/c8f7c13d56a94b75b6bbf84f0471ef24.html" rel="nofollow" target="_blank" title=""&gt;教程：业务表单与审批流&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://cabloy.com/zh-cn/articles/b0d03442aeac43eda2ef16556ad203d1.html" rel="nofollow" target="_blank" title=""&gt;教程：博客&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://cabloy.com/zh-cn/articles/85817f4eda93449fab67bc9bf0633633.html" rel="nofollow" target="_blank" title=""&gt;教程：文档&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://cabloy.com/zh-cn/articles/85817f4eda93449fab67bc9bf0633633.html" rel="nofollow" target="_blank" title=""&gt;教程：社区&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://cabloy.com/zh-cn/articles/98c7ad5fb03748e29a69236a5418400b.html" rel="nofollow" target="_blank" title=""&gt;教程：第三方平台&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://cabloy.com/zh-cn/articles/532e6433c1154a7587ae9d3ccb1242fc.html" rel="nofollow" target="_blank" title=""&gt;进阶&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="演示站点"&gt;演示站点&lt;/h2&gt;
&lt;p&gt;通过这套教程，可以让我们更快的了解 CabloyJS 的开发风格，以及可以用来做哪些事情。欢迎大家尝鲜、拍砖&lt;/p&gt;

&lt;p&gt;也可以在阅读教程的同时，直接浏览 CabloyJS 的演示站点，增加更直观的感性认知&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;演示站点：&lt;a href="https://test.cabloy.com/" rel="nofollow" target="_blank"&gt;https://test.cabloy.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;为了体验与众不同的&lt;code&gt;pc=mobile+pad&lt;/code&gt;自适应布局风格，一定要分别用&lt;code&gt;PC&lt;/code&gt;和&lt;code&gt;Mobile&lt;/code&gt;单独体验演示站点。&lt;strong&gt;此言不虚，请您品鉴&lt;/strong&gt;！！！&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;演示站点的二维码：
&lt;img src="https://admin.cabloy.com/api/a/file/file/download/d8cedc9dd14e4a10a06ba1627b6ed1a1.png" title="" alt="cabloy-test"&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>zhennann</author>
      <pubDate>Mon, 29 Nov 2021 23:23:37 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/2957</link>
      <guid>https://beta.w2solo.com/topics/2957</guid>
    </item>
    <item>
      <title>CabloyJS：一款自带工作流引擎的 NodeJS 全栈框架，接单快手、创业神器</title>
      <description>&lt;p&gt;为了让&lt;code&gt;独立开发&lt;/code&gt;、&lt;code&gt;外包接单&lt;/code&gt;这条路走得更顺一些，更远一些，我打磨了一款开源的 Node.js 全栈开发框架，用时 5 年、6000+ Commits、30 万 + 代码。希望能与独立开发同仁找机会一起合作，一起创造价值&lt;/p&gt;
&lt;h2 id="CabloyJS是什么"&gt;CabloyJS 是什么&lt;/h2&gt;
&lt;p&gt;CabloyJS 是一款自带工作流引擎的 Node.js 全栈框架, &lt;code&gt;接单快手、创业神器&lt;/code&gt;, 基于 koa + egg + vue + framework7 + mysql&lt;/p&gt;
&lt;h2 id="在线演示"&gt;在线演示&lt;/h2&gt;&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;场景&lt;/th&gt;
&lt;th&gt;链接/二维码&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC 端&lt;/td&gt;
&lt;td&gt;&lt;a href="https://test.cabloy.com/" rel="nofollow" target="_blank"&gt;https://test.cabloy.com/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile 端&lt;/td&gt;
&lt;td&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/5e34bb6f37b04a0299ba687cb3972c35.png" title="" alt="cabloy-demo-qrcode"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;h2 id="谁会用这款Node.js全栈框架？"&gt;谁会用这款 Node.js 全栈框架？&lt;/h2&gt;&lt;h3 id="&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 0. 场景画像"&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 0. 场景画像&lt;/h3&gt;
&lt;p&gt;小王准备创业，需要开发一款多租户的 SAAS 业务系统，想请小明帮忙，希望能用有限的预算让系统尽快落地，以便尽早验证商业模型，从而控制创业的风险&lt;/p&gt;

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

&lt;p&gt;这时候，小明就希望能找到一个&lt;code&gt;全栈业务开发框架&lt;/code&gt;，内置各种功能特性，既开箱即用，又方便二次开发、灵活定制。在此基础上进行业务的快速开发，从而能保质保量的为朋友创业助一把力&lt;/p&gt;
&lt;h3 id="&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 1. 外包接单"&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 1. 外包接单&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;痛点&lt;/code&gt;：&lt;/p&gt;

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

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

&lt;p&gt;&lt;code&gt;优点&lt;/code&gt;：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;高效灵活&lt;/code&gt;：CabloyJS 历时 5 年精心打造的 Node.js 全栈框架，内置大量特性功能，开箱即用，同时又具有强大的可扩展性，便于定制开发&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;二次机会&lt;/code&gt;：CabloyJS 完善的基础建设，不仅让开发效率更高，而且可以引导和培育客户的日常操控体验，从而衍生出更多的业务需求和合作机会&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2. 初创企业"&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2. 初创企业&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;诉求&lt;/code&gt;：&lt;/p&gt;

&lt;p&gt;在创业成本高企、竞争越发激烈的今天，初创企业往往希望在尽短的时间、以尽少的成本，研发出&lt;code&gt;最小可用产品（MVP）&lt;/code&gt;，从而尽早发布测试、收集反馈、迭代优化&lt;/p&gt;

&lt;p&gt;&lt;code&gt;优点&lt;/code&gt;：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;尽快落地&lt;/code&gt;：CabloyJS 采用模块化体系，支持全场景开发，确保 MVP 产品尽快落地&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;保值&lt;/code&gt;：CabloyJS 从底层内置分布式设计，并且内置工作流引擎等核心特性。当系统起量之后可以无缝支持集群部署，并在 MVP 产品的基础上继续深入开发更核心的业务，从而达到&lt;code&gt;保值&lt;/code&gt;的效果&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;增值&lt;/code&gt;：CabloyJS 提供了&lt;code&gt;模块市场&lt;/code&gt;，可以通过&lt;code&gt;模块市场&lt;/code&gt;直接选购与自身业务需求相匹配的模块，以低成本快速实现业务需求，从而达到&lt;code&gt;增值&lt;/code&gt;的效果&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="CabloyJS的商业模式"&gt;CabloyJS 的商业模式&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;开源免费&lt;/code&gt;：CabloyJS 全栈框架，开源免费，并提供大量文档、测试模块、视频课程等资源&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;模块市场&lt;/code&gt;：CabloyJS 提供了&lt;code&gt;模块市场&lt;/code&gt;。研发同仁可以在实际开发过程中不断沉淀通用的模块，发布到&lt;code&gt;模块市场&lt;/code&gt;，与平台共享收益。从而成为外包接单之外的&lt;code&gt;睡后收入&lt;/code&gt;，共同打造一个由&lt;code&gt;线性生长&lt;/code&gt;向&lt;code&gt;指数生长&lt;/code&gt;的通道&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;二级分销&lt;/code&gt;：&lt;code&gt;模块市场&lt;/code&gt;导入&lt;code&gt;二级分销&lt;/code&gt;的玩法，汇聚更多社会渠道资源，带动模块的销售&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;CabloyJS 先期制作了一套视频课程，导入了相同的&lt;code&gt;二级分销&lt;/code&gt;的玩法，欢迎品鉴&lt;/p&gt;

&lt;p&gt;&lt;code&gt;相关链接&lt;/code&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://course.cabloy.com/zh-cn/articles/about-fenxiao.html" rel="nofollow" target="_blank" title=""&gt;关于二级分销&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="CabloyJS的四大亮点"&gt;CabloyJS 的四大亮点&lt;/h2&gt;&lt;h3 id="&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 亮点1：自适应布局：pc = mobile + pad"&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 亮点 1：自适应布局：&lt;code&gt;pc = mobile + pad&lt;/code&gt;
&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;背景说明&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;对于前端开发而言，有一个很现实的问题：如何同时进行 pc 端和 mobile 端的开发？&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;传统的做法一般而言有两个：&lt;/p&gt;

&lt;p&gt;1）&lt;strong&gt;采用&lt;code&gt;css自适应媒体查询&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;由于原生 mobile 端的布局和 pc 端的布局是不同的。&lt;code&gt;css自适应媒体查询&lt;/code&gt;只是让 pc 端的页面在 mobile 端可用，但达不到&lt;code&gt;原生mobile端&lt;/code&gt;的效果&lt;/p&gt;

&lt;p&gt;比如，许多使用&lt;code&gt;bootstrap&lt;/code&gt;实现的博客；再比如，市面上绝大多数&lt;code&gt;后台管理系统模版&lt;/code&gt;。往往优先处理 pc 端的显示效果，然后采用&lt;code&gt;css自适应媒体查询&lt;/code&gt;来适配 mobile 端，从而在 mobile 端仅仅达到能看的程度，但绝对不好用&lt;/p&gt;

&lt;p&gt;2）&lt;strong&gt;采用两套代码&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;由于采用&lt;code&gt;css自适应媒体查询&lt;/code&gt;有很大的局限性，很多项目采用&lt;code&gt;两套代码&lt;/code&gt;来分别处理&lt;code&gt;pc端&lt;/code&gt;和&lt;code&gt;mobile端&lt;/code&gt;的布局显示。这样虽然解决了问题，但是同样的业务逻辑需要做两套代码，成本、时间、精力都得翻倍&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;解决之道：&lt;code&gt;pc = mobile + pad&lt;/code&gt;自适应布局&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;CabloyJS 首创&lt;code&gt;pc = mobile + pad&lt;/code&gt;的自适应布局机制：只需要一套代码，&lt;code&gt;mobile端&lt;/code&gt;达到原生效果，同时将&lt;code&gt;mobile端&lt;/code&gt;的操控体验和开发模式无缝带入&lt;code&gt;pc端&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;效果演示：进入演示网站&lt;a href="https://test.cabloy.com/" rel="nofollow" target="_blank" title=""&gt;https://test.cabloy.com/&lt;/a&gt;，然后调整窗口尺寸分别体验 pc 端和 mobile 端的效果&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 亮点2：模块化开发体系与模块隔离"&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 亮点 2：模块化开发体系与模块隔离&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;模块化体系&lt;/strong&gt;：CabloyJS 采用&lt;code&gt;模块思维&lt;/code&gt;规划系统架构，以业务功能为单位，将与业务功能相关的前端组件与后端逻辑组织为一个&lt;code&gt;业务模块&lt;/code&gt;，有利于业务功能的内聚与重用，从而便于沉淀通用的模块，然后发布到&lt;code&gt;模块市场&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;模块隔离&lt;/strong&gt;：模块的页面、数据、逻辑、路由、配置等元素均进行了命名空间隔离处理，避免模块之间的变量污染与冲突&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;全局模块与局部模块&lt;/strong&gt;：CabloyJS 内置了大量&lt;code&gt;全局模块&lt;/code&gt;，提供&lt;code&gt;工作流引擎&lt;/code&gt;、&lt;code&gt;用户管理&lt;/code&gt;、&lt;code&gt;角色管理&lt;/code&gt;、&lt;code&gt;权限管理&lt;/code&gt;、&lt;code&gt;菜单管理&lt;/code&gt;、&lt;code&gt;参数设置管理&lt;/code&gt;、&lt;code&gt;表单验证&lt;/code&gt;、&lt;code&gt;登录机制&lt;/code&gt;，等等诸多特性。具体的业务开发则在&lt;code&gt;局部模块&lt;/code&gt;中进行，架构清晰、层次分明，从而轻松应对业务规模的持续增长&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 亮点3：前后端分离，全场景开发"&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 亮点 3：前后端分离，全场景开发&lt;/h3&gt;
&lt;p&gt;通过前后端分离的架构设计，可以支持全场景业务的快速开发&lt;/p&gt;
&lt;table class="table table-bordered table-striped"&gt;
&lt;tr&gt;
&lt;th&gt;场景&lt;/th&gt;
&lt;th&gt;前端&lt;/th&gt;
&lt;th&gt;后端&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC：Web&lt;/td&gt;
&lt;td&gt;CabloyJS 前端&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC：Exe&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + Electron&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile：IOS&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + Cordova&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile：Android&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + Cordova&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;微信公众号&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + 微信 API&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;企业微信&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + 企业微信 API&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;钉钉&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + 钉钉 API&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slack&lt;/td&gt;
&lt;td&gt;CabloyJS 前端 + Slack API&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;小程序：微信、支付宝等&lt;/td&gt;
&lt;td&gt;Uni-app + CabloyJS 前端 SDK&lt;/td&gt;
&lt;td&gt;CabloyJS 后端&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;后端&lt;/code&gt;：由于完整的前后端分离设计，只需开发一套 CabloyJS 后端代码即可&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;前端&lt;/code&gt;：所有可基于 H5 的场景，只需开发一套 CabloyJS 前端代码即可&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;小程序&lt;/code&gt;：提供 CabloyJS 前端 SDK 让 Uni-app 可以轻松对接 CabloyJS 后端代码&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 亮点4：内置NodeJS工作流引擎"&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 亮点 4：内置 NodeJS 工作流引擎&lt;/h3&gt;
&lt;p&gt;众所周知，NodeJS 作为后端开发语言和运行环境，支持高并发、开发效率高，有口皆碑，但是大多用于&lt;code&gt;数据CRUD管理&lt;/code&gt;、&lt;code&gt;中间层聚合&lt;/code&gt;和&lt;code&gt;中间层代理&lt;/code&gt;等工具场景，很少深入到业务领域的核心。有许多采用 NodeJS 开发的&lt;code&gt;最小可用产品（MVP）&lt;/code&gt;最终会另起炉灶重构，这是原因之一&lt;/p&gt;

&lt;p&gt;究其根源，NodeJS 作为业务开发平台，还缺少许多核心的基础构件，&lt;code&gt;NodeJS工作流引擎&lt;/code&gt;便是其一。CabloyJS 4.0 重点开发了 NodeJS 工作流引擎，并作为内置的基础核心模块（同样是开源、免费），近一步拓展了 NodeJS 在后端的应用场景，为深入研发各类商业业务逻辑，提供了基础支撑&lt;/p&gt;
&lt;h2 id="CabloyJS的研发历程"&gt;CabloyJS 的研发历程&lt;/h2&gt;
&lt;p&gt;CabloyJS 从 2016 年启动开发，主要历经两个研发阶段：&lt;/p&gt;
&lt;h3 id="1. 第一阶段：EggBornJS"&gt;1. 第一阶段：EggBornJS&lt;/h3&gt;
&lt;p&gt;EggBornJS 关注的核心就是&lt;code&gt;模块化体系&lt;/code&gt;与&lt;code&gt;模块隔离&lt;/code&gt;，并以此实现一套完整的全栈开发框架&lt;/p&gt;

&lt;p&gt;比如模块&lt;code&gt;egg-born-front&lt;/code&gt;是框架前端的核心模块，模块&lt;code&gt;egg-born-backend&lt;/code&gt;是框架后端的核心模块，模块&lt;code&gt;egg-born&lt;/code&gt;是框架的命令行工具，用于创建项目骨架&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;这也是为什么所有业务模块都是以&lt;code&gt;egg-born-module-&lt;/code&gt;为命名前缀的原因&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="2. 第二阶段：CabloyJS"&gt;2. 第二阶段：CabloyJS&lt;/h3&gt;
&lt;p&gt;EggBornJS 只是一个基础的全栈开发框架，如果要支持业务的快速开发，还需要考虑许多与业务相关的支撑特性，如：&lt;code&gt;工作流引擎&lt;/code&gt;、&lt;code&gt;用户管理&lt;/code&gt;、&lt;code&gt;角色管理&lt;/code&gt;、&lt;code&gt;权限管理&lt;/code&gt;、&lt;code&gt;菜单管理&lt;/code&gt;、&lt;code&gt;参数设置管理&lt;/code&gt;、&lt;code&gt;表单验证&lt;/code&gt;、&lt;code&gt;登录机制&lt;/code&gt;，等等。特别是在前后端分离的场景下，对&lt;code&gt;权限管理&lt;/code&gt;的要求就提升到一个更高的水平&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;有了 EggBornJS，从此可复用的不仅仅是组件，还有业务模块&lt;/p&gt;

&lt;p&gt;有了 CabloyJS，您就可以快速开发各类业务应用&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="CabloyJS架构图与技术栈"&gt;CabloyJS 架构图与技术栈&lt;/h2&gt;
&lt;p&gt;CabloyJS 并不盲目重新造轮子，而是采用业界成熟的开源框架和组件，经过有机组合、再次创新，补充业务层面的基建特性，从而具备了丰富的功能特性，又保持了强大的可扩展性&lt;/p&gt;

&lt;p&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/34f4b4ffc0e840ffa1631f69c1efe39f.png" title="" alt="cabloy-2x"&gt;&lt;/p&gt;
&lt;h3 id="1. 第一层：NodeJS"&gt;1. 第一层：NodeJS&lt;/h3&gt;
&lt;p&gt;基于 NodeJS，从而使得前后端均可以采用 Javascript 语言进行全栈开发，从而显著提升开发效率&lt;/p&gt;
&lt;h3 id="2. 第二层：VueJS、KoaJS"&gt;2. 第二层：VueJS、KoaJS&lt;/h3&gt;&lt;h3 id="3. 第三层：Framework7、EggJS"&gt;3. 第三层：Framework7、EggJS&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;前端&lt;/code&gt;：采用 Framework7 作为主体的 UI 组件库，同时根据业务需要搭配其他 UI 组件库，如 AntD Vue 的表格组件、AntV X6 工作流绘制组件、ChartJS 图表组件，等等&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;后端&lt;/code&gt;：采用 EggJS 作为底层框架，从而沿用了 EggJS 成熟的基础建设和丰富的插件生态&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="4. 第四层：egg-born-front、egg-born-backend"&gt;4. 第四层：egg-born-front、egg-born-backend&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;egg-born-front&lt;/code&gt;：是前端的核心模块，主要进行了以下几方面的工作：&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;模块前端隔离&lt;/strong&gt;：对模块前端的页面、数据、逻辑、路由、配置等元素进行了命名空间隔离处理，避免模块之间的变量污染与冲突&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;模块加载机制&lt;/strong&gt;：只需给模块名称增加一个&lt;code&gt;sync&lt;/code&gt;后缀，即可实现模块的&lt;code&gt;同步加载&lt;/code&gt;和&lt;code&gt;异步加载&lt;/code&gt;，参见：&lt;a href="https://cabloy.com/zh-cn/articles/3b1a0aeb1440499bac33a9823e425d57.html#_43" rel="nofollow" target="_blank" title=""&gt;加载机制&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pc=mobile+pad 自适应布局&lt;/strong&gt;：对 Framework7 进行了改造，只需要一套代码，&lt;code&gt;mobile端&lt;/code&gt;达到原生效果，同时将&lt;code&gt;mobile端&lt;/code&gt;的操控体验和开发模式无缝带入&lt;code&gt;pc端&lt;/code&gt;，参见&lt;a href="https://cabloy.com/zh-cn/articles/adaptive-layout.html" rel="nofollow" target="_blank" title=""&gt;自适应布局：pc = mobile + pad&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;组件环境对象&lt;/strong&gt;：向 Vue 组件实例注入了大量环境对象，方便开发，参见：&lt;a href="https://cabloy.com/zh-cn/articles/6234d0ad3bbe4c1cb83d4b556f894eb5.html" rel="nofollow" target="_blank" title=""&gt;Component&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;egg-born-backend&lt;/code&gt;：是后端的核心模块，主要进行了以下几方面的工作： &lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;模块化开发体系&lt;/strong&gt;：EggJS 原有的目录结构并不适合模块化的开发风格。但是 EggJS 提供了强大的扩展机制，允许提供自定义的 Loader 加载器。通过开发自定义的 Loader 加载器，实现了以业务模块为单元的目录结构。每个业务模块可以定义与自身业务相关的资源，如：&lt;code&gt;Routes、Controllers、Services、Models、Middlewares、Config、i18n语言资源&lt;/code&gt;，等等。而且这些元素可以&lt;code&gt;编译打包&lt;/code&gt;成一个 js 文件，同时也可以进行&lt;code&gt;丑化&lt;/code&gt;，从而&lt;code&gt;保护商业代码&lt;/code&gt;。由于这种模块化的开发体系，也方便把编译打包的模块直接发布到&lt;code&gt;NPM仓库&lt;/code&gt;或者&lt;code&gt;模块市场&lt;/code&gt;，与社区分享，参见：&lt;a href="https://cabloy.com/zh-cn/articles/beef7cd0ab0a495284797a5af933a155.html" rel="nofollow" target="_blank" title=""&gt;模块编译与发布&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;模块后端隔离&lt;/strong&gt;：以自定义的 Loader 加载器为基础，对模块后端的&lt;code&gt;Routes、Controllers、Services、Models、Config&lt;/code&gt;等元素进行了命名空间隔离处理，避免模块之间的变量污染与冲突&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bean 容器与 AOP 编程&lt;/strong&gt;：基于原生 JS（Vanilla JS）实现了更轻量、更灵活的 Bean 容器，并可以通过 AOP 机制进行扩展，参见：&lt;a href="https://cabloy.com/zh-cn/articles/bean.html" rel="nofollow" target="_blank" title=""&gt;Bean&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;原生分布式架构&lt;/strong&gt;：EggJS 原有的&lt;code&gt;Worker + Agent&lt;/code&gt;进程模型，对于单机而言非常便利。但是面对多机集群，特别是基于&lt;code&gt;docker&lt;/code&gt;的集群部署而言，&lt;code&gt;Agent进程&lt;/code&gt;就失去了用武之地。更重要的是，如果一开始基于&lt;code&gt;Agent进程&lt;/code&gt;进行开发，后续很难平滑的过渡到分布式场景。因此，&lt;code&gt;egg-born-backend&lt;/code&gt;采用&lt;code&gt;Redis&lt;/code&gt;，从框架底层就开始原生分布式的架构设计，并衍生出了&lt;code&gt;Broadcast、Queue、Schedule、Startup&lt;/code&gt;等一系列分布式的开发组件，方便我们从一开始就进行分布式的开发。因此当系统起量后，可以轻松做集群扩展，参见：&lt;a href="https://cabloy.com/zh-cn/articles/broadcast.html" rel="nofollow" target="_blank" title=""&gt;Broadcast&lt;/a&gt;, &lt;a href="https://cabloy.com/zh-cn/articles/queue.html" rel="nofollow" target="_blank" title=""&gt;Queue&lt;/a&gt;, &lt;a href="https://cabloy.com/zh-cn/articles/schedule.html" rel="nofollow" target="_blank" title=""&gt;Schedule&lt;/a&gt;, &lt;a href="https://cabloy.com/zh-cn/articles/startup.html" rel="nofollow" target="_blank" title=""&gt;Startup&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="5. 第五层：EggBornJS"&gt;5. 第五层：EggBornJS&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;egg-born-front&lt;/code&gt;和&lt;code&gt;egg-born-backend&lt;/code&gt;，再加上一些周边工具，共同构成了 EggBornJS，也就是 CabloyJS 研发历程的第一阶段&lt;/p&gt;
&lt;h3 id="6. 第六层：CabloyJS"&gt;6. 第六层：CabloyJS&lt;/h3&gt;
&lt;p&gt;CabloyJS 在 EggBornJS 的基础上，研发了一套&lt;code&gt;核心全局模块&lt;/code&gt;，实现了一系列业务支撑特性，并将这些特性进行有机的组合，形成完整而灵活的上层生态架构，从而支持具体的业务开发进程&lt;/p&gt;
&lt;h3 id="7. 第七层：Project（项目）"&gt;7. 第七层：Project（项目）&lt;/h3&gt;
&lt;p&gt;实际的项目由&lt;code&gt;全局模块&lt;/code&gt;和&lt;code&gt;局部模块&lt;/code&gt;构成&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;全局模块&lt;/code&gt;：CabloyJS 内置的核心模块、来自&lt;code&gt;NPM仓库&lt;/code&gt;或者&lt;code&gt;模块市场&lt;/code&gt;的第三方模块，统称为&lt;code&gt;全局模块&lt;/code&gt;，一般安装在&lt;code&gt;node_modules&lt;/code&gt;目录&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;局部模块&lt;/code&gt;：项目实际的开发工作一般在&lt;code&gt;局部模块&lt;/code&gt;中展开。&lt;code&gt;局部模块&lt;/code&gt;位于项目目录内，参见：&lt;a href="https://cabloy.com/zh-cn/articles/module-create.html" rel="nofollow" target="_blank" title=""&gt;新建模块&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="信念"&gt;信念&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;凡是可以用 JavaScript 来写的应用，最终都会用 JavaScript 来写 | Atwood 定律&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;CabloyJS 正是对这一名言的探索之作。欢迎您也加入 CabloyJS 的社区生态，一起促进 Javascript 的繁荣与应用&lt;/p&gt;
&lt;h2 id="名称的由来"&gt;名称的由来&lt;/h2&gt;&lt;h3 id="1. EggBorn"&gt;1. EggBorn&lt;/h3&gt;
&lt;p&gt;这个名称的由来比较简单，因为有了 Egg(后端框架)，所以就有了 EggBorn。有一部动画片叫《天书奇谭》，里面的萌主就叫 “蛋生”，我很喜欢看（不小心暴露了年龄😅）&lt;/p&gt;
&lt;h3 id="2. Cabloy"&gt;2. Cabloy&lt;/h3&gt;
&lt;p&gt;Cabloy 来自蓝精灵的魔法咒语，拼对了 Cabloy 这个单词就会有神奇的效果。同样，CabloyJS 是有关化学的魔法，基于模块的组合与生化反应，您将实现您想要的任何东西&lt;/p&gt;
&lt;h2 id="预览"&gt;预览&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;白色主题&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/7c9b37172a364d32885bdc2782b131c3.png" title="" alt="theme-light"&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;暗色主题&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/62813a265cfe4dc1b6494b7bc54cb85b.png" title="" alt="theme-dark"&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;风信子主题&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/4706ce4c31314b58be920fc380cf6955.png" title="" alt="theme-hyacinth"&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;灿烂主题&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/6d86418e7d0c42c5abf8a948adf248ff.png" title="" alt="theme-brilliant"&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;显示侧边栏&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/7659eb2f3f03477095cb54c95207c00a.png" title="" alt="theme-light-panel"&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;移动端风格&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://admin.cabloy.com/api/a/file/file/download/b97f50964ac24bd2991ae33a95704595.png" title="" alt="theme-light-mobile"&gt;&lt;/p&gt;
&lt;h2 id="License"&gt;License&lt;/h2&gt;
&lt;p&gt;MIT&lt;/p&gt;
&lt;h2 id="相关链接"&gt;相关链接&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cabloy.com/" rel="nofollow" target="_blank" title=""&gt;官网: https://cabloy.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zhennann/cabloy" rel="nofollow" target="_blank" title=""&gt;GitHub: https://github.com/zhennann/cabloy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>zhennann</author>
      <pubDate>Sun, 20 Jun 2021 10:12:58 +0800</pubDate>
      <link>https://beta.w2solo.com/topics/2666</link>
      <guid>https://beta.w2solo.com/topics/2666</guid>
    </item>
  </channel>
</rss>
