角色
角色提供了一種跨使用者自定義命令組織和重用變數的方式。
預設情況下,Spring CLI 包含一個始終可用的未命名角色。如果未指定特定角色,命令將使用預設角色。
為了進一步自定義和區分角色,您可以為它們關聯特定名稱。這些命名角色以 YAML 檔案形式儲存在 .spring/roles
目錄中,該目錄與 .spring/commands
目錄位於同一位置。
角色允許您使用 Handlebars 在 Action 檔案中訪問定義的變數,從而在命令之間共享資料。
此外,您可以使用角色為命令列選項提供值。如果某個命令列選項未指定值,並且存在與該命令選項同名的角色變數,則命令會自動使用該角色變數的值作為該特定選項的值。
檔案結構
對於每個角色,會在 .spring/roles/vars
目錄中建立一個相應的檔案。例如,如果存在 qa
和 prod
角色,則目錄結構如下所示:
$ tree .spring/roles/vars -lr
.spring/roles/vars
├── vars.yml
├── vars-qa.yml
└── vars-prod.yml
vars.yml
檔案用於預設角色。
此結構類似於使用特定 profile 的 Spring 應用程式配置檔案的方式。然而,角色變數不具有與 Spring profiles 相同的行為,例如除了檔案之外還從其他位置(如環境變數)檢索值。
快速入門
在本快速入門中,我們將演示如何向預設角色新增變數,並在生成檔案時使用它們的值。
讓我們首先將角色變數 'greeting' 的值設定為 'Mondo'
$ spring role set --key greeting --value Mondo
Key-value pair added to the default role
該鍵值對儲存在專案根目錄下的 ./spring/roles/vars/vars.yml
檔案中。
要檢索變數的值,請使用以下命令:
$ spring role get --key greeting
Mondo
現在我們建立另一個角色變數
$ spring role set --key language --value Italian
Key-value pair added to the default role
現在我們可以將這些變數合併到使用者自定義命令中。我們建立一個名為 hello say
的使用者自定義命令。
$ spring command new --command-name hello --sub-command-name say
Created user defined command /home/mark/testing-spring-cli/roles/myapp/.spring/commands/hello/say
在 .spring/commands/hello/say
目錄內,您可以找到一個名為 command.yaml
的檔案,其內容如下:
command:
description: Generate a new file with a hello message
options:
#
- name: greeting
description: who or what to say hello to
dataType: string
defaultValue: World
inputType: text
注意,命令列選項名稱是 greeting
,這與我們建立的角色變數的名稱匹配。
在 .spring/commands/hello/say
目錄內,有一個名為 hello.yaml
的 Action 檔案,其內容如下:
actions:
- generate:
to: hello.txt
text: Hello {{greeting}} on {{os-name}}.
現在我們更新該檔案以包含:
actions:
- generate:
to: hello.txt
text: Hello {{greeting}} on {{os-name}}. {{#if language}} {{language}} {{/if}}
在執行命令時未傳遞 greeting
命令列選項的情況下,greeting
的值將從同名的角色變數中獲取,而不是使用預設值 World
。
此外,由於我們已經定義了角色變數 language,我們可以測試它的存在並將它的值包含在輸出中。注意 language 不是命令列選項。以下命令(及其輸出)可以實現這一點:
$ spring hello say
Using Role variable instead of default command line option for key = greeting , value = Mondo from the default role
Generated /home/mark/testing-spring-cli/roles/myapp/hello.txt
生成的檔案包含:
Hello Mondo on Linux. Italian
{{greeting}}
的值來自角色變數,因為它未作為命令列選項提供。
{{language}}
變數不是命令列選項,但它可用於 Handlebars 表示式。
現在我們可以刪除生成的檔案。在互動式 shell 中,我們執行 . ! rm hello.txt
並傳入 greeting
命令列選項。
$ spring hello say --greeting amico
生成的檔案包含:
Hello amico on Linux. Italian
設定變數
要設定角色變數的值,請使用 spring role set
命令:
spring role set --key greeting --value Mondo
您可以使用 --role
選項選擇性地指定角色。
獲取變數
要檢索角色變數的值,請使用以下命令:
spring role get --key greeting
您可以使用 --role 選項選擇性地指定角色。
然後可以在使用 Handlebars 模板的 Action 檔案內部訪問角色變數 greeting。請參閱快速入門部分以獲取示例。
角色變數也用於匹配使用者自定義的命令選項名稱。如果未明確將值作為命令列選項提供,則使用角色變數的值。
您還可以使用特殊命令 . !
,在互動式 shell 中檢視包含角色變數的檔案的完整內容:
spring:>. ! cat .spring/roles/vars/vars.yml
greeting: mondo