不确定我是否遗漏了一些内容,但我对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文件夹完全被炸毁了。还有一件事......当我移除时!(咖啡)它有效但我需要排除咖啡文件,因为我有一个咕噜咕噜咖啡监视任务正在运行。
答案 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
文件夹)