這是我參與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)
}
複製代碼
下一期根據已有的功能整個週報生成(鴿了一期)
因爲天天空閒時間有限,本文就先到這
若是讀者還感受意猶未盡,敬請期待後續更新,或先關注一下倉庫
歡迎評論區提需求,交流探討
本系列會不斷的更新迭代,直至產品初代完成