Gruntjs 使用grunt contrib copy的损坏副本

Gruntjs 使用grunt contrib copy的损坏副本,gruntjs,grunt-contrib-copy,Gruntjs,Grunt Contrib Copy,我在将大量文件(图像、pdf等)从一个目录复制到另一个目录时遇到问题。在目标文件夹中,所有这些文件都已损坏。 我尝试使用noProcess和processContentExclude选项,但没有结果 我的复制任务配置如下所示: copy: { assets_images: { options: { noProcess: ['**/*.{png,gif,jpg,ico,pdf}'] }, expand: true, cwd: 'static/imag

我在将大量文件(图像、pdf等)从一个目录复制到另一个目录时遇到问题。在目标文件夹中,所有这些文件都已损坏。 我尝试使用noProcess和processContentExclude选项,但没有结果

我的复制任务配置如下所示:

copy: {
  assets_images: {
    options: {
      noProcess: ['**/*.{png,gif,jpg,ico,pdf}']
    },
    expand: true,
    cwd: 'static/images/',
    src: '**',
    dest: 'dist/assets/images/'
  },
  assets_data: {
    options: {
      noProcess: ['**/*.{png,gif,jpg,ico,pdf}']
    },
    expand: true,
    cwd: 'static/data/',
    src: '**',
    dest: 'dist/assets/data/'
  }
}
你能帮我做这个吗

更新:

我做了一些调查,发现源文件夹和目标文件夹中png文件的二进制代码不同

我怀疑复制任务进程文件使用了错误的编码(默认为utf8)。据我所知,它将它们作为二进制文件处理,在这种情况下,utf8不是正确的编码

如果您有流程功能,您建议如何解决此问题?

选项名称为
processContentExclude
,除非您使用的是
0.5.0
或更高版本,其中根据

您可以通过以下方式检查您的版本:

npm ls grunt-contrib-copy
大型副本配置示例来自:

复制:
主要内容:
档案:[
扩展:正确
cwd:'src/'
src:['**'].concat(options.copyIgnore)
dest:“构建/”
]
部署:
档案:[
扩展:正确
cwd:“构建/”
src:['**']
dest:“#{pkg.deploy}/#{pkg.version}”
]
选项:
processContentExclude:['**.{png、gif、jpg、ico、psd、ttf、otf、woff、svg}']
进程:(src,srcpath)->
replaceFiles=grunt.config('deployReplaceFiles')?grunt.config('deployReplaceFiles',glob.sync(options.replaceGlob))
当file.indexOf(srcpath)>=0时,用于替换文件中的文件
记录“替换文件…”,文件
对于选项的k,v.replaceMap
记录“替换键”,k,“带值”,v
src=src.replace(新的RegExp(k,'g'),v)
返回src
如果您没有流程功能
noProcess
如果您没有流程功能,则不会有任何帮助

如果是这样,您应该查看
编码
选项

可以尝试
编码:null
,如下所示:

无论如何
尝试以最小的方式重现您的问题-创建一个仅包含一个任务的GrunFile,只复制一个图像。这不是常见的问题,可能是其他任务造成的。

您想做什么?是否排除具有这些扩展名的文件?这有什么意义吗:?由于复制后文件已损坏,我在选项中添加了noProcess以跳过对这些文件的处理。因此,我希望文件将成功地复制而不进行修改,不会被破坏。这是正确的方法吗?为什么文件在复制后仍然损坏?
copy:
      main:
        files: [
          expand: true
          cwd: 'src/'
          src: ['**'].concat(options.copyIgnore)
          dest: "build/<%= relativePath %>/"
        ]
      deploy:
        files: [
          expand: true
          cwd: "build/<%= relativePath %>/"
          src: ['**']
          dest: "#{pkg.deploy}/#{pkg.version}"
        ]
        options:
          processContentExclude: ['**/*.{png,gif,jpg,ico,psd,ttf,otf,woff,svg}']
          process: (src, srcpath) ->
            replaceFiles = grunt.config('deployReplaceFiles') ? grunt.config('deployReplaceFiles', glob.sync(options.replaceGlob))
            for file in replaceFiles when file.indexOf(srcpath) >= 0
              log "Replacing file...", file
              for k, v of options.replaceMap
                log "Replacing key", k, "with value", v
                src = src.replace(new RegExp(k, 'g'), v)
            return src