且看这个Node全栈框架,实现了个Cli终端引擎,可无限扩充命令集
背景介绍
一般而言,大多数框架都会提供Cli终端工具,用于通过命令行执行一些工具类脚本
CabloyJS提供的Cli终端工具却与众不同。更确切的说,CabloyJS提供的是Cli终端引擎,由一套Cli终端运行机制+众多命令集组成。CabloyJS是一个基于模块化体系的全栈框架,因此,命令集也由具体的模块提供。因此,我们可以通过安装各种模块来动态添加可以运行的命令集,从而让CabloyJS的Cli终端变得无比强大、功能也无比丰富
特点
可无限扩充:由于是通过安装模块来提供命令集,因此可以无限扩充同时支持
开发环境和生产环境:当我们在命令行输入指令后,系统会自动调用后端服务的API接口,执行具体的脚本逻辑。而后端服务既可以是在本地运行的开发服务,也可以是在远程运行的生成环境简化
系统管理和运维工作:正是由于Cli终端可以用于生产环境,所以许多后台管理工作都可以通过API接口暴露出来,从而可以直接通过命令行进行驱动完善的
权限控制:后端服务暴露的所有API接口都使用资源授权机制进行控制,Cli终端通过开放认证Token进行受控访问
如何使用
Cli终端的使用规范如下:
$ npm run cli [command] [args] -- [options]
- command
命名规范:由于command由业务模块提供,为了进一步规范管理,在业务模块内部还将提供的commands进行分组。因此,command命名规范如下:
moduleName:groupName:commandName
比如,模块a-clibooster提供了一个分组create,分组create提供了一个module 命令,那么,完整的command命名就是:a-clibooster:create:module
特殊约定:为了简化command的输入,特别做了如下约定:如果模块名称是
a-clibooster,则可以不输入如果分组名称是
default,则可以不输入
举例如下:
| 全称 | 简称 |
|---|---|
| a-clibooster:default:list | ::list |
| a-clibooster:create:module | :create:module |
| test-party:default:demo | test-party::demo |
- args
命令后是否可以跟随参数,跟随多少参数,由具体的命令决定,例如:
# 安装模块test-flow和test-note
$ npm run cli :store:sync test-flow test-note
- options
命令后是否可以跟随选项,跟随多少选项,也由具体的命令决定,例如:
# 向套件test-suite1添加模块test-module1
$ npm run cli :create:module test-module1 -- --suite=test-suite1
- help
如果我们不知道如何使用某个命令,可以直接打印出帮助信息,例如
$ npm run cli :create:module -- --help
- version
还可查询某个命令的版本号,例如:
$ npm run cli :create:module -- --version
- 列出命令
如果要查询当前系统一共支持多少命令,可以按如下操作:
# 列出所有命令
$ npm run cli ::list
# 列出模块test-party提供的命令
$ npm run cli ::list -- --module=test-party
# 列出模块a-clibooster内create分组提供的命令
$ npm run cli ::list -- --module=a-clibooster --group=create
内置命令
CabloyJS通过模块a-clibooster内置了大量常用的命令,具体如下:
| 命令 | 描述 |
|---|---|
| ::list | 列出所有命令 |
| :token:add | 添加开放认证Token |
| :token:delete | 删除开放认证Token |
| :token:list | 列出所有开放认证Token |
| :tools:babel | 编译JS文件 |
| :tools:icons | 处理图标模块 |
| :create:suite | 新建套件 |
| :create:module | 新建模块 |
| :create:atom | 新建原子类型 |
| :create:controller | 新建控制器(包括Route、Controller、Service一套文件) |
| :store:sync | 安装来自Cabloy商店的套件/模块 |
| :store:publish | 将本地开发的套件/模块发布到Cabloy商店 |
简写命令
CabloyJS还提供了更多简写命令,可以亲自体验一番,一定会显著提升开发效率
$ npm run cli
$ npm run cli :
$ npm run cli ::
$ npm run cli :default:
$ npm run cli :create:
$ npm run cli test-party:
$ npm run cli test-party::
$ npm run cli test-party:default:
如何创建Cli命令
如果我们想创建自己的Cli命令,也非常简便,参见文档:如何创建Cli命令
相关链接
且看这个Node全栈框架,实现了个Cli终端引擎,可无限扩充命令集的更多相关文章
- 绝版Node--Sequlize搭建服务(Node全栈之路)
绝版Node--Sequlize搭建服务(Node全栈之路) 参考资料:https://itbilu.com/nodejs/npm/VkYIaRPz-.html 准备环境:Mysql,Node 前沿: ...
- 分享一款自带工作流引擎的NodeJS全栈框架,接单快手、创业神器
CabloyJS是什么 CabloyJS是一款自带工作流引擎的Node.js全栈框架, 接单快手.创业神器, 基于koa + egg + vue + framework7 + mysql 在线演示 场 ...
- Jhipster 一个Spring Boot + Angular/React 全栈框架
Jhipster 一个Spring Boot + Angular/React 全栈框架: https://www.jhipster.tech/
- 全栈框架mk-js
今天听朋友说,才知道原来还有全栈框架这么一说. 厉害了. meteor EggBorn.js mk-js cordova 记录下,后面研究研究.
- 绝版Node--Sequlize搭建服务(Node全栈之路 二)
在Node全栈之路(一),也就是上篇文章中,我们讲到了sequlize的基本增删该查,这篇文章,我们在上篇文章的基础上继续探讨,讲一下关于sequlize创建的表之间的对应关系 参考资料:https: ...
- 你的Node应用,对接分布式链路跟踪系统了吗?(一) 原创: 金炳 Node全栈进阶 4天前 戳蓝字「Node全栈进阶」关注我们哦
你的Node应用,对接分布式链路跟踪系统了吗?(一) 原创: 金炳 Node全栈进阶 4天前 戳蓝字「Node全栈进阶」关注我们哦
- Vue、Node全栈项目~面向小白的博客系统~
个人博客系统 前言 ❝ 代码质量问题轻点喷(去年才学的前端),有啥建议欢迎联系我,联系方式见最下方,感谢! 页面有啥bug也可以反馈给我,感谢! 这是一套包含前后端代码的个人博客系统,欢迎各位提出建议 ...
- vue3+node全栈项目部署到云服务器
一.前言 最近在B站学习了一下全栈开发,使用到的技术栈是Vue+Element+Express+MongoDB,为了让自己学的第一个全栈项目落地,于是想着把该项目部署到阿里云服务器.经过网上一番搜索和 ...
- FKP,一套全栈框架,基于react、webpack、koa1、babel
FKP-REST是一套前后端分离,基于javascript的全栈实现,基于node的高性能,易部署性及javascript前后端语言的一致性,学习成本,时间成本及项目快速启动等等方面,FKP都是一种不 ...
随机推荐
- js获取url查询字符串参数
最近看js高级程序设计 对其中查询字符串参数的获得重新写了,当传递一个完整的URL的时候对查询字符串的提取 function getQueryArgs(){ var qs = (location.se ...
- tracert命令简述
1. 路由跟踪在线Tracert工具说明 Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径.Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP ...
- Vue src动态引入图片不显示问题
使用vue动态引入图片显示失败,查看控制台,发现图片返回类型为text/html,这里我的图片是从后台服务器上获取的,如果你没有使用Vue的devServer.proxy 进行代理,可以光速移步百度 ...
- SQL语言学习-DQL
DQL:查询表中的记录 * select * from 表名; 1. 语法: select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 ...
- 缓存中间件-Redis(二)
在上一篇中我们简单总结和介绍了Redis的几个方面 1.使用Redis背景 2.Redis通信多路复用的基本原理 3.Redis基本数据结构 4.Redis持久化方式 这一篇我们使用简单的业务场景来介 ...
- switch 和 if else if else 有什么区别
1. 一般情况下,它们两个语句可以相互替换 2. switch..case语句通常处理case为比较确定值的情况,而if...else...语句更加灵活,常用于范围判断(大于.等于某个范围) 3. ...
- 数据结构 - AVL 树
简介 基本概念 AVL 树是最早被发明的自平衡的二叉查找树,在 AVL 树中,任意结点的两个子树的高度最大差别为 1,所以它也被称为高度平衡树,其本质仍然是一颗二叉查找树. 结合二叉查找树,AVL 树 ...
- 『现学现忘』Git基础 — 13、Git的基础操作
目录 1.Git最基础的使用方式 (1)初始化本地版本库 (2)查看文件的状态 (3)把文件添加到暂存区 (4)把暂存区的内容提交到本地版本库 2.总结本文用到的Git命令 1.Git最基础的使用方式 ...
- python跑机器学习时报错:Process finished with exit code -1073740791 (0xC0000409)
emmm...第二次遇到这个错误了,好好的好好的卷积神经网络突然就跑不起了.就弹出一堆信息也不报那行代码错了... 记录一下: 两次解决方法相同,删h5py包 Process finished wit ...
- 【Azure Developer】使用 adal4j(Azure Active Directory authentication library for Java)如何来获取Token呢
问题描述 使用中国区的Azure,在获取Token时候,参考了 adal4j的代码,在官方文档中,发现了如下的片段代码: ExecutorService service = Executors.new ...