【问题标题】:Corrupted copy using grunt-contrib-copy使用 grunt-contrib-copy 损坏的副本
【发布时间】:2015-02-19 17:19:04
【问题描述】:

将大量文件(图像、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 不是正确的编码。

您建议如何解决此问题?

【问题讨论】:

  • 你想做什么?排除具有这些扩展名的文件?这有意义吗:github.com/gruntjs/grunt-contrib-copy/issues/…?
  • 由于文件在复制后损坏,我在选项中添加了 noProcess 以跳过对这些文件的处理。所以我希望文件将被成功复制而不会被修改。这是一个正确的方法吗?为什么复制后文件仍然损坏?

标签: gruntjs grunt-contrib-copy


【解决方案1】:

如果你有处理函数

选项名称为processContentExclude,除非您使用的是0.5.0 或更高版本,根据https://github.com/gruntjs/grunt-contrib-copy#release-history 更改为noProcess

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

npm ls grunt-contrib-copy

来自grunt-vtex 的大副本配置示例:

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

如果你没有进程功能

如果您没有进程功能,noProcess 将无济于事。

如果是这样,您应该查看encoding 选项。 https://github.com/gruntjs/grunt-contrib-copy#encoding

也许试试encoding: null,这里建议:https://github.com/gruntjs/grunt-contrib-copy/issues/64

不管怎样

尝试以最小的方式重现您的问题 - 创建一个只有一个任务的 Gruntfile,只复制一个图像。这不是一个常见的问题,也许其他一些任务是这里的罪魁祸首。

【讨论】:

    猜你喜欢
    • 2017-12-21
    • 1970-01-01
    • 2018-02-13
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多