Cli Todo命令行todo工具使用演示
前言
bald3r-node-todo
是一個用node.js開發的,主要用於命令行的todo工具,主要使用瞭fs模塊,目前已經發佈至npm
本工具主要使用瞭面向接口的編程思想,並用jest進行單元測試
鏈接
baIder/node-todo (github.com)
bald3r-node-todo – npm (npmjs.com)
使用演示
- 首先使用
yarn
或npm
安裝bald3r-node-todo
npm install bald3r-todo yarn global add bald3r-todo
安裝完成後就可以使用全局命令t
來使用瞭
使用命令行添加一個待辦t add [taskName]
查看當前待辦
二級菜單
清空所有待辦t clear
實現過程
實現命令行參數
這裡我使用瞭commander庫來實現參數功能
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默認會有兩個參數,一個是node的路徑,一個是當前文件的路徑,因此我們判斷參數的數量是否為2就可以判斷用戶是否傳參
如果用戶沒有傳參,則顯示所有的待辦項
if (process.argv.length === 2) { api.showAll() }
實現可以操作的命令行
這裡我使用瞭inquirer庫來給命令行做瞭美化,實現可以用方向鍵和回車控制的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) }) }
這樣便實現瞭下圖的二級菜單
待辦項保存在本地
使用node.js的fs
模塊來實現對文件的讀寫,這裡涉及一個保存路徑的問題,在本項目中,為瞭方便使用瞭~
目錄,所有數據保存在~/.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()
即可完成對數據的讀寫。這裡需要註意這兩個操作都是異步的,因此用到瞭Promise
,這裡的{flag: 'a+'}
是表示讀取文件,若不存在則創建一個:
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工具使用演示的詳細內容,更多關於Cli Todo命令行todo工具的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- node.js文件系統模塊和兩個重要模塊
- 如何在現代JavaScript中編寫異步任務
- Node.js原理阻塞和EventEmitter及其繼承的運用實戰
- 關於node編寫文件上傳的接口的坑及解決
- Node的文件系統你瞭解多少