比如loader
一个基于文件的todo工具
效果“yarn global add node-todo-1
创建Node.js 命令行项目
写第一行代码然后运行
console.log(‘hi i an Node.js’)
做命令行工具
安装commader.js
yarn add commander
命令行支持参数
打印出undefined
说明选项是开光, -x 对应的就有人
目前运行原理, node 运行了index.js 后面接受了 —xxx的选项
声明add是子命令
文档复制粘贴
子命令叫clone,作用打出log
program
.command('clone <source> [destination]')
.description('clone a repository into a newly created directory')
.action((source, destination) => {
console.log('clone command called');
})
自定义 命令add
最后一个参数是个command对象
实现add功能
入口文件,从index.js 改名cli.js
添加额外文件表示api
数据库
home目录
~/.todo
获取home目录
const homedir = require('os').homedir()
运行打印
得到home环境变量
const home = process.env.HOME || homedir
打印home变量和home目录
在家目录里创建文件存储
- 读取之前的任务
fs.readFile(home+'.todo')
不同系统下路径表示方法不同,nodejs解决方法const p = require('path')
const dbPath = p.join(home, '.todo')
参数分析
encoding 默认utf8
读文件是为了之后写,操作是追加,用a
a+ 不存在还会创建
得到两个参数回调,error data
data有可能是字符串或者buffer
变成字符串,用函数
代码的作用就是读取home目录的todo,
fs.readFile(dbPath,{flag: 'a+'},(error,data)=>{
console.log(data.toString())
const homedir = require('os').homedir();
const home = process.env.HOME || homedir
const fs = require('fs')
const p = require('path')
const dbPath = p.join(home, '.todo')
module.exports.add = (titile)=> {
fs.readFile(dbPath,{flag: 'a+'},(error,data)=>{
console.log(data.toString())
}
可以确定通过readfile读取到之前的任务
- 往里面添加一个title任务
- 存储任务到文件
创建空的数组
尝试把data
封装优化代码
面向接口编程
用new Promise 处理异步操作,不能return ,成功时候resolve,失败reject、
await async
read返回的是promise,使用await拿到成功的结果
当前函数必须标记文async
write写法
传数组,数组变字符串,写道路径里,路径也需要传
write也是异步的,外面如何知道成功失败?
等写结束才确保add成功
promise封装一下
argv的长度,说明用户直接运行了node cli.js