如何打造乙個屬於自己的命令列工具

2021-10-25 01:28:41 字數 4155 閱讀 7088

平常經常使用一些npm cli工具,你是否好奇這些工具又是怎麼開發出來的呢?接下來這篇文章,就會介紹如何利用node.js開發乙個屬於你自己的命令列工具。

首先,我們需要先建立乙個基本的專案結構:

mkdir git-repo-cli

cd git-repo-cli

npm init #初始化專案

接著我們建立所需的檔案:

接著我們先來寫乙個簡單的入口程式,在index.js檔案中**如下:

const chalk = require('chalk');

const clear = require('clear');

const figlet = require('figlet');

const commander = require('commander');

commander

.command('init')

.description('hello world')

.action(() => )));

});commander.parse(process.ar**);

if (!commander.args.length)

上面的**中引用了chalk,clear,figletcommander這幾個npm庫,,其中chalk負責命令列不同顏色文字的顯示,便於使用者使用。clear庫負責清空命令列介面,figlet可以在命令列中以ascii art形式顯示文字。最後commander庫就是用來實現命令列介面最主要的庫。

寫完**後,我們可以在命令列中輸入如下**啟動:

node index.js init
接著我們就可以看到這樣的結果:

把基本的架子搭起來後,我們就可以開始寫功能模組的**了。

lib/files.js檔案中,主要要實現以下兩個功能::

const fs = require('fs');

const path = require('path');

module.exports = catch (err)

},isgitrepository: () => }};

在使用者在執行命令列工具的時候,需要收集一些變數資訊,因此,可以我們需要利用inquirer這個npm庫來實現「詢問模組」。

const inquirer = require('inquirer');

module.exports = else }},

else }}

];return inquirer.prompt(questions);}}

為了實現和github的介面通訊,需要獲得token認證資訊。因此,在lib/github_credentials.js檔案中,我們獲得token,並借助configstore庫寫入package.json檔案中。

const configstore = require('configstore');

const pkg = require('../package.json')

const octokit = require('@octokit/rest')();

const _ = require('lodash');

const inquirer = require("./inquirer");

const conf = new configstore(pkg.name);

module.exports = ,

githubauth: (token) => );

},getstoredgithubtoken: () => ,

setgithubcrendeitals: async () => , credentials))},

registernewtoken: async () => );

const token = response.data.token;

if (token) else

} catch(error) }}

其中@octokit/rest是node端與github通訊主要的庫。

接下來就可以寫我們的介面了:

// index.js

const github = require('./lib/gitub_credentials');

commander.

command('check-token')

.description('check user github credentials')

.action(async () =>

console.log(token);

});

最後,在命令列中輸入如下命令:

node index.js check-token
它會先會在configstore的預設資料夾下~/.config尋找token, 如果沒有發現的話,就會提示使用者輸入使用者名稱和密碼後新建一場新的token。

有了token後,就可以執行github的很多的操作,我們以新建倉庫為例:

askrepositorydetails: () =>  else }},

,];return inquirer.prompt(questions);

},askignorefiles: (filelist) => ];

return inquirer.prompt(questions);

}

接著,實現對應的新建倉庫、新建.gitignore檔案等操作:

// create_a_repo.js

const _ = require('lodash');

const fs = require('fs');

const git = require('******-git')();

const inquirer = require('./inquirer');

const gh = require('./github_credentials');

module.exports = ;

try catch (error)

},creategitignore: async () => else

} else

},setuprepo: async (url) => catch (err) }}

最後,在index.js檔案中新建乙個create-repo的命令,執行整個流程。

// index.js

commander

.command('create-repo')

.description('create a new repo')

.action(async () =>

} catch (error) }}

})

寫完**後,在命令列中執行如下命令即可:

node index.js create-repo

如何了解乙個命令列man

通常是一段描述,通常是命令列的由來 可編寫指令碼的影象處理系統。講解命令列的基本用法,這裡提供了基本的使用格式,一般對於劃線處還會有進一步描述 通常用語簡要描述一下命令列功能應用 針對每乙個選項具體講解,對於劃線處如果不懂,後面會有講述 通常用語講解相關選項,比如這裡就將key的使用做了一些限制 命...

打造乙個全命令列的 Android 構建系統

ide都是給小白程式設計師的,大牛級別的程式設計師一定是命令列控,終端控,你看大牛都是使用vim,emacs 就一切搞定 這話說的雖然有些絕對,但是也不無道理,做開發這行要想效率高,自動化還真是缺少不了命令列工具,因為只有命令列才是最佳的人機互動工具。其實ide也是底層也是呼叫命令列工具而已,只不過...

如何建立屬於自己的乙個論壇

最近突然興起,想建立乙個屬於自己的論壇。剛開始打算自己寫乙個,然後發現,工作量太大。希望能找到乙個原始碼,直接使用即可。找了許多基於ssh的框架的原始碼,但是最後發現都不行,都是各種demo,各種缺功能,需要自己去完善。後面,找到乙個php的框架原始碼,叫discuz,還不錯,可惜了,是php寫的。...