Cli Todo命令行todo工具使用演示
前言
bald3r-node-todo是一個用node.js開發(fā)的,主要用于命令行的todo工具,主要使用了fs模塊,目前已經(jīng)發(fā)布至npm
本工具主要使用了面向接口的編程思想,并用jest進(jìn)行單元測試
鏈接
bald3r-node-todo - npm (npmjs.com)
使用演示
- 首先使用
yarn或npm安裝bald3r-node-todo
npm install bald3r-todo yarn global add bald3r-todo
安裝完成后就可以使用全局命令t來使用了

使用命令行添加一個待辦t add [taskName]

查看當(dāng)前待辦

二級菜單


清空所有待辦t clear

實現(xiàn)過程
實現(xiàn)命令行參數(shù)
這里我使用了commander庫來實現(xiàn)參數(shù)功能
program
.command('add')
.description('add a task')
.action((...args) => {
const words = args.slice(0, -1).join(' ')
api.add(words).then(() => {
console.log('The task has been successfully added')
}, () => {
console.log('Failed to add the task')
})
})
program
.command('clear')
.description('clear all tasks')
.action(() => {
api.clear().then(() => {
console.log('All tasks have been successfully removed')
}, () => {
console.log('Failed to remove all the tasks')
})
})
commander默認(rèn)會有兩個參數(shù),一個是node的路徑,一個是當(dāng)前文件的路徑,因此我們判斷參數(shù)的數(shù)量是否為2就可以判斷用戶是否傳參
如果用戶沒有傳參,則顯示所有的待辦項
if (process.argv.length === 2) {
api.showAll()
}
實現(xiàn)可以操作的命令行
這里我使用了inquirer庫來給命令行做了美化,實現(xiàn)可以用方向鍵和回車控制的UI界面
inquirer的使用非常簡單,這里我展示二級菜單作為參考
function askForAction(list, index) {
const actions = {markAsUndone, markAsDone, changeTitle, removeTask}
inquirer.prompt({
type: 'list',
name: 'action',
message: 'What to do with the task?',
choices: [
{name: 'Exit', value: 'quit'},
{name: 'Mark as Done', value: 'markAsDone'},
{name: 'Mark as Undone', value: 'markAsUndone'},
{name: 'Edit Title', value: 'changeTitle'},
{name: 'Delete', value: 'removeTask'},
]
}).then(answer2 => {
const action = actions[answer2.action]
action && action(list, index)
})
}
這樣便實現(xiàn)了下圖的二級菜單

待辦項保存在本地
使用node.js的fs模塊來實現(xiàn)對文件的讀寫,這里涉及一個保存路徑的問題,在本項目中,為了方便使用了~目錄,所有數(shù)據(jù)保存在~/.todo中
獲取~目錄:
const homedir = require('os').homedir()
const home = process.env.HOME || homedir
考慮到跨平臺使用路徑的表示方式不同,這里使用了node.js中的path模塊:
const p = require('path')
const dbPath = p.join(home, '.todo')
然后使用fs模塊中的fs.readFile()和fs.writeFile()即可完成對數(shù)據(jù)的讀寫。這里需要注意這兩個操作都是異步的,因此用到了Promise,這里的{flag: 'a+'}是表示讀取文件,若不存在則創(chuàng)建一個:
read(path = dbPath) {
return new Promise((resolve, reject) => {
fs.readFile(path, {flag: 'a+'}, (error, data) => {
if (error) return reject(error)
let list
try {
list = JSON.parse(data.toString())
} catch (error2) {
list = []
}
resolve(list)
})
})
}以上就是Cli Todo命令行todo工具使用演示的詳細(xì)內(nèi)容,更多關(guān)于Cli Todo命令行todo工具的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Node.js中MongoDB查詢數(shù)據(jù)的方法
在Node.js中,可以使用MongoDB驅(qū)動程序和Mongoose庫來進(jìn)行MongoDB的查詢操作,本文就來介紹一下Node.js中MongoDB查詢數(shù)據(jù)的方法,感興趣的可以了解一下2023-12-12
nodejs轉(zhuǎn)換音頻文件格式并壓縮導(dǎo)出zip格式(vscode語音插件開發(fā))
FFmpeg是一套開源的音視頻處理工具,通俗地講,可以對音視頻文件進(jìn)行剪切、拼接、水印、轉(zhuǎn)碼等處理,這篇文章主要介紹了nodejs轉(zhuǎn)換音頻文件格式并壓縮導(dǎo)出zip格式(vscode語音插件開發(fā)),需要的朋友可以參考下2023-05-05
webpack創(chuàng)建項目并打包的詳細(xì)流程記錄
webpack在前端工程領(lǐng)域起到了中流砥柱的作用,理解它的內(nèi)部實現(xiàn)機制會對你的工程建設(shè)提供很大的幫助(不論是定制功能還是優(yōu)化打包),下面這篇文章主要給大家介紹了關(guān)于webpack創(chuàng)建項目并打包的詳細(xì)流程,需要的朋友可以參考下2023-03-03
詳解electron如何攔截網(wǎng)絡(luò)請求并處理響應(yīng)
這篇文章主要為大家詳細(xì)介紹了electron如何攔截網(wǎng)絡(luò)請求并處理響應(yīng),文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
node異步使用await和不用await的區(qū)別實例分析
這篇文章主要介紹了node異步使用await和不用await的區(qū)別,結(jié)合實例形式分析了node.js異步使用await和不用await的實例中,同步與異步執(zhí)行的區(qū)別,需要的朋友可以參考下2023-06-06
Node.js中Express生成Token的實現(xiàn)方法
本文介紹了在Express中生成和使用Token進(jìn)行用戶認(rèn)證的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
Node.js操作MySQL8.0數(shù)據(jù)庫無法連接的問題解決
使用node.js連接數(shù)據(jù)庫MySQL 8時候,顯示報錯 ER_NOT_SUPPORTED_AUTH_MODE,本文就來介紹一下解決方法,感興趣的可以了解一下2023-10-10

