Grunt imagemin - 如何监视多个文件/文件夹并优化单个文件?

5

能否使用grunt-contrib-imagemin和grunt-contrib-watch观看多个文件/文件夹,但仅优化单个文件?

我尝试过这样做:(gruntfile的一部分)

imagemin: {
  dist: {
    cwd: 'images/modules',
    files: ['images/modules/**/*.{png,jpg,gif}'],
    dest: 'images/modules'
  }
},

watch: {
   images: {
      files: ['images/modules/**/*.{png,jpg,gif}'],
      tasks: ['imagemin'],
      options: {
      spawn: false,
      }
    }
}

grunt.event.on('watch', function(action, filepath, target) {
  if (grunt.file.isMatch(grunt.config('watch.images.files'), filepath)) {
      grunt.config('imagemin.dist.src', [filepath]);
   }
});

但它不起作用。它返回:
Running "imagemin:dist" (imagemin) task
Verifying property imagemin.dist exists in config...OK
Files: [no src] -> images/modules
Options: optimizationLevel=7, progressive, pngquant=false
Options: optimizationLevel=7, progressive, pngquant=false
Warning: path must be a string

有什么想法吗?谢谢。
1个回答

7

根据grunt-contrib-imagemin的文档,file属性接受一个src/dest(键/值)对的对象。

files: {                         // Dictionary of files
    'dist/img.png': 'src/img.png', // 'destination': 'source'
    'dist/img.jpg': 'src/img.jpg',
    'dist/img.gif': 'src/img.gif'
  }

我相信这就是你遇到错误的原因。
要实现你想要的东西,至少我认为你想要的,我会在 imagemin 中添加另一个子任务,代码如下。
imagemin: {
  dist: {
    files: [{
    expand: true,                              // Enable dynamic expansion
    cwd: 'images/modules',                     // Src matches are relative to this path
    src: ['images/modules/**/*.{png,jpg,gif}'],// Actual patterns to match
    dest:'images/modules'                      // Destination path prefix
    }]
  },
  single: {
    cwd: 'images/modules',
    files: 'images/modules/img.png': 'images/modules/img.png', 
    dest: 'images/modules'
  }

},
watch: {
    images: {
      files: ['images/modules/**/*.{png,jpg,gif}'],
      tasks: ['imagemin:single'],
      options: {
      spawn: false,
      }
    }
}

因此,上述的watch命令将监视与文件正则表达式匹配的所有文件,并执行watch主任务的单个子任务。

再次,我认为这就是您想要做的,但如果不是,请您解释得更详细一些吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接