我在3年前開始從事 Node.js
開發,去了一個不把 Node
當作膠水而是全 Node
後臺架構的公司,對於微服務架構來講,那後端的小項目就多了去了,每一個項目,甚至一個項目裏不一樣的開發者寫的命令行工具(還有一次性腳本和計劃任務)可能都是一套本身的設計,我當時想作一個簡單易用,侵入小的方案,統一微服務架構下各個項目實現命令,腳本,計劃任務等的實現規範。最終造成了 Semo 這個項目,我打算寫一系列的文章跟你們分享 Semo 的原理和用法。git
至於爲何要藏起來兩年多才拿出來,主要是一直以爲作的還不夠好,事實上這兩年也確實改動很大,最近還在作結構的調整和重大特性的添加。github
Semo 是基於 yargs
這個命令行相關的庫開發的,固然還有不少其餘選擇,可是我使用過幾個之後,以爲 yargs
最靈活,凡是 yargs
提供的功能用就行了,個人工做是在外圍在加一些規範和約束,使得用起來更方便。typescript
說了這麼多廢話,仍是直接給你們看貨吧,今天不涉及原理,只是一個簡單介紹,若是你們感興趣能夠裝裝試試,再給點意見和建議。後面會把 Semo 的方方面面好好跟你們說說。npm
和一些開發框架自帶的命令行工具不同的是,Semo 的命令行工具默認裝上之後不會有什麼直接的好處,想用的爽還須要安裝或者開發本身的插件才能夠。後端
npm i -g @semo/cli
semo help
複製代碼
打印的結果是:bash
$ semo help
semo
Commands:
semo completion Generate completion script
semo config <op> Manage rc config [aliases: cfg]
semo create <name> [repo] [branch] Create a new project from specific repo [aliases: c]
semo generate <component> Generate component sample code [aliases: g]
semo init Init basic config file and directories [aliases: i]
semo repl Play with REPL [default] [aliases: r]
semo run <PLUGIN> [COMMAND...] Run any plugin command directly
semo status Show environment status info [aliases: st]
Options:
--version Show version number [boolean]
--hook If or not load all plugins repl hook
--prompt Prompt for input. [default: ">>> "]
-h, --help Show help [boolean]
Find more information at https://semo.js.org
複製代碼
$ semo
>>>
複製代碼
直接輸入 semo 敲回車,會跟 Node 同樣,進入一個 REPL 環境,表面上這個 REPL 環境只比 Node 的 REPL 環境多了一個 Semo 對象。實際上,這說明咱們能夠經過某種方式往裏面放東西,另外,這個環境裏還可使用 await 運行 Promise 函數。架構
爲了給你們留個好的第一印象,我開發了一個 Semo 的 hello world 插件,特別的是,這個插件的體驗不須要經過 npm install
來安裝框架
semo run hello-world
複製代碼
首次運行會有下載動做,以後就不會了,是否是感受有點熟悉(好吧,靈感來自於 Deno 以及 npm init 和 yarn create)函數
你會看到一個輸出:微服務
你好,xxx 同窗:
今天是2020年6月13日, 如今是下午1點51分, 祝你今天一天都有好心情!看看下面一句話是否對你有所啓發:
智者說:我曾聽一位大師說過,誠信是財富,正法是第一坦道,實語是第一妙昧,智慧是第一輩子命。
複製代碼
是否是頗有愛呀,這裏的文案模板支持中英文,而且會自動檢測系統語言,裏面的雞湯能夠換口味的。
# it: IT 語錄
# cn: 中文雞湯
# en: 英文雞湯
# poison: 中文毒雞湯
# rule: 各類法則定律
semo run hello-world --inspirationType it
複製代碼
每次運行都須要指定選項太麻煩了,能夠把選項給我配置固化下來嘛?固然能夠,經過把配置寫到全局配置文件便可。
semo config set semo-plugin-hello-world.inpirationType it -g
複製代碼
配置文件在 ~/.semo/.semorc.yml
關於如何實現這個插件,推薦你們看看插件的源碼,等你們學會了 Semo 的擴展方法之後,還能夠自定義本身的雞湯,用這個插件來背單詞,被 API 語法也不是夢哦!
都說沒有插件系統的那啥不是好那啥,咱們這裏固然要支持插件系統啦,那麼都有哪些插件能夠用呢?
semo run plugin --remote
複製代碼
這條命令能夠告訴你答案,你能夠裝幾個插件玩玩,插件能夠裝在幾個位置
這裏以 home 的全局插件爲例,核心提供了一個插件管理命令,不過須要先安裝一下:
semo run plugin plugin install --PLUGIN plugin
複製代碼
這樣,你就會發現全局已經有了 semo plugin
命令,咱們用這個插件真正的把咱們的 hello-world 插件裝下來吧:
semo plugin install hello-world
複製代碼
這樣,你就能夠這樣運行 hello-world
插件定義的 hello-world
命令了:
semo hello-world
複製代碼
有了前面的 hello-world 打基礎,如今給你們說說默認安裝後內置的幾個命令的功能:
semo completion
這個命令用來提供自動補全,把輸出粘到 ~/.zshrc
或者 ~/.bashrc
便可。
semo config
這個命令能夠用來管理本地和全局的 .semorc.yml
配置。
semo create
這個命令用來建立新項目,給新項目提供模板,支持 Git 倉庫地址,或者預置模板:
semo create PROJECT --template
複製代碼
核心預置了兩套模板,一個用於開發插件,一個是用於簡單的 typescript 項目解構,都是例子,實際是爲了告訴你們,你們能夠把本身優秀的項目腳手架,starter 給放進來,這樣就能夠一鍵使用本身的模板建立項目了。
semo generate
這個命令用來生成代碼,核心常常用的是添加新命令時的命令模板代碼(支持 js 和 ts)。
semo init
這個命令用於初始化當前目錄,爲任意 Node 項目初始化Semo 配置文件和所需目錄。
semo repl
這是一個 REPL 環境,之後能夠用他來幫助咱們開發,調試和驗證項目邏輯。
semo run
這個命令用於臨時運行一個沒安裝過的插件裏的命令(實際仍是須要下載,只不過只有 run 命令纔會去識別)
semo status
能夠看一些環境信息,支持擴展。
今天要跟你們分享的就是這些,還不夠詳細,只是給你們留一個第一印象,你們能夠試試看,因爲 semo 的原則是核心保持乾淨,不提供任何具體的功能,而且擴展起來很是容易,比較適合你們隨意發揮,不必定非得用在工做上,這一點從目前我提供的一些插件上就可見一斑了哈。
倉庫地址:github.com/semojs/semo,若是你們喜歡,歡迎你們給個 Star 哈。
目前寫了一些文檔,可能還不是很詳細,你們能夠先看着: semo.js.org
很是歡迎你們幫我糾錯,以及編寫本身的插件做品,:)
後面會寫一些具體的原理和擴展方法的介紹文章,你們若是真的已經深刻到須要本身寫擴展時可能會遇到技術問題,能夠掃碼加釘釘羣,你們一塊兒交流哈。