使用Nodejs開發自己的Cli命令工具

你可以使用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

接下來執行以下

1
2
npm i -g
npm link

如果你有安裝其他掛件,你需要先把掛件安裝在全域

最後利用 npm link 把你的命令增加在系統參數中

以後你在任何地方都可以直接執行

1
2
my-cli
//畫面輸出 => hello my cli !

以上步驟,你已經實現了你的命令工具,當然實際上,你可以在你的 app.js 中實現你要作的事,例如自動化新增你的專案版型,或者自動化一些事務..

使用 commander 為你的命令工具增加功能性介面

commander 提供你建立完整的命令工具版型

可以很快速的為你的命令工具建立取得參數,建立命令,說明等等

首先在專案中安裝 commander

1
npm i 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') // 可下 -V 查詢版本
.description('這裡可以是一個說明')
.option('-a, --aArgv', '新增a參數') // 可下 -a 設定 program.aArgv 為 true
.option('-b, --bArgv', '新增b參數') // 可下 -b 設定 program.bArgv 為 true
.option('-c, --cArgv [type]', '新增c變數內容', 'test123') // 可下 -c 帶內容 設定 program.bArgv 預設值為 test123
//定義一個 deploy 命令,並傳入name參數
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

  1. 首先把你的專案發佈至 github (package.json 中記得填寫 “repository”: “https://github.com/xxxx/xxxxx.git“)
  2. 註冊一個npm帳號
  3. 專案中執行
    1
    2
    npm login //登入
    npm publish //分享至npm

以後只要全域安裝你的命令,就可以直接執行

1
npm i -g your-cli

範例專案
https://github.com/cainmaila/test-cli

cli.jpg