入門commander

overview

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

init project

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

defined

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

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

init cli

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

#!/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/中執行ui

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/下執行debug

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

若獲得相應輸出,則驗證cli運行正確。code

後記

記得在./projectCommand/packages/testCommand下執行npm unlink
刪除projectCommand項目。ip

爲何使用lerna建立項目

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

package.json中的bin字段

它是定義命令的地方。本地中定義的命令叫demo。讀者也能夠叫別的名字。也能夠定義多個命令。
定義命令在package.json中。使用命令在終端中。執行命令時會執行package.json中bin字段對應的文件。

命令對應的文件

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

使用命令

如果全局安裝該包則全局能夠使用該包的命令。
如果局部安裝該包則局部能夠使用該包的命令。


by stone

相關文章
相關標籤/搜索