moleculer-cli
[2] 是一個命令列工具,可以幫助我們開發或測試。
npm install -g moleculer-cli
init
指令就如同蓋房子的鷹架,可以快速搭建一個新的 Moleculer 專案。
$ moleculer init project my-project
這個指令會下載 Moleculer 樣板[3],在執行 CLI 程式的過程中,會請您根據一些問題需求輸入設定,然後在 ./my-project
目錄下生成新的專案。
你可以將問題需求的答案寫到一個 JSON 檔案,然後透過 --answers
引數來讀取它。這在建構程式化的專案生成是很有幫助的。
$ moleculer init project my-project --answers ./answers.json
answers.json
{
"apiGW": true,
"needTransporter": true,
"needCacher": true,
"dbService": true,
"metrics": true,
"tracing": true,
"docker": true,
"lint": true
}
你可以設定 --no-install
引數來停止自動使用 npm 來安裝依賴套件。這在建構程式化的專案生成是很有幫助的。
$ moleculer init project my-project --answers ./answers.json --no-install
Moleculer 官方有許多關於 moleculer-template
樣板的主題[4] 。
greeter
)$ moleculer init project my-project
greeter
)$ moleculer init nano my-nano-project
$ moleculer module nano my-nano-project
$ moleculer init username/repo my-project
你可以使用原始碼代管平台的客製化樣板來建立專案。它可以使用速記並透過 download-git-repo
[9] 來下載。 例如 owner/name
(Github) 、 gitlab:owner/name
、 bitbucket:owner/name
,也可以指定標籤或分支 username/repo#branch
。
除了使用原始碼代管平台的樣板外,你也可以使用本地檔案來載入樣板。
$ moleculer init ./path/to-custom-template my-project
你可以註冊別名並且設定其相對應的 Repo ,就可以很容易的透過別名來使用客製化樣板。
$ moleculer alias-template myAlias somegithubuser/reponame
$ moleculer alias-template otherAlias ./path/to/some-local/custom/template
$ moleculer init myAlias my-project
所有註冊的樣板別名都會被儲存在使用者目錄的 JSON 檔案 ~/.moleculer-templates.json
,你也可以手動編輯它。
Moleculer 模板是由一個 meta.js
文件與一個 template
目錄組成的。
meta.js
會輸出一個函數,該函數會返回一個物件,物件中會定義關於 Moleculer CLI 的初始化介面。該函數會帶著一個 values
的引數,提供由 CLI 傳入的外部參數值。該物件有以下幾個鍵值說明如下:
questions
屬性是一個物件陣列,用來定義在初始化過程中的問題。這些物件是使用 Inquirer.js
處理的。收集到的資料會儲存於 Metalsmith 的 metadata
物件中。metalsmith
屬性可以讓你在轉換過程中根據不同點執行客製化程式。其中 before
函數會在轉換之前執行,而 after
函數會在轉換完畢後執行,最後 complete
函數會在轉換運行且檔案都被複製到目標目錄後才執行。這些 metalsmith
函數都會接收到一個 metalsmith
引數,它提供了一個參考自 Metalsmith
[11] 的物件。你可以利用它來呼叫 metalsmith.metadata()
,然後在 Meta 資料物件上增加或修改屬性用於後續的轉換。filters
屬性的結構是一個路徑的鍵值會匹配一個問答 name
值。當問答變數的值為 false
時,在轉換過程中將會忽略該路徑,這些檔案就不會加入到正在初始化的項目中。completeMessage
屬性為多行字串,可以在初始化完畢後顯示一些說明資訊。template
是一個樣板檔案目錄,它使用 Handlebars [12] 語意樣板來轉換並複製到目標目錄。 Handlebars 會從 Metalsmith 的 metadata
物件屬性內容來作為原始碼的替換字串。另外也可以用來轉換檔案名稱。
start
指令會在本地啟動一個 ServiceBroker
並且切換到 REPL 模式。
$ moleculer start
選項:
# 顯示版本號
--version Show version number [boolean]
# 顯示說明
--help Show help [boolean]
# 由檔案讀取配置
--config, -c Load configuration from a file [string] [default: ""]
# 命名空間
--ns Namespace [string] [default: ""]
# Log 等級
--level Logging level [string] [default: "info"]
# 節點 ID
--id NodeID [string] [default: null]
# 啟用 hot-reload
--hot, -h Enable hot-reload [boolean] [default: false]
# 客製化 REPL 命令檔 mask
--commands Custom REPL command file mask (e.g.: ./commands/*.js)
[string] [default: null]
connect
指令會在啟動一個 ServiceBroker
連線到 Transporter 伺服器,並且切換到 REPL 模式。
# 使用 TCP transporter 連線
$ moleculer connect
# 連線到 NATS
$ moleculer connect nats://localhost:4222
# 連線到 Redis
$ moleculer connect redis://localhost
# 連線到 MQTT
$ moleculer connect mqtt://localhost
# 連線到 AMQP
$ moleculer connect amqp://localhost:5672
# 從配置檔讀取選項
$ moleculer connect --config ./moleculer.config.js
選項:
# 顯示版本號
--version Show version number [boolean]
# 顯示說明
--help Show help [boolean]
# 由檔案讀取配置
--config, -c Load configuration from a file [string] [default: ""]
# 命名空間
--ns Namespace [string] [default: ""]
# Log 等級
--level Logging level [string] [default: "info"]
# 節點 ID
--id NodeID [string] [default: null]
# 啟用 hot-reload
--hot, -h Enable hot-reload [boolean] [default: false]
# 序列化器
--serializer Serializer [string] [default: null]
# 客製化 REPL 命令檔 mask
--commands Custom REPL command file mask (e.g.: ./commands/*.js)
[string] [default: null]
call
指令會連線到現有的 Moleculer 專案,然後夾帶參數來呼叫可用的 Action ,並將返回的 JSON 結果字串化印到主控台。這也意味著你可以透過其它工具來處理結果。夾帶的參數請加上 @
前綴,若是 meta
參數請加上 #
前綴。
選項:
# 顯示版本號
--version Show version number [boolean]
# 顯示說明
--help Show help [boolean]
# 由檔案讀取配置
--config, -c Load configuration from a file [string] [default: ""]
# Transporter 連線字串
--transporter, -t Transporter connection string (NATS, nats://127.0.0.1:4222,
...etc) [string] [default: null]
# 命名空間
--ns Namespace [string] [default: ""]
# Log 等級
--level Logging level [string] [default: "silent"]
# 節點 ID
--id NodeID [string] [default: null]
# 序列化器
--serializer Serializer [string] [default: null]
範例:夾帶參數與 meta 資訊
$ moleculer call math.add --transporter NATS --@a 5 --@b 3 --#meta-key MyMetaValue
範例:使用 jq[13] 處理結果
$ moleculer call "\$node.health" | jq '.mem.free'
範例:透過環境變數 TRANSPORTER
來設定 Transporter
$ TRANSPORTER=nats://localhost:42222 moleculer call math.add --@a 5 --@b 3
emit
指令會連線到現有的 Moleculer 專案,然後夾帶參數來發送可用的事件。夾帶的參數請加上 @
前綴,若是 meta
參數請加上 #
前綴。
選項:
# 顯示版本號
--version Show version number [boolean]
# 顯示說明
--help Show help [boolean]
# 由檔案讀取配置
--config, -c Load configuration from a file [string] [default: ""]
# Transporter 連線字串
--transporter, -t Transporter connection string (NATS, nats://127.0.0.1:4222,
...etc) [string] [default: null]
# 命名空間
--ns Namespace [string] [default: ""]
# Log 等級
--level Logging level [string] [default: "silent"]
# 節點 ID
--id NodeID [string] [default: null]
# 序列化器
--serializer Serializer [string] [default: null]
# 發送廣播事件
--broadcast, -b Send broadcast event [boolean] [default: false]
# 事件群組
--group, -g Event groups [string] [default: null]
範例:夾帶參數與 meta 資訊
$ moleculer emit math.add --transporter NATS --@id 3 --@name John --#meta-key MyMetaValue
範例:廣播與群組
$ moleculer emit math.add --transporter NATS --broadcast --@id 3 --@name John --group accounts
範例:多個群組
$ moleculer emit math.add --transporter NATS --broadcast --@id 3 --@name John --group accounts --group mail
範例:透過環境變數 TRANSPORTER
來設定 Transporter
$ TRANSPORTER=nats://localhost:42222 moleculer call math.add --@a 5 --@b 3
[1] Command Line Tool, https://moleculer.services/docs/0.14/moleculer-cli.html
[2] Command line tool for Moleculer framework, https://github.com/moleculerjs/moleculer-cli
[3] Moleculer template: project, https://github.com/moleculerjs/moleculer-template-project
[4] moleculer-template topic, https://github.com/topics/moleculer-template
[5] Jest, https://jestjs.io/
[6] ESLint, https://eslint.org/
[7] Moleculer template: nano, https://github.com/moleculerjs/moleculer-template-nano
[8] moleculer-template-module, https://github.com/moleculerjs/moleculer-template-module
[9] download-git-repo, https://gitlab.com/flippidippi/download-git-repo
[10] Inquirer.js, https://github.com/SBoudrias/Inquirer.js#objects
[11] Metalsmith, https://github.com/metalsmith/metalsmith
[12] Handlebars, https://handlebarsjs.com/
[13] jq, https://stedolan.github.io/jq/