泛指令是一个非常有趣的概念,在很多的命令行工具中是很少见的。
传统意义上,或者一般情况下,我们所看到的命令行工具是工具开发者,已经定义好了各种指令。但是在Serverless Devs Tool中,我们是将这份能力充分放开的。
在官方提供的config
,init
,set
,search
,platform
指令之外,我们提供一种泛指令,即组件开发者定义的指令,实际上用法如下。
例如当我们有一个项目使用了fc
组件:
MyFunctionDemo:
Component: fc
Provider: alibaba
Properties:
Region: cn-hangzhou
Service:
Name: abc
Description: 欢迎使用ServerlessTool
Function:
Name: serverless_demo
Description: 这是一个Nodejs10的测试案例
CodeUri: ./
Handler: index.handler
MemorySize: 512
Runtime: nodejs10
此时,我们在项目目录下进行s -h
我们可以看到,项目中增加了一个MyFunctionDemo
的指令:
此时,当我们执行s MyFunctionDemo -h
的时候,我们可以看到,我们这个项目下的一些方法:
此时,我们就可以执行对应指令,进行不同的操作了,例如s MyFunctionDemo deploy
进行项目部署操作。
当然,除此之外,我们还可以直接进行s deploy
。直接执行s deploy
时,系统将会按照部署顺序挨个项目进行调用其组件的deploy
方法。
例如在某个Yaml中,有3个项目:
Project1:
Component: a
Provider: alibaba
Properties: test
Project2:
Component: b
Provider: alibaba
Properties: test
Project3:
Component: c
Provider: alibaba
Properties: test
另外这三个项目对应的组件方法:
- Project1:使用了a组件,a组件有deploy方法
- Project2:使用了b组件,b组件没有deploy方法
- Project3:使用了c组件,c组件有deploy方法
如果我此时此刻,执行s Project1 deploy
,系统只会执行Project1所以来的a组件的deploy方法。
如果我执行s Project2 deploy
,由于b组件没有deploy方法,所以此时系统会报错。
当我要进行批量操作的时候,我可以直接执行s deploy
,此时此刻,系统会:
- 分析Project1,Project2,Project3的部署顺序
- 部署Project1,因为a组件有deploy方法,所以不会报错,也不会警告;
- 部署Project2,因为b组件没有deploy方法,所以会抛出警告信息,但是不会终止流程;
- 部署Project3,因为c组件有deploy方法,所以不会报错,也不会警告;
- 部署完成,输出所有的汇总信息;
由于Serverless Devs Tool是一个组件化的工具,我们相信每个组件都可能有着不同的方法,例如函数计算的组件,可能就有logs,invoke,deploy等方法,而静态网站的组件可能就会有deploy,remove,update等方法,所以我们将组件的指令透传到工具外部,可以让使用者一目了然,一方面可以给组件更大的灵活性,让开发者可以更加简单、轻松、自由地完成更多的能力,另一方面可以让使用者更加有针对性的使用某个功能,某个能力。