你可以使用Nodejs開發自己的命令工具,例如 Grunt,Webpack,react-cli,vue-cli….均是此類的服務。
實作一個最命令程序
例如建立一個node專案(一個資料夾,執行過 npm init..),編寫一個 app.js 內容如下
1
| console.log('hello my cli !')
|
一般而言,要執行這個node程序,你可以下
1 2
| node app.js //畫面輸出 => hello my cli !
|
如果需要將以上程序建立成命列,你可以這樣做
1 2
| #!/usr/bin/env node console.log('hello my cli !')
|
加上第一行指定為 node 腳本
在你的 package.json 加上 bin 屬性
1 2 3
| "bin": { "my-cli": "./app.js" }
|
告知系統執行 my-cli 後,同等執行 node ./app.js
接下來執行以下
如果你有安裝其他掛件,你需要先把掛件安裝在全域
最後利用 npm link 把你的命令增加在系統參數中
以後你在任何地方都可以直接執行
1 2
| my-cli //畫面輸出 => hello my cli !
|
以上步驟,你已經實現了你的命令工具,當然實際上,你可以在你的 app.js 中實現你要作的事,例如自動化新增你的專案版型,或者自動化一些事務..
使用 commander 為你的命令工具增加功能性介面
commander 提供你建立完整的命令工具版型
可以很快速的為你的命令工具建立取得參數,建立命令,說明等等
首先在專案中安裝 commander
撰寫app.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #!/usr/bin/env node const program = require('commander') program .version('0.0.1') .description('這裡可以是一個說明') .option('-a, --aArgv', '新增a參數') .option('-b, --bArgv', '新增b參數') .option('-c, --cArgv [type]', '新增c變數內容', 'test123') program .command('deploy <name>') .description('定義一個命令') .action(function(name) { console.log('Deploying "%s"', name) }) program.parse(process.argv) console.log(' - %s aArgv', program.aArgv) console.log(' - %s bArgv', program.bArgv) console.log(' - %s cArgv', program.cArgv)
|
建立命令後,你可以直接執行以下
1 2 3 4 5 6 7 8 9 10
| //查看版本 my-cli -V //查看說明 my-cli -h //傳入 a=true b=true c=test456 my-cli --aArgv -bArgv -cArgv test456 //同等 my-cli -ab -c test456 //執行命令 my-cli deploy myname
|
分享你的 cli 工具
如果你希望把開發後的命令分享給其他人,可以把專案 publish 至 npm
- 首先把你的專案發佈至 github (package.json 中記得填寫 “repository”: “https://github.com/xxxx/xxxxx.git“)
- 註冊一個npm帳號
- 專案中執行
1 2
| npm login //登入 npm publish //分享至npm
|
以後只要全域安裝你的命令,就可以直接執行
範例專案
https://github.com/cainmaila/test-cli