如何從0開(kāi)始用node寫一個(gè)自己的命令行程序
前言
什么是命令行程序呢?像我們常見(jiàn)的webpack,vue-cli都屬于命令行程序。
本文將帶你從0開(kāi)始用node寫一個(gè)自己的命令行程序,并發(fā)布到npm。
準(zhǔn)備工作
我打算寫一個(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í)行文件。
4、新建index文件。
#!/usr/bin/env node
console.log('git-tool')
#!/usr/bin/env node 的意思是讓系統(tǒng)自己去找node的執(zhí)行程序,該行必不可少。
5、執(zhí)行 npm link
如果執(zhí)行該命令報(bào)錯(cuò),參考 https://docs.npmjs.com/getting-started/fixing-npm-permissio
6、運(yùn)行 git-tool
我們發(fā)現(xiàn)控制臺(tái)會(huì)打印出git-tool。

圖一
實(shí)現(xiàn)
經(jīng)過(guò)以上步驟我們已經(jīng)基本搭好環(huán)境了,下面就可以開(kāi)始寫自己的邏輯了。
參數(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ù)解析包,如 yargs , commander.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ù)寫到文件中,然后在逐行讀取進(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
參考資料
Node.js 命令行程序開(kāi)發(fā)教程-阮一峰
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
node.js中process進(jìn)程的概念和child_process子進(jìn)程模塊的使用方法示例
這篇文章主要介紹了node.js中process進(jìn)程的概念和child_process子進(jìn)程模塊的使用方法,結(jié)合實(shí)例形式分析了node.js中process進(jìn)程和child_process子進(jìn)程模塊相關(guān)概念、原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2020-02-02
Node.js入門教程:在windows和Linux上安裝配置Node.js圖文教程
這篇文章主要介紹了Node.js入門教程:在windows和Linux上安裝配置Node.js的方法,本文圖文并茂,步驟明細(xì),是學(xué)習(xí)安裝node.js的絕佳教程,需要的朋友可以參考下2014-08-08
一文詳解Node中module.exports和exports區(qū)別
這篇文章主要介紹了一文詳解Node中module.exports和exports區(qū)別2023-03-03
關(guān)于node使用multer進(jìn)行文件的上傳與下載
這篇文章主要介紹了關(guān)于node使用multer進(jìn)行文件的上傳與下載,Multer是一個(gè)Node.js中間件,用于處理表單數(shù)據(jù)中的multipart/form-data類型,需要的朋友可以參考下2023-04-04

