javascript - 监视服务器上的文件夹以查找要压缩的新图像

标签 javascript node.js watch imagemin

我有一个服务器,它上传了很多图片。上传图像的应用程序基于 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() 增加限制 然后它停止工作。

是否有更好的方法来执行此操作以及如何自动运行它?

最佳答案

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

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

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

与 watch 有非常相似的钩子(Hook):

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

此处示例:Watch Files and Directories

关于javascript - 监视服务器上的文件夹以查找要压缩的新图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29951516/

相关文章:

javascript - JS、正则表达式、奇怪的行为

javascript - 学习 Titanium Appcelerator 会提高我对 NodeJS 的理解吗?

angularjs - 注册和取消注册 Angular JS Watch

javascript - Angular DTOptionsBuilder ajax 调用完成时是否有回调?

javascript - Ramda.map over Immutable.List 如何返回列表而不是数组?

javascript - Meteor 如何将变量传递给助手

android - 如何验证android帐单收据服务器端

javascript - 如何将base64数据保存为png图像到服务器?

swift - 如果没有 iphone 的默认 watch 应用程序或苹果 watch 本身,是否可以为苹果 watch 生成 .watchface?

angularjs - AngularJS $ watch改变元素的宽度