前言
CLI,全稱是command-line interface,也就是命令行交互接口。無論是在前端還是后端,都可以用于在構建時通過命令快速生成項目或模板等。例如前端的vue-cli(Vue前端開發腳手架),后端的dva-cli(Ant Design后端開發腳手架)等
需求
那么如何構建屬于自己的CLI工具呢,在項目開發時可以快速生成自己需要的代碼模板,去除重復工作,并且還可以為其他的開發者提供快速入門的使用呢?我們的具體需求如下:
1,通過執行命令,自動生成項目代碼模板
2,項目代碼模板可以自定義編輯
3,CLI可以通過軟件包形式分發,其他開發者可以簡單使用
思路
CLI其實可以理解成早先時候黑漆漆的C語言控制臺窗口,通過簡單的命令輸入,可以得到指定的輸出,那么為了滿足以上三點需求,使用NodeJS開發CLI是一個很好的選擇:
1,獲得用戶的輸入,并且根據相應的輸入,可以定制編程相應執行邏輯
2,模板代碼有兩種實現思路,一是采用代碼生成,二是分離靜態資源模板
3,使用包管理工具
準備工作
npm install commander --save
npm install git-clone --save
npm install shelljs --save
工具說明
1、commander
commander是目前很成熟的Node命令行交互接口實現工具,使用該工具可以很便捷很快速地實現第一點需求
2、git-clone
git-clone是一個很輕量的Node編寫的git clone封裝,可以很便捷很快速地從github上克隆執行項目模板。也就是說,我們將項目模板靜態存儲在github上,每當執行cli命令時,將其下載,這樣我們就很輕松地得到了項目代碼模板。另外,當需要改變項目模板代碼時,只需要修改github上的項目代碼就可以,cli工具無需修改
3、shelljs
shelljs同樣是一個很輕量的Node編寫的系統命令封裝,可以很便捷很快速地在Node代碼中使用系統命令。在本例中,因為從github上下載的項目代碼會帶有.git文件,需要使用rm命令將其刪除
構建說明
安裝完依賴包之后,我們只需要編寫一個文件的代碼:
#!/usr/bin/env node
const clone = require('git-clone')
const program = require('commander')
const shell = require('shelljs');
const log = require('tracer').colorConsole()
program
.version('1.0.0')
.description('xserver中間件應用模板工程的cli')
program
.command('* <tpl> <project>')
.action(function(tpl, project) {
log.info('目前xserver-cli支持以下模板:')
log.info('使用例子:x-cli x-express myproject')
if (tpl && project) {
let pwd = shell.pwd()
log.info(`正在拉取模板代碼,下載位置:${pwd}/${project}/ ...`)
clone(`https://github.com/cheneyweb/${tpl}.git`, pwd + `/${project}`, null, function() {
shell.rm('-rf', pwd + `/${project}/.git`)
log.info('模板工程建立完成')
})
} else {
log.error('正確命令例子:x-cli x-express myproject')
}
})
program.parse(process.argv)
以上就是xserver-cli的源代碼,極為簡單,只有28行
使用說明
npm install xserver-cli -g
x-cli x-express myproject
執行完以上命令后,首先是安裝xserver-cli,然后是以x-express的項目代碼為模板,生成自定義項目myproject,路徑位于當前執行命令的目錄下
結語
是不是十分的簡單呢?原來CLI也沒有特別神秘的地方嘛,我們也可以制作屬于
自己的腳手架工具
另外,關于本文章中提到的xserver-cli工具,已經上傳到npm中,目前支持x-express和x-koa兩個項目模板代碼
關于x-express和x-koa,這是我構建的一個以中間件應用為基礎的組件化后端開發框架,分別基于express和koa框架,詳情可以了解如下傳送門:
XServer—全新組件化后端構建