打开 ResizeImageCommand 这个命令对应的处理器,在文件顶部先导入一个 fs,来自 fs,再导入一个 path ,来自 path。
然后在处理器的 execute 方法里面,先准备一些需要的数据,解构一下命令参数,需要 filepath,filename,sizes 还有 destination ,来自 command.params。
destination 是要存储缩放文件用的地方,下面我们可以检查一下这个地方是否存在,判断一下 !fs.existsSync,把 destination 交给这个方法,如果这个目录不存在,可以创建它,用一下 fs.mkdirSync 创建一个目录,把 destination 交给它,一个选项参数,把 recursive 设置成 true。
准备好存储目录以后,声明一个 image,用一下 sharp ,把 filepath 交给它。 下面再声明一个 metadata,等于 await,用一下 image.metadata() 这个方法获取到图像文件里的一些元数据,它里面有图像的宽度、高度这些东西。
然后再定义一个缩放图像用的方法,名字是 resize,支持一个 size 参数,类型是 ResizeImageSize,在这个函数里面,先判断一下,如果 metadata.width 小于 size.width ,或者 metadata.height 小于 size.height,满足任何一个条件,就直接 return。这里就是检查一下要缩放的文件的宽度还有高度,是不是大于要缩放的尺寸,如果不是就直接 return 。
下面声明一个 resizedImagePath ,它的值用一下 path.join,先提供一个 destination,然后再用一个字符模板,里面先是 filename ,小横线,再加上 size.suffix 的值。
最后设置一下这个函数返回的东西,用一下 image.resize 这个方法,缩放以后的宽度是 size.width,缩放以后的高度是 size.height,提供一个选项参数,把 fit 设置成 size.fit 。
在这个 resize 方法的外面,让这个命令 return 的东西,可以用一下 Promise.all ,用一下 sizes.map,提供一个 resize 。