自从节点。js出现,它的好基友npm(节点包管理器)也是我们日常开发中必不可少的东西.npm让js实现了模块化,使得复用其他人写好的模块(搬砖)变得更加方便,也让我们可以分享一些自己的作品给大家使用(造轮子),今天这里我就给大家分享一个用命令行压缩图片的工具,它的用法大致是这样的:
//全局安装后,在图片目录下,运行这行 美元tinyhere
这样就把文件夹内的图片进行压缩。这里压缩采用的是tinypng提供的接口,压缩率大致上是50%,基本可以压一半的大小。以前在写项目的时候,测试验收完成后总是要自己手动去压一次图片,后来想把这个枯燥重复的事自动化去完成(懒),但是公司脚手架又没有集成这个东西,就想自己写一个轮子做出来用用就好了。它的名字叫做<代码> tinyhere> 代码,大家可以去安装使用试一下
美元npm我tinyhere - g
如果要写一个模块发布到npm,那么首先要了解一下npm的用法。
给这个模块建一个文件夹,然后在目录内运行<代码> npm init 代码>来初始化它的package.json,就是这个包的描述
//个人比较喜欢后面带——是的,它会生成一个带默认参数的package.json 美元npm init(——是的)
package.json详情:
{ “名称”:“pkgname”,//包名,默认文件夹的名字 “版本”:“1.0.0”, “描述”:“我的方案”, “主要”:“指数。js ",//如果只是用来全局安装的话,可以不写 “本”:“cli”//如果是命令行使用的话,必须要这个,名字就是命令名 "脚本":{ “测试”:“echo \”的错误:没有测试指定\”,,退出1”//npm运行测试对应的测试 }, “关键词”:[“cli”、“图像”、“压缩”), “作者”:“croc-wend”, “许可证”:“麻省理工学院”, … }
更多配置信息可以参考一下vue的package.json的https://github.com/vuejs/vue/blob/dev/package.json
初始化完成之后,你就可以着手写这个包了,当你觉得你写好了之后,就可以发布到npm上面
npm登录 npm发布 + pkgname@1.0.0//成功
这时,你在npm上面搜你的包名,你写在包中。json的信息都会被解析,然后你的包的页面介绍内容就是你的README.md
包初始化好了之后,我们就可以开始写这个包了
对于这个压缩工具来说,要用到的素材只有两个,tinypng接口要用到的api密匙,需要压缩的图片,所以我对这两个素材需要用到的一些操作进行了以下分析:
我的初衷是想把这个命令写的尽量简单,让我可以联想到压缩图片=简单,所以我待定了整个包只有一个单词就能跑,是这样:
美元tinyhere
其他的操作都放在子命令和可选项上。
然后开始划分项目结构
大致上是这样,把全局命令执行的<代码> tinyhere> 代码放在本目录下,然后子命令负责提供操作函数,然后把可复用的函数(比如读写操作)抽离出来放在实效上,比较复杂的功能单独抽离成一个文件,比如压缩,然后导出一个函数给子命令。至于存放用户的api密匙,就存放在数据下面里的关键。
tinyhere的执行文件就负责解析用户的输入,然后执行子命令给出的对应函数。
压缩图片的这个包的过程是这样的:
1,解析当前目录内的所有图片文件,这里应该根据二进制流及文件头获取文件类型mime类型,然后读取文件二进制的头信息,获取其真实的文件类型,来判断它是否真的是图片文件,而不是那些仅仅是后缀名改成png的假货
2,如果用户有要求把压缩的图片存放到指定目录,那就需要生成一个文件夹来存放它们。那么,首先要判断这个路径是否合法,然后再去生成这个目录
3,判断用户的api密匙的剩余次数是否足够这次的图片压缩,如果这个关键不够,就换到下一个键,知道遍历文件内所有的关键找到有可用的关键为止。