将dest文件夹调整为** globbing模式

时间:2017-04-20 08:31:03

标签: gruntjs grunt-contrib-copy

我正在使用grunt-contrib-copy。我有这个文件树:

`-- src
    `-- model
        |-- a4
        |   `-- public
        |       |-- css
        |       |-- img
        |       `-- js
        |-- posters
        |   `-- public
        |       |-- css
        |       |-- img
        |       `-- js
        `-- prints
            `-- public
                |-- css
                |-- img
                `-- js

我想复制文件 src/model/**/public/imgdist/images/{1}/其中{1}是文件夹名称(a4,海报,打印...也必须更改的动态文件夹),所以:

src/model/a4/public/img/file.png -> dist/images/a4/file.png

有没有办法用grunt-contrib-copy(可能是重命名函数?)指定它,还是我必须手动迭代文件?

现在这就是我所拥有的:

grunt.registerTask 'images-generate', ->
gruntCopyFiles.images = {
  expand: true,
  cwd: './src/model/',
  src: ["**/public/img/*.png", "**/public/img/*.jpg"],
  dest: "./dist/images/"
}

但是这会将src/model/a4/public/img/file.png复制到dist/images/a4/public/img/file.png,这不是我想要的。

有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:1)

  

有没有办法用grunt-contrib-copy(可能是重命名函数?)指定它,还是我必须手动迭代文件?

利用rename函数是实现此目的的方法。单独的Glob模式不能满足您的要求,flatten选项也不能满足您的要求。

以下内容还会复制 可能 可能位于源img文件夹中的所有子文件夹:

gruntCopyFiles.images = {
    expand: true,
    cwd: 'src/model',
    dest: 'dist/images',
    src: '**/public/img/**/*.{png,jpg,gif}',
    rename: function(dest, src) {
        var items = src.split('/'),
            baseIndex = items.indexOf('img') + 1,
            subPath = items.slice(baseIndex, items.length).join('/');

        return [dest, items[0], subPath].join('/');
    }
}

示例:

src/model/a4/public/img/file.png - > dist/images/a4/file.png

src/model/a4/public/img/ quux /file.jpg - > dist/images/a4/ quux /file.jpg

答案 1 :(得分:0)

您似乎可以使用flatten来获取精简的目标路径:

gruntCopyFiles.images = {
  flatten: true,
  expand: true,
  cwd: './src/model/',
  src: ["**/public/img/*.png", "**/public/img/*.jpg"],
  dest: "./dist/images/"
}

来自the docs

  
      
  • flatten从生成的目标路径中删除所有路径部分。
  •