從0開(kāi)始用node寫(xiě)一個(gè)自己的命令行程序

前言

什么是命令行程序呢?像我們常見(jiàn)的webpack,vue-cli都屬于命令行程序。
本文將帶你從0開(kāi)始用node寫(xiě)一個(gè)自己的命令行程序,并發(fā)布到npm。

準(zhǔn)備工作

我打算寫(xiě)一個(gè)統(tǒng)計(jì)個(gè)人代碼提交量的命令行工具,起名 git-tool。
npm地址見(jiàn) git-tool,GitHub地址見(jiàn) git-tool。

  1. 在GitHub上新建一個(gè)項(xiàng)目git-tool
  2. 克隆到本地進(jìn)行開(kāi)發(fā)。
  3. 執(zhí)行npm init創(chuàng)建package.json文件。
// 其他代碼
"bin": {
    "git-tool": "./index.js"
},
// 其他代碼

bin字段里面的key值可以隨便取名,value值為對(duì)應(yīng)的執(zhí)行文件。

  1. 新建index文件。
#!/usr/bin/env node
console.log('git-tool')

#!/usr/bin/env node的意思是讓系統(tǒng)自己去找node的執(zhí)行程序,該行必不可少。

  1. 執(zhí)行npm link
    如果執(zhí)行該命令報(bào)錯(cuò),參考https://docs.npmjs.com/getting-started/fixing-npm-permissio

  2. 運(yùn)行git-tool
    我們發(fā)現(xiàn)控制臺(tái)會(huì)打印出git-tool。

    圖一

實(shí)現(xiàn)

經(jīng)過(guò)以上步驟我們已經(jīng)基本搭好環(huán)境了,下面就可以開(kāi)始寫(xiě)自己的邏輯了。

  • 參數(shù)讀取
    process.argv用來(lái)獲取命令行參數(shù)。
    修改index.js文件

    #!/usr/bin/env node
    console.log('git-tool')
    console.log(process.argv)
    

    然后執(zhí)行git-tool ss cd,結(jié)果如下圖所示:

    圖二

process.argv返回一個(gè)數(shù)組,數(shù)組前兩位是固定的,分別是node程序的路徑和腳本存放的位置,從第三位開(kāi)始才是額外輸入的內(nèi)容。
npm社區(qū)有一些優(yōu)秀的命令行參數(shù)解析包,如yargscommander.js
我使用的是commander.js

  • 插件
    commander.js的基本使用很簡(jiǎn)單,

    #!/usr/bin/env node
    const program = require('commander');
    program.version('1.0.0')
    program
     .command('codeLineNum')
     .description('統(tǒng)計(jì)git提交代碼量')
     .option("--author [author]", "統(tǒng)計(jì)指定作者git提交代碼量")
     .action(function (options) {
       console.log(options.author)
     })
    program.parse(process.argv);
    

    此時(shí)執(zhí)行git-tool -h,效果如下:

    圖三

它會(huì)幫我們自動(dòng)做一些事情,很方便。

  • 思路
    我們要實(shí)現(xiàn)統(tǒng)計(jì)代碼提交量的目的,就必須借助git命令。
    git log --author="username" --pretty=tformat: --numstat
    該命令輸出如下:

    圖四

    第一列為增加的代碼行數(shù),第二列為刪除的代碼行數(shù),第三列為改動(dòng)的文件。
    一些管道命令符可以處理這些數(shù)據(jù),但是Windows系統(tǒng)不支持。
    所以我的思路是把數(shù)據(jù)寫(xiě)到文件中,然后在逐行讀取進(jìn)行處理。

  • 代碼
    具體實(shí)現(xiàn)細(xì)節(jié)就不展開(kāi)了,有興趣的可以去GitHub看源碼。
    最終實(shí)現(xiàn)效果如下

    圖五
    圖六

發(fā)布npm包

  1. 創(chuàng)建npm賬戶(如果已有,略過(guò)該步驟)
    注冊(cè)地址:https://www.npmjs.com/signup
  2. 登陸
    npm login
  3. 發(fā)布
    npm publish

每次發(fā)布時(shí)都需要更改package.json 中的version;
發(fā)布需將npm registry地址設(shè)為 http://registry.npmjs.org
npm config set registry http://registry.npmjs.org

參考資料

手把手教你使用nodejs編寫(xiě)cli(命令行)
Node.js 命令行程序開(kāi)發(fā)教程-阮一峰

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 得益于 Node.js,我們可以使用熟悉的 Javascript 語(yǔ)言來(lái)開(kāi)發(fā)跨平臺(tái)的命令行程序。 圖形界面:操作簡(jiǎn)...
    前端小透明閱讀 1,787評(píng)論 0 7
  • 描述 npm從以下來(lái)源獲取配置值,按優(yōu)先級(jí)排序: 命令行標(biāo)記 在命令行上放置--foo bar設(shè)置foo配置參數(shù)為...
    竹天亮閱讀 44,488評(píng)論 0 8
  • 將一維數(shù)組傳遞到方法中。
    5c8e2b8217ae閱讀 197評(píng)論 0 1
  • 一個(gè)人喜歡什么或不喜歡什么,是件非常私人的事情。 有的人喜歡熱鬧,有的人喜歡安靜;有的人喜歡宅在家里,有的人喜歡外...
    對(duì)花情味閱讀 1,406評(píng)論 3 6

友情鏈接更多精彩內(nèi)容