1

我有一个服务器,它可以上传很多图片。上传图像的应用程序基于 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();
}

在添加了几个文件后,我收到了关于 a 的警告possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit,然后它停止工作。

有没有更好的方法来做到这一点,我怎样才能自动运行它?

4

1 回答 1

2

为了处理在变化时递归触发 watch 函数,一种可能的解决方案是:每当你的压缩函数运行时,让它将文件名存储在一个 var 中。在您的更改侦听器功能上,只需添加

If (file !== lastFile) {
   //do something
}

您可以尝试另一个非常相似的模块,称为chokidar

具有与 watch 非常相似的钩子:

watcher.on('add', function(path) { log('File', path, 'has been added'); })
watcher.on('change', function(path) { log('File', path, 'has been changed'); })

此处的示例:监视文件和目录

于 2015-04-29T19:44:15.977 回答