Cli Todo命令行todo工具使用演示

 更新时间:2022年08月08日 15:03:38   作者:bald3r  
这篇文章主要为大家介绍了Cli Todo命令行todo工具使用演示示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

bald3r-node-todo是一个用node.js开发的,主要用于命令行的todo工具,主要使用了fs模块,目前已经发布至npm

本工具主要使用了面向接口的编程思想,并用jest进行单元测试

链接

baIder/node-todo (github.com)

bald3r-node-todo - npm (npmjs.com)

使用演示

  • 首先使用yarnnpm安装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工具的资料请关注脚本之家其它相关文章!

相关文章

  • 初学node.js中实现删除用户路由

    初学node.js中实现删除用户路由

    这篇文章主要介绍了node.js中如何实现删除用户路由,下面和小编来一起学习一下吧
    2019-05-05
  • Node.js中MongoDB查询数据的方法

    Node.js中MongoDB查询数据的方法

    在Node.js中,可以使用MongoDB驱动程序和Mongoose库来进行MongoDB的查询操作,本文就来介绍一下Node.js中MongoDB查询数据的方法,感兴趣的可以了解一下
    2023-12-12
  • nodejs转换音频文件格式并压缩导出zip格式(vscode语音插件开发)

    nodejs转换音频文件格式并压缩导出zip格式(vscode语音插件开发)

    FFmpeg是一套开源的音视频处理工具,通俗地讲,可以对音视频文件进行剪切、拼接、水印、转码等处理,这篇文章主要介绍了nodejs转换音频文件格式并压缩导出zip格式(vscode语音插件开发),需要的朋友可以参考下
    2023-05-05
  • webpack创建项目并打包的详细流程记录

    webpack创建项目并打包的详细流程记录

    webpack在前端工程领域起到了中流砥柱的作用,理解它的内部实现机制会对你的工程建设提供很大的帮助(不论是定制功能还是优化打包),下面这篇文章主要给大家介绍了关于webpack创建项目并打包的详细流程,需要的朋友可以参考下
    2023-03-03
  • 详解electron如何拦截网络请求并处理响应

    详解electron如何拦截网络请求并处理响应

    这篇文章主要为大家详细介绍了electron如何拦截网络请求并处理响应,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • 如何在Express4.x中愉快地使用async的方法

    如何在Express4.x中愉快地使用async的方法

    这篇文章主要介绍了如何在Express4.x中愉快地使用async的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 深入分析node.js的异步API和其局限性

    深入分析node.js的异步API和其局限性

    这篇文章首先给大家介绍了为什么要用异步API,其次node.js异步api在使用过程有一些什么样的限制呢,对于这个问题我们下面来看看这篇关于node.js异步的介绍分析吧,有需要的可以参考借鉴。
    2016-09-09
  • node异步使用await和不用await的区别实例分析

    node异步使用await和不用await的区别实例分析

    这篇文章主要介绍了node异步使用await和不用await的区别,结合实例形式分析了node.js异步使用await和不用await的实例中,同步与异步执行的区别,需要的朋友可以参考下
    2023-06-06
  • Node.js中Express生成Token的实现方法

    Node.js中Express生成Token的实现方法

    本文介绍了在Express中生成和使用Token进行用户认证的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • Node.js操作MySQL8.0数据库无法连接的问题解决

    Node.js操作MySQL8.0数据库无法连接的问题解决

    使用node.js连接数据库MySQL 8时候,显示报错 ER_NOT_SUPPORTED_AUTH_MODE,本文就来介绍一下解决方法,感兴趣的可以了解一下
    2023-10-10

最新评论