入門commander

2021-05-10 21:01:19

overview

官網寫的readme太差了,連一個像樣的demo都沒有。我看了幾天readme也沒學會。後來還是去看原始碼自己揣摸出來的。是tj太nb了,讓我這個小白的看不懂他的的文章,還是寫不清楚自己的庫能幹什麼、怎麼幹。下面是我寫的demo。方便像我這樣的小白入門。若你能看懂tj寫的readme。關了這個頁面吧。

init project

mkdir projectCommand
cd projectCommand
lerna init
lerna create testCommand
lerna add commander

defined

修改./projectCommand/packages/testCommand/package.json

{
    ...
    "bin": {
        "demo": "./bin/index.js"
    }
}

init cli

在中建立./projectCommand/packages/testCommand/bin/index.js。編輯內容如下:

#!/usr/bin/env node

// 快速引入Commander的範例
const program = require('commander')
// 定義選項
program
    .option('-d, --debug', 'output extra debugging')
    .option('-s, --small', 'small pizza size')
// 解析選項,即:執行選項
program.parse(process.argv)
    // process.argv 會獲取命令列的資料,返回型別是陣列。
// 根據選項及其值,執行相應邏輯。
if (program.debug) console.log(program.opts())
if (program.small) console.log('- small pizza size')

該檔案的處理邏輯:根據選項執行相應輸出。

usage

在本包中使用命令

./projectCommand/packages/testCommand下執行npm link
再執行demo -d,則輸出:{ debug: true, small: undefined }
再執行demo -s,則輸出:- small pizza size
若得到相應輸出,則驗證cli執行正確。

在其他包中使用命令

建立一個其他包
./projectCommand/中執行

lerna create useCommand
lerna add testCommand
cd packages/testCommand
npm unlink               // 取消全域性軟連結該包
demo -d                  // 驗證是否取消成功
// => zsh: command not found: demo

編輯./projectCommand/packages/useCommand/package.json

{
    ...
    "script": {
        ...
        "useDemo": "demo -d"
    }
}

./projectCommand/packages/useCommand/下執行

npm run useDemo
// => { debug: true, small: undefined }

若得到相應輸出,則驗證cli執行正確。

後記

記得在./projectCommand/packages/testCommand下執行npm unlink
刪除projectCommand專案。

為什麼使用lerna建立專案

我已經學習了lerna。不用也是浪費。

package.json中的bin欄位

它是定義命令的地方。本地中定義的命令叫demo。讀者也可以叫別的名字。也可以定義多個命令。
定義命令在package.json中。使用命令在終端中。執行命令時會執行package.json中bin欄位對應的檔案。

命令對應的檔案

#!/usr/bin/env node是標明當前檔案是可執行檔案。使用node解析當前檔案。可執行檔案的第一行必須是它。
請使用commonjs規範編輯該檔案。

使用命令

若是全域性安裝該包則全域性可以使用該包的命令。
若是區域性安裝該包則區域性可以使用該包的命令。


by stone