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

Rob*_*ggs 11 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/**/*'
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

它的运行方式如下:

// 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']);
Run Code Online (Sandbox Code Playgroud)

如何获取它以便只将src/images的子目录复制到dist/images中

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

Rob*_*ggs 19

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

copy: {
  images: {
    files: [
      { 
        expand: true,
        cwd: 'src/images/', 
        src: ['**/*.{png,jpg,svg}'], 
        dest:'dist/images/' 
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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


Ben*_*Ben 4

您需要指定flatten删除目录树的选项。

copy: {
    images: {
        expand:     true,
        cwd:        'src/images/',
        src:        ['**/*'],
        dest:       'dist/images/',
        filter:     'isFile',
        flatten:    true
    }
}
Run Code Online (Sandbox Code Playgroud)