使用Grunt复制任务时展平文件树

时间:2012-11-15 00:47:59

标签: javascript node.js gruntjs

不确定我是否遗漏了一些内容,但我对grunt-contrib-copy任务进行了以下grunt设置。

copy: {
  build: {
    files: {
      "server-dist/": "server/**/*.!(coffee)",
      "client-dist/": "client/**/*.!(coffee)"
    }
  }
}

我希望以递归方式运行文件树的client-dist副本,但是server-dist所有子文件夹都会变平到基本文件夹。任何想法为什么会这样?这是i / o

server/
  views/
    errors/
      404.jade
    layouts/
      base.jade

变为

server/
  errors/
  layouts/
    base.jade

views文件夹完全被炸毁了。还有一件事......当我移除时!(咖啡)它有效但我需要排除咖啡文件,因为我有一个咕噜咕噜咖啡监视任务正在运行。

2 个答案:

答案 0 :(得分:9)

扎克斯的后续评论:

copy: {  
    mytask: {  
        files: [  
        {expand:true, cwd:'dev-js/abc/', dest:'js/test/', src:['def.js']}  
        ]  
    }  
}  

这会将文件./dev-js/abc/def.js复制到./js/test/def.js - 至少在我的0.4.1版本上。 Zacks发表评论并且包含的​​链接非常有用,特别是事实上,basePath已被替换。

答案 1 :(得分:2)

显然grunt-contrib-copy任务有一个复杂的逻辑,试图自动检测复制源文件的基本目录(参见related issue

解决方案是明确指定basePath选项:

copy: {
  build: {
    files: {
      "server-dist/": "server/**/*!(.coffee)"
    },
    options: {
      basePath: 'server' // base directory in the source path
    }
  }
}

P.S。但是,我不确定为什么删除!(.coffee)会改变您的行为。我在本地计算机上尝试了相同的操作,并在指定"server/**/*"而不是"server/**/*.!(coffee)"时获得相同的结果(即跳过views文件夹)