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

Javascript 使用Grunt复制任务时的文件树展平,javascript,node.js,gruntjs,Javascript,Node.js,Gruntjs,不确定是否遗漏了某些内容,但我为grunt contrib复制任务设置了以下grunt设置 copy: { build: { files: { "server-dist/": "server/**/*.!(coffee)", "client-dist/": "client/**/*.!(coffee)" } } } 客户端dist按我所期望的那样通过文件树递归地进行复制,但服务器dist的所有子文件夹都被展平到基本文件夹。知道为什么会这样吗?这是

不确定是否遗漏了某些内容,但我为grunt contrib复制任务设置了以下grunt设置

copy: {
  build: {
    files: {
      "server-dist/": "server/**/*.!(coffee)",
      "client-dist/": "client/**/*.!(coffee)"
    }
  }
}
客户端dist按我所期望的那样通过文件树递归地进行复制,但服务器dist的所有子文件夹都被展平到基本文件夹。知道为什么会这样吗?这是i/o

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

server/
  errors/
  layouts/
    base.jade

“视图”文件夹完全被炸开。还有一件事…当我搬走的时候!(coffee)它可以工作,但我需要排除coffee文件,因为我正在运行grunt coffee watch任务。

显然,
grunt contrib copy
任务具有复杂的逻辑,它试图自动检测复制源文件的基本目录(请参阅)

解决方案是显式指定选项:


p.S.我不确定为什么要删除
!(.咖啡)
为您改变行为。我在本地计算机上尝试了相同的方法,并在指定
“server/****”
而不是
“server/****!(coffee)
(即跳过
视图
文件夹)时得到了相同的结果zacks评论的后续内容:

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
已被替换。

太棒了!这是可行的,但还有一件事……在我的示例中,有两个基本路径服务器+客户端。我不希望有两个单独的复制任务buildServer+buildClient…如果有必要,我会这样做,但还有其他方法吗。谢谢。很抱歉,我看不出在当前任务的实施中有什么方法可以做到这一点。你可能想就我在回答中链接的问题与贡献者交谈……顺便说一句:
basePath
在v0.4.0rc5中更改为
cwd
,请参阅:我没想到复制文件会花几个小时才能弄清楚,但哦,这至少帮了我一把。对我来说很有用!最后!!!非常非常感谢你!!!我找了好几个月了!
copy: {  
    mytask: {  
        files: [  
        {expand:true, cwd:'dev-js/abc/', dest:'js/test/', src:['def.js']}  
        ]  
    }  
}