作一個CLI版的時間管理工具(四)

作一個CLI版的時間管理工具(四)

這是我參與8月更文挑戰的第5天,活動詳情查看:8月更文挑戰git

前言

上一篇文章主要闡述了:github

  • 批量markdown轉json邏輯
  • 合併多個md的中記錄的內容,並按時間排序

本文將詳細介紹的開發:json

  • 初始化項目模板指令:timec init <projectName>
  • 初始化記錄模板指令:timec create <filename>

功能開發

初始化模板項目

簡述

用戶輸入簡單的指令,就能夠自動建立出一個時間管理模板工程markdown

模板工程結構以下app

project
├── README.md
├── study
|  └── README.md
└── work
   └── README.md
複製代碼

工做流程

  1. 終端輸入指令
  2. 獲取到指令執行目錄(cmd)與用戶輸入的項目名稱
  3. 利用existsSync判斷目錄是否存在
    1. 目錄不存在的,利用fs.mkdirSync建立目錄
  4. 經過fs.writeFileSync建立文件,將文件寫入到用戶的當前目錄下
    1. 文件內容來源於指定靜態資源目錄(相對路徑)

實現

註冊init指令:ide

  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. 存在則拋出已經存在警告
  2. 將模板文件的內容先讀入
  3. 經過createDir方法建立目錄
  4. 經過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)
}
複製代碼

本期效果

圖片

其它

下一期根據已有的功能整個週報生成(鴿了一期)

因爲天天空閒時間有限,本文就先到這

若是讀者還感受意猶未盡,敬請期待後續更新,或先關注一下倉庫

歡迎評論區提需求,交流探討

本系列會不斷的更新迭代,直至產品初代完成

相關文章
相關標籤/搜索