官網寫的readme太差了,連一個像樣的demo都沒有。我看了幾天readme也沒學會。後來還是去看原始碼自己揣摸出來的。是tj太nb了,讓我這個小白的看不懂他的的文章,還是寫不清楚自己的庫能幹什麼、怎麼幹。下面是我寫的demo。方便像我這樣的小白入門。若你能看懂tj寫的readme。關了這個頁面吧。
mkdir projectCommand
cd projectCommand
lerna init
lerna create testCommand
lerna add commander
修改./projectCommand/packages/testCommand/package.json
{
...
"bin": {
"demo": "./bin/index.js"
}
}
在中建立./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')
該檔案的處理邏輯:根據選項執行相應輸出。
在./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。不用也是浪費。
它是定義命令的地方。本地中定義的命令叫demo
。讀者也可以叫別的名字。也可以定義多個命令。
定義命令在package.json中。使用命令在終端中。執行命令時會執行package.json中bin欄位對應的檔案。
#!/usr/bin/env node
是標明當前檔案是可執行檔案。使用node解析當前檔案。可執行檔案的第一行必須是它。
請使用commonjs規範編輯該檔案。
若是全域性安裝該包則全域性可以使用該包的命令。
若是區域性安裝該包則區域性可以使用該包的命令。
by stone