前言
相信小伙伴儿们在日常开发工作中,都有属于自己的工作流,而支撑这些工作流的,定然少不了形形色色的开发工具的身影。
这些工具的价值旨在提升小伙伴儿们的人效,可随着工具种类的日益增加,在日常使用的过程中难免会有些跳跃。尤其是在编码过程中,工具的切换可能会打断我们的思路(请听我狡辩......)
因此,我便萌生了开发一个工具集的念头,efficient-tools 应运而生。
截止目前,efficient-tools 中 (也就) 已经集成了三个小工具,下面我来依次介绍下~
功能介绍
ET-Link
是个啥
这个玩楞的作用是用来保存日常常用的一些链接地址,有点儿类似于浏览器收藏夹的功能。
做这个玩楞是因为之前每次想要查个啥都需要经历:打开浏览器 -> 新开标签页 -> 输入页面地址(有时候不记得还得去百度搜或者收藏夹里找) 这几个步骤,多少有点繁琐(主要因为我懒 Orz...)。
但是用上这个工具,那就不一样了。只需要在控制台输入
etl -o/--open <url name>
就可以直接打开页面了,不用又是开浏览器,又是开标签这那的,岂不是美滋儿滋儿~
咋用
这玩楞用起来其实也不复杂。
第一步:你倒是先收藏啊
试想一下,平常我们在使用浏览器收藏夹的时候,是不是得先收藏,然后下次再想打开的时候才能在收藏夹里头找到?所以,用它的第一步也是先收藏你日常用的比较多的地址。
收藏地址主要有两种方式:
逐个添加
你可以通过以下命令逐个添加你日常常用的地址:
etl -a/--add <address> [key]
其中,address 是你想要收藏的链接地址,key 是这个地址对应的名称,之后打开地址则是通过 key 来查找这个地址并进行跳转的。当然,如果你觉得设置 key 比较麻烦的话(咱就是说你也懒)也可以不设置,收藏时会按照 / 将地址进行分割,并将末位作为该地址的 key(如果地址后缀花里胡哨的话,还是建议你勤快点儿呢亲~)。
一把梭
如果常用的地址太多了,逐个添加确实有点麻烦,这个时候,你可以通过如下命令一次性导入多个地址:
etl -i/--init <filepath>
其中,filepath 是存放地址信息的文件路径。
这个工具本质上其实就是维护了一个链接地址的键值对 json, 因此该文件需要是个 .json 文件,举个🌰:
{
"npm": "https://www.npmjs.com/"
}
第二步:You jump,I (看着你)jump
收藏完了之后,就可以进行跳转了。跳转命令其实就是一开始介绍的内个:
etl -o/--open <url name>
其他功能
使用这个工具主要就是以上两个步骤,当然,这个工具中也提供了一些辅助功能。
-r/--remove
如果过了一段时间之后,你发现有些地址你用不到了,或者不常用了,那么你可以通过此命令删掉它(没有利用价值的地址不配存在我的列表里👻:
etl -r/--remove <key>
TODO: 后续我会统计
使用次数,以便更直观的看出来哪些是不常用的地址。
-l/--list
如果你想看看自己已经存了哪些(花里胡哨)有用的地址,可以通过该命令将它们罗列出来:
etl -l/--list
-c/--check
有些时候,我们可能会需要在移动设备上浏览相关链接,此时可以通过该命令生成地址对应的二维码,而后扫码访问:
etl -c/--check <key>
-e/--empty
暴力清空所有已经存储的地址(阅后即焚行为):
etl -e/--empty
-d/--derive
该命令与 -i/--init 相对,它可以将已存储的命令导出到指定文件下(如果你有备份需求的话):
etl -d/--derive
执行命令后,你可以设置自定义的文件名称,默认是 addresses.json,确认后,文件会被导出到 执行该命令的当前目录下。
-m/--modify
如果手抖存错了地址或者写错了名称,可以通过它来对其进行编辑修改。
执行命令后,会让你选择想要修改的地址名称,并设置想要覆盖名称还是地址,随后输入覆盖的内容即可:
-w/--where
有的时候你可能会忘记保存地址的 json 文件在哪儿,通过执行该命令,你可以得到该文件的完整路径:
etl -w/--where
--directory
收藏的地址会默认保存到 /Users/<username>/etl.json 文件中,如果你觉得不妥,可以通过该命令设置你想要存放的地址:
etl --directory
至此,ET-Link 的功能介绍完毕~(容我喝口水... 吨吨吨吨吨吨吨吨~~)
ET-Dictionary
是个啥
字面意思,这玩楞就是个词典。相信大多数小伙伴儿都用过 Chrome 上的 沙拉划词 (戳不开的请科学上网),哪里不会划拉哪里~ So easy~
那除了查生词以外,这个玩楞的应用场景在哪儿呢?
还记得那句名言么:
开发中最麻烦的两件事:一件是缓存,另一件是取变量名。
当我们替变量想到一个不错的中文名儿,但是不知道它英文名儿该怎么称呼的时候(没错,我就是那个英语战五渣),就可以用到它。
咋用
第一步:先注册
目前这个工具使用的是 有道云 提供的 API,因此在使用之前,需要先去 这里 注册下~(有道打钱!!)
注册完成后,可以在控制台中看到对应的 应用ID(appId) 以及 应用密钥(secretKey)
之后,通过 etd -c/--config 配置下即可。
第二步:后使用
使用它也很简单,只要使用 etd -t/--translate 命令即可:
etd -t/--translate
执行命令后,键入你想要翻译的内容(可以是句子):
其他功能
-l/--language
通过该命令可以罗列出目前支持翻译的所有语种:
(太多了,截一部分看看得了,反正除了中日英韩,其他基本用不到...)
-s/--set
默认情况下,翻译是从 中文 翻译成 英文,如果你想翻译其他语种,可以通过该命令进行设置:
etd -s/--set
-r/--rule
如果你忘了当前的翻译规则(把哪种语言翻译成哪种语言),可以通过该命令将规则打印出来:
That's all.
最后再看下 ET-Pictures 这个玩楞。
ET-Pictures
是个啥
这个工具的主要作用是用来做图片压缩的。
当我们在对页面性能进行优化时,图片的大小也是其中的一项重要优化项。通过这个工具,我们可以对指定目录下的图片进行压缩。
咋用
第一步:还是先注册
目前这个工具使用的是 Tiny png 所提供的 API, 大伙儿使用前得去 这儿 申请自己的 API KEY:
之后通过 etp -s/--set 设置下即可。
目前支持的图片格式主要有 WebP, JPEG(JPG), PNG。
第二步:后使用
你可以通过 -c/--compress 命令进行压缩。该命令支持两种压缩模式:压缩在线图片 以及 压缩本地图片:
PS: 免费版每个月有500次的压缩上限,不过日常使用应该是足够的(有钱人请忽略这条提醒...)
压缩在线图片
当选择压缩在线图片时,你需要指定:
- 输出目录(默认为当前执行命令所在目录的上一级目录)
- 所要压缩的图片在线地址
- 输出图片的名称(默认为 new Date().getTime())
压缩本地图片
当选择压缩本地图片时,你需要指定:
- 输出目录(默认为当前执行命令所在目录的上一级目录)
- 压缩模式。本地图片压缩有两种模式:
shallow以及deep。默认是shallow模式,即只压缩指定目录下的图片。而deep模式则会深度遍历子目录(子目录的子目录,子目录的子目录的子目录,子目录的子目录的子目录的子目录....)下的所有图片进行压缩- 需要压缩的图片所在路径,默认为当前路径
- 输出图片的文件夹名称(默认为 new Date().getTime())
遇到的问题
问题表现
在实现完上述功能之后,我遇到了一个问题:由于配置保存在包内的 .env 文件中,在每次更新包时,原先保存在本地的配置会被清空掉。
解决方案
为此我提供了 ET-Config 工具:
Usage: etc [options]
Options:
-v, --version output the version number
-i, --init init ET configuration
-e, --export export ET configuration
-h, --help display help for command
这样用户便可以在更新前通过 etc -e 命令将本地的配置先行导出,在更新完成后,再通过 etc -i 的方式还原配置。
其中,etc -i 提供了两种方式,分别是 通过本地配置文件还原 以及 选择相应配置进行还原:
通过本地配置文件还原 其实就是选择刚才备份的文件直接进行还原,而另一种方式可以让用户在一开始就可以选择性的对有道 API 以及 TinyPng 的 API 进行配置,无需通过 etd -c 以及 etp -c 两种命令进行设置, 省时省力:
思考 && TODO
相较于备份再还原的方式,似乎让用户指定配置文件路径更为方便,这样在下次包更新时便不用备份再还原。因此:
TODO: 后续我会支持自定义备份路径的方式。
用到的一些工具包
commander
上文中所提到的这些命令行工具,在使用时可以通过 -h/--help 查看各工具所支持的命令:
也可以通过 -v/--version 来查看当前版本:
包括上述介绍中所提到的所有命令,均是通过 commander 提供出来的,举个🌰:
const { Command } = require('commander')
const program = new Command()
// 获取版本信息
program.version(version, '-v, --version')
// 设置命令以及对应描述
program
.option('-i, --init', 'init ET configuration')
.option('-e, --export', 'export ET configuration')
// 解析控制台输入参数
program.parse(process.argv)
// 读取对应参数
const { init, export: _export } = program.opts()
诚然,这些功能我们也可以手动实现,但如此便免不了诸多繁琐。既然有造好的轮子,那何不拿来用一用呢?🤪
zx
针对不同类别的控制台打印信息,其实可以设置相应的颜色,这样看起来更加直观,也更加美观。zx 是 Google 开发的一款工具,其中也封装了 chalk ,只要引入了 zx 便可直接使用。通过它可以为控制台输出信息“上色”。举个🌰:
console.log(chalk.red(`Create objet defeat! The error message is: ${error}`))
复制代码
更多的颜色跟使用方式,小伙伴们也可以去研究一下,让控制台输出也多姿多彩起来~
PS: 使用时记得在文件开头标注
#!/usr/bin/env zx哟~
inquirer
在上文的介绍中,小伙伴们可能留意到了 交互式命令行 的使用痕迹。该能力就是 inquirer 所提供的。包括我们在日常使用第三方脚手架工具时也时常能看到它的身影。它的存在让原本枯燥的命令行显得更加生动。日后小伙伴们在开发自己的命令行工具时,不妨来使用下它吧~
dotenv
这个玩楞的作用是可以将你本地 .env 文件中的配置整合到 process.env 中去,这样就不用每次通过读取文件的方式来获取相应的配置。上文中所提到的 ET-Dictionary 以及 ET-Pictures 工具就是通过它来读取本地配置的信息:
const dotenv = require('dotenv')
// dotenv configuration
module.exports.dotenvInit = () => {
const dotenvPath = path.join(__dirname, '../../.env')
dotenv.config({ path: dotenvPath })
}
结语
行文至此,efficient-tools 的功能已介绍完毕(广告就打完了)😝。
有兴趣的小伙伴可以 戳这里 下载安装试用(骗下载)。
觉得工具尚可的小伙伴儿欢迎 ⭐️~(骗star)。
在使用过程中,如果发现问题,或者有更好的想法,欢迎 issue 区留言!(骗创意)