做一个CLI版的时间管理工具(四)

简介: 做一个CLI版的时间管理工具(四)

前言


上一篇文章主要阐述了:


  • 批量markdown转json逻辑
  • 合并多个md的中记录的内容,并按时间排序


本文将详细介绍的开发:


  • 初始化项目模板指令:timec init <projectName>
  • 初始化记录模板指令:timec create <filename>


功能开发


初始化模板项目

简述


用户输入简单的指令,就可以自动创建出一个时间管理模板工程

模板工程结构如下


project
├── README.md
├── study
|  └── README.md
└── work
   └── README.md


工作流程


  1. 终端输入指令
  2. 获取到指令执行目录(cmd)与用户输入的项目名称
  3. 利用existsSync判断目录是否存在
  1. 目录不存在的,利用fs.mkdirSync创建目录
  1. 通过fs.writeFileSync创建文件,将文件写入到用户的当前目录下
  1. 文件内容来源于指定静态资源目录(相对路径)


实现


注册init指令:


  1. 使用commander.commandAPI注册
  2. 从action回掉中拿到 设置的<projectName>参数


/**
 * 初始化项目
 */
commander.command("init <projectName>")
    .alias('i')
    .description('init project')
    .action((projectName) => {
        if (initProject(cwd, projectName)) {
            console.log(`初始化 ${projectName} 成功`);
            return
        }
        console.log(`${projectName} 已存在`);
    })


接下来是具体的initProject逻辑:


  • cmd:process.cwd()指令执行目录
  • projectName:用户输入的项目名


  1. 判断目标目录是否存在
  1. 不存在则创建
  2. 存在则抛出已经存在警告
  1. 将模板文件的内容先读入
  2. 通过createDir方法创建目录
  3. 通过createFile方法将内容写到目标目录


const path = require('path')
// 静态资源目录
const assetsDir = path.resolve(__dirname, 'assets')
const readmeContent = getFileContent(path.resolve(assetsDir, 'README.md'))
const demoContent = getFileContent(path.resolve(assetsDir, 'demo.md'))
/**
 * 初始化一个模板项目
 * @param {string} cwd 项目目录
 * @param {string} projectName 项目名称
 */
function initProject(cwd, projectName) {
    const dir = path.resolve(cwd, projectName)
    // 创建目录
    if (createDir(dir)) {
        createFile(path.resolve(dir, 'README.md'), readmeContent)
        createDir(path.resolve(dir, 'work'))
        createDir(path.resolve(dir, 'study'))
        createFile(path.resolve(dir, 'work', 'README.md'), demoContent)
        createFile(path.resolve(dir, 'study', 'README.md'), demoContent)
        return true
    }
    return false
}
/**
 * 创建一个不存在的目录
 * @param {string} path 
 */
function createDir(path) {
    if (!fs.existsSync(path)) {
        fs.mkdirSync(path, { recursive: true })
        return true
    }
    console.error(`${path} 已存在`);
    return false
}


这样初始化一个模板项目的流程就完成了


初始化记录模板


有模板项目就有模板文件


这部分主要阐述生成模板文件的流程


首先注册create <filename> 指令


/**
 * 创建一个时间记录模板文件
 */
commander.command("create <filename>")
    .alias('c')
    .description('create template note file')
    .action((filename) => {
        if (createTemplateFIle(cwd, filename)) {
            console.log(`${filename} 创建成功`);
            return
        }
        console.log(`${filename} 已存在`);
    })


主要逻辑是createTemplateFIle方法里


这里的思路就比较简单,因为创建模板文件的目录默认是指令命令的目录


一行代码就搞定文件的写出


/**
 * 初始化一个模板记录文件
 * @param {string} cwd 文件目录
 * @param {string} filename 文件名称
 */
function createTemplateFIle(cwd, filename) {
    return createFile(path.resolve(cwd, filename), demoContent)
}


本期效果


网络异常,图片无法展示
|


其它


下一期根据已有的功能整个周报生成(鸽了一期)


由于每天空闲时间有限,本文就先到这


如果读者还感觉意犹未尽,敬请期待后续更新,或先关注一下仓库


欢迎评论区提需求,交流探讨


本系列会不断的更新迭代,直至产品初代完成



相关文章
|
6月前
|
时序数据库
InfluxData【部署 02】时序数据库 InfluxDB 客户端工具 Influx CLI 最新版本安装启动验证(在线安装+离线安装+各版本下载地址)
InfluxData【部署 02】时序数据库 InfluxDB 客户端工具 Influx CLI 最新版本安装启动验证(在线安装+离线安装+各版本下载地址)
675 0
|
6月前
|
JavaScript 前端开发 数据安全/隐私保护
NodeJS 下构建 命令行工具(CLI) 与 交互式命令界面 的实践
NodeJS 下构建 命令行工具(CLI) 与 交互式命令界面 的实践
435 1
|
JSON 数据格式
做一个CLI版的时间管理工具(六)
做一个CLI版的时间管理工具(六)
|
存储
做一个CLI版的时间管理工具(七)
做一个CLI版的时间管理工具(七)
|
数据可视化 JavaScript Shell
做一个CLI版的时间管理工具(12)
做一个CLI版的时间管理工具(12)
|
前端开发 API
做一个CLI版的时间管理工具(13)
做一个CLI版的时间管理工具(13)
|
JSON 数据格式
做一个CLI版的时间管理工具(二)
做一个CLI版的时间管理工具(二)
|
JSON 数据格式
做一个CLI版的时间管理工具(三)
做一个CLI版的时间管理工具(三)
|
JSON 搜索推荐 数据格式
做一个CLI版的时间管理工具(九)
做一个CLI版的时间管理工具(九)