使用Grunt Copy将图像复制到新目录

时间:2013-10-16 20:52:18

标签: gruntjs

我正在使用Grunt 0.4.1和Grunt-contrib-copy版本0.4.1。我正在尝试将图像从src目录复制到分发目录,但它正在复制完整的src目录而不是仅复制images目录的内容。换句话说,这是创建 dist / images / src / images /...,而我希望结果只是 dist / images /...

这是我的复制任务:

copy: {
  images: {
    files: {
      'dist/images/': 'src/images/**/*'
    }
  }
}

它的运行方式如下:

// Default task.
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.registerTask('default', ['less', 'concat', 'uglify', 'cssmin', 'copy']);

如何才能将 src / images 的子目录复制到 dist / images

这些文件已经过压缩,只需要在构建期间复制到目标位置。

2 个答案:

答案 0 :(得分:18)

实际修复我的问题是指定我使用“cwd”指令复制的根目录结构,然后是与上面完全相同的src。刚回来发布这个,看到了基本上我想出的相同解决方案。这对我有用:

copy: {
  images: {
    files: [
      { 
        expand: true,
        cwd: 'src/images/', 
        src: ['**/*.{png,jpg,svg}'], 
        dest:'dist/images/' 
      }
    ]
  }
}

“cwd”属性允许您定义要从中复制的源的根。这不会包含在复制文件的路径中。所以在我的情况下,通过将“cwd”定义为“src / images”,我可以将源定义为“** / *。{png,jpg,svg}”这将找到源图像中的所有子目录目录,只复制具有我提供的扩展名的文件。这给了我想要的结果:dist / images / ...包含所有子目录。

不使用“cwd”,grunt-contrib-copy将整个源树结构复制到目标中。 “cwd”属性允许您从一个文件结构中挑选子目录和文件,并将它们复制到另一个文件结构中。

答案 1 :(得分:4)

您需要指定flatten选项,该选项会删除目录树。

copy: {
    images: {
        expand:     true,
        cwd:        'src/images/',
        src:        ['**/*'],
        dest:       'dist/images/',
        filter:     'isFile',
        flatten:    true
    }
}