Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 监视服务器上的文件夹以获取要压缩的新图像_Javascript_Node.js_Watch_Imagemin - Fatal编程技术网

Javascript 监视服务器上的文件夹以获取要压缩的新图像

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

我有一个服务器,它得到了很多图像上传。上传图片的应用程序是基于PHP的。但是,我想使用Node查看上载文件夹,然后在任何新图像上运行imagemin

我想我会使用npm包“watch”和“imagemin”。我不知道如何准确地配置它们,或者如何让它一直运行

到目前为止,我可以手动打开以下功能:

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秒或其他时间。我修改了上传到旧文件的内容,并将其删除,而不是覆盖,这意味着我只需要添加事件。我相信我现在已经有了脚本,只需要在服务器启动时运行它。