这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战”git
上一篇文章主要阐述了:github
本文将详细介绍的开发:json
timec init <projectName>
timec create <filename>
用户输入简单的指令,就能够自动建立出一个时间管理模板工程markdown
模板工程结构以下app
project
├── README.md
├── study
| └── README.md
└── work
└── README.md
复制代码
existsSync
判断目录是否存在
fs.mkdirSync
建立目录fs.writeFileSync
建立文件,将文件写入到用户的当前目录下
注册init
指令:ide
commander.command
API注册<projectName>
参数/** * 初始化项目 */
commander.command("init <projectName>")
.alias('i')
.description('init project')
.action((projectName) => {
if (initProject(cwd, projectName)) {
console.log(`初始化 ${projectName} 成功`);
return
}
console.log(`${projectName} 已存在`);
})
复制代码
接下来是具体的initProject
逻辑:工具
process.cwd()
指令执行目录已经存在
警告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
}
复制代码
这样初始化一个模板项目的流程就完成了oop
有模板项目就有模板文件post
这部分主要阐述生成模板文件的流程ui
首先注册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)
}
复制代码
下一期根据已有的功能整个周报生成(鸽了一期)
因为天天空闲时间有限,本文就先到这
若是读者还感受意犹未尽,敬请期待后续更新,或先关注一下仓库
欢迎评论区提需求,交流探讨
本系列会不断的更新迭代,直至产品初代完成