泛指令是一个非常有趣的概念,在很多的命令行工具中是很少见的。
    传统意义上,或者一般情况下,我们所看到的命令行工具是工具开发者,已经定义好了各种指令。但是在Serverless Devs Tool中,我们是将这份能力充分放开的。
    在官方提供的configinitsetsearchplatform指令之外,我们提供一种泛指令,即组件开发者定义的指令,实际上用法如下。
    例如当我们有一个项目使用了fc组件:

    1. MyFunctionDemo:
    2. Component: fc
    3. Provider: alibaba
    4. Properties:
    5. Region: cn-hangzhou
    6. Service:
    7. Name: abc
    8. Description: 欢迎使用ServerlessTool
    9. Function:
    10. Name: serverless_demo
    11. Description: 这是一个Nodejs10的测试案例
    12. CodeUri: ./
    13. Handler: index.handler
    14. MemorySize: 512
    15. Runtime: nodejs10

    此时,我们在项目目录下进行s -h我们可以看到,项目中增加了一个MyFunctionDemo的指令:
    泛指令能力 - 图1
    此时,当我们执行s MyFunctionDemo -h的时候,我们可以看到,我们这个项目下的一些方法:
    泛指令能力 - 图2
    此时,我们就可以执行对应指令,进行不同的操作了,例如s MyFunctionDemo deploy进行项目部署操作。
    当然,除此之外,我们还可以直接进行s deploy。直接执行s deploy时,系统将会按照部署顺序挨个项目进行调用其组件的deploy方法。
    例如在某个Yaml中,有3个项目:

    1. Project1:
    2. Component: a
    3. Provider: alibaba
    4. Properties: test
    5. Project2:
    6. Component: b
    7. Provider: alibaba
    8. Properties: test
    9. Project3:
    10. Component: c
    11. Provider: alibaba
    12. 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,此时此刻,系统会:

    1. 分析Project1,Project2,Project3的部署顺序
    2. 部署Project1,因为a组件有deploy方法,所以不会报错,也不会警告;
    3. 部署Project2,因为b组件没有deploy方法,所以会抛出警告信息,但是不会终止流程;
    4. 部署Project3,因为c组件有deploy方法,所以不会报错,也不会警告;
    5. 部署完成,输出所有的汇总信息;

    由于Serverless Devs Tool是一个组件化的工具,我们相信每个组件都可能有着不同的方法,例如函数计算的组件,可能就有logs,invoke,deploy等方法,而静态网站的组件可能就会有deploy,remove,update等方法,所以我们将组件的指令透传到工具外部,可以让使用者一目了然,一方面可以给组件更大的灵活性,让开发者可以更加简单、轻松、自由地完成更多的能力,另一方面可以让使用者更加有针对性的使用某个功能,某个能力。