11

我正在使用 Grunt 0.4.1 和 Grunt-contrib-copy 版本 0.4.1。我正在尝试将图像从 src 目录复制到分发目录,但它复制的是完整的 src 目录,而不仅仅是图像目录的内容。换句话说,这是创建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中?

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

4

2 回答 2

19

真正解决我的问题的是指定我使用“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”属性允许您从一个文件结构中挑选子目录和文件并将它们复制到另一个文件结构中。

于 2013-10-18T00:15:52.093 回答
4

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

copy: {
    images: {
        expand:     true,
        cwd:        'src/images/',
        src:        ['**/*'],
        dest:       'dist/images/',
        filter:     'isFile',
        flatten:    true
    }
}
于 2013-10-16T22:17:17.007 回答