Javascript 监视服务器上的文件夹以获取要压缩的新图像
我有一个服务器,它得到了很多图像上传。上传图片的应用程序是基于PHP的。但是,我想使用Node查看上载文件夹,然后在任何新图像上运行imagemin 我想我会使用npm包“watch”和“imagemin”。我不知道如何准确地配置它们,或者如何让它一直运行 到目前为止,我可以手动打开以下功能:Javascript 监视服务器上的文件夹以获取要压缩的新图像,javascript,node.js,watch,imagemin,Javascript,Node.js,Watch,Imagemin,我有一个服务器,它得到了很多图像上传。上传图片的应用程序是基于PHP的。但是,我想使用Node查看上载文件夹,然后在任何新图像上运行imagemin 我想我会使用npm包“watch”和“imagemin”。我不知道如何准确地配置它们,或者如何让它一直运行 到目前为止,我可以手动打开以下功能: var Imagemin = require('imagemin'); var watch = require('watch'); var imagemin = new Imagemin() .use
var Imagemin = require('imagemin');
var watch = require('watch');
var imagemin = new Imagemin()
.use(Imagemin.pngquant());
watch.createMonitor('images', function (monitor) {
monitor.files['images/*.png']
monitor.on("created", function (file) {
compressImage(file);
})
monitor.on("changed", function (file) {
compressImage(file);
});
});
function compressImage(file) {
var dest, path;
path = f.split('/');
path.pop();
dest = path.join('/');
imagemin.src(file).dest(dest).run();
}
添加了两个文件后,尽管我收到了一条关于检测到可能的EventEmitter内存泄漏的警告。增加了11名听众。使用emitter.setMaxListeners()增加限制
,然后它停止工作
是否有更好的方法来执行此操作,以及如何自动运行它?要处理在更改时递归触发watch函数,一个可能的解决方案是: 每当压缩函数运行时,让它将文件名存储在变量中。在更改侦听器函数上,只需添加
If (file !== lastFile) {
//do something
}
还有另一个模块非常类似,您可以尝试,称为
具有与手表非常相似的挂钩:
watcher.on('add', function(path) { log('File', path, 'has been added'); })
watcher.on('change', function(path) { log('File', path, 'has been changed'); })
这里的示例:我认为问题在于,当它覆盖图像时,它会看到图像已更改,并尝试再次压缩。我不确定如何在不将文件移动到其他位置的情况下完成此操作。您还可以添加第二层验证,以检查最后的文件名和时间戳。这样,如果同一个文件再次上传,它将再次被压缩,只要它不是在最后10秒或其他时间。我修改了上传到旧文件的内容,并将其删除,而不是覆盖,这意味着我只需要添加事件。我相信我现在已经有了脚本,只需要在服务器启动时运行它。