我有一个服务器,它上传了很多图片。上传图像的应用程序基于 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'); })
关于javascript - 监视服务器上的文件夹以查找要压缩的新图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29951516/