前言
通过前面10篇文章的介绍,咱们的第一版差不多迭代完毕
由于之前时间很紧,代码质量堪忧,这篇主要来做一下代码的优化工作介绍
代码优化
目录结构
当前的目录结构如下,所有的ccommand注册逻辑,业务逻辑均在./bin/index.js
文件中
维护起来比较麻烦,首先咱们把里面的东西拆分一下
/time-control ├── README.md ├── bin | └── index.js ├── src | ├── output | ├── template | └── utils └── yarn.lock
拆分后的目录结构如下,src
增加一个command
目录,目录下每个指令对应一个command文件
然后通过index.js
文件将这些指令汇总,统一对外暴露
/time-control ├── src | ├── command | | ├── command1.js | | ├── command2.js | | ├── index.js
具体示例如下
src/command/command1.js
module.exports = function (param1,param2) { }
src/command/index.js
const command1 = require('./command1') module.exports = { command1, }
这样在bin/index,js
文件中直接引入即可,例如初始化项目指令
这样业务逻辑和指令注册逻辑就分开了,维护也更加便捷
const { initCommand } = require('./../src/command') /** * 初始化项目 */ commander.command("init <projectName>") .alias('i') .description('init project') .action(initCommand)
重复代码
指令的逻辑中,有很多重复代码,直接CV的,我们可以将这部分代码转成公共方法
src/utils/index.js
:
- 例如下面几个简单,而使用地方又很多的
// 获取命令执行路径 function getCWD(){ return process.cwd() } // 获取配置文件 function getConfig(){ return require(path.join(__dirname,'../../.config/record.json')) } // 获取输出文件的默认文件名 function getOutFilename(){ return 'timec-res' }
朴素代码
毫秒转时分秒,这个方法主要是格式化时间展示,旧的逻辑如下,非常的朴实无华,可读性也不是太高
function mmsToNormal(mms) { let str = '' mms = (mms / 1000) >> 0 const day = (mms / (24 * 60 * 60)) >> 0 day && (str += `${day}天 `) mms -= day * 24 * 60 * 60 const hour = (mms / (60 * 60)) >> 0 hour && (str += `${hour}时 `) mms -= hour * 60 * 60 const minute = (mms / 60) >> 0 minute && (str += `${minute}分 `) mms -= minute * 60 str += `${mms}秒` return str }
如果只是展示时分秒的,可以直接调用已注册的format方法:
- 其中
+date.format('dd')
的目的是把获取到的日期转成数字 - 然后减去1即可得到过去的天数
- 时分秒就直接格式化即可
function fn(mms){ let str = `${+date.format('dd')-1}天${date.format('hh时mm分ss秒')}` return str }
这样代码可以说优化到了一行的样子(除开format方法的具体实现)
小结
代码还在完善中,明天再大大优化一遍和大家分享
顺便接入一个生成页面的逻辑(计划是接入Vite)
其它
由于每天空闲时间有限,本文就先到这
如果读者还感觉意犹未尽,敬请期待后续更新,或持续关注一下仓库的状态
欢迎评论区提需求,交流探讨
本系列会不断的更新迭代,直至产品初代完成