Grunt递归复制

9
我正在设置一个 Grunt 脚本,需要将图像目录从 A 复制并重新组织到 B。很简单。
目录结构:
components
- componentA - js - img - imgfolderA - imgfolderB - css - componentB - js - img - imgfolderA
每个 img 目录可能包含其他目录和这些目录中的目录,以帮助组织图像。
我想使用 Grunt 将所有这些图像放在一个目录下 (assets/img):
assets
- img - dirA - imgfolderA - imgfolderB - dirB - imgfolderA
有没有什么办法可以在 grunt 中实现这个目标而不指定每个组件目录(它需要完全自动化)?
2个回答

22

我知道已经有点晚了,但这应该能胜任,使用“grunt-contrib-copy”就像这样

module.exports = function (grunt) {
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    copy: {
      production: {
        files: [{
            expand: true,
            cwd: "componentA/img/imgfolderA/",
            src: ["*.*", "**/*.*"],
            dest: "./assets/img/dirA/",
          },
          {
            expand: true,
            cwd: "componentB/img/imgfolderB/",
            src: ["*.*", "**/*.*"],
            dest: "./assets/img/dirB/",
          },
        ]
      }
    }
  });

  // Production Build Tools
  grunt.loadNpmTasks('grunt-contrib-copy');

  // Default Production Build task(s).
  grunt.registerTask('default', ['copy']);
};

PS魔法在文件对象中,它们的文档不是很完善,但文档在这里,阅读一两遍后就会明白了!

grunt-contrib-copy设置:https://github.com/gruntjs/grunt-contrib-copy(底部的自述文件)

文件对象设置:http://gruntjs.com/configuring-tasks#globbing-patterns

任务设置:http://gruntjs.com/configuring-tasks


3
对我来说,使用 src: ['*', '**'] 就足够了。 - Aram Kocharyan
@AramKocharyan 单个星号 '*' 代表当前目录还是当前目录中的所有文件?双个星号 '**' 代表所有目录/文件以及递归性质吗? - Shivek Parmar

1
这可以使用 grunt.file.expand 来实现,非常简单。
只需传递匹配的 glob 模式(例如 **/img/**),然后在返回的匹配文件值上进行递归复制即可。

哦,有趣,谢谢。我不能确定这是否解决了我的问题,因为我不知道如何使用API。我会尝试学习并查看它是否有效! - richwil
如果你正在寻找一个grunt任务,那么请查看grunt-contrib-copy。你应该能够应用我在这里解释的相同逻辑。https://github.com/gruntjs/grunt-contrib-copy - Simon Boudrias
好的,到目前为止我有这个:http://pastie.org/8372295。目前它还没有起作用(实际上没有复制文件)。问题的一半是我不理解如何与grunt.file.copy交互,另一半问题是我认为我没有正确使用grunt.file.expand。然而,这是否是您想象中解决这个问题的方式? - richwil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接