前言
上一篇文章主要阐述了:
- 批量markdown转json逻辑
- 合并多个md的中记录的内容,并按时间排序
本文将详细介绍的开发:
- 初始化项目模板指令:
timec init <projectName>
- 初始化记录模板指令:
timec create <filename>
功能开发
初始化模板项目
简述
用户输入简单的指令,就可以自动创建出一个时间管理模板工程
模板工程结构如下
project ├── README.md ├── study | └── README.md └── work └── README.md
工作流程
- 终端输入指令
- 获取到指令执行目录(cmd)与用户输入的项目名称
- 利用
existsSync
判断目录是否存在
- 目录不存在的,利用
fs.mkdirSync
创建目录
- 通过
fs.writeFileSync
创建文件,将文件写入到用户的当前目录下
- 文件内容来源于指定静态资源目录(相对路径)
实现
注册init
指令:
- 使用
commander.command
API注册 - 从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:用户输入的项目名
- 判断目标目录是否存在
- 不存在则创建
- 存在则抛出
已经存在
警告
- 将模板文件的内容先读入
- 通过
createDir
方法创建目录 - 通过
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) }
本期效果
网络异常,图片无法展示
|
其它
下一期根据已有的功能整个周报生成(鸽了一期)
由于每天空闲时间有限,本文就先到这
如果读者还感觉意犹未尽,敬请期待后续更新,或先关注一下仓库
欢迎评论区提需求,交流探讨
本系列会不断的更新迭代,直至产品初代完成