Grunt复制任务中的Flatten选项未按预期工作

14

我有一个如下所示的目录结构:

source/
    libraries/
        d3.js
        lodash.js
        //etc

我已经按照以下方式设置了grunt-copy:

copy: {
  main: {
    files: [
      {
        src: ["source/libraries/*.js"], 
        dest: "build/", 
        flatten: true
      }

我希望它能将输出压缩到“build”中,这样我就会有

build/
    d3.js
    //etc

相反,我的得到的是在build文件夹中重复了原始目录结构:

build/
    source/
        libraries/
            d3.js
            //etc

怎么回事?我没有正确使用flatten吗?

1个回答

21

如果你只是想把 source/libraries 中的所有内容都放在 build 中,那么我建议实际上使用 cwd(当前工作目录)选项。另一方面,如果你的确在 source/libraries 中有子文件夹,那么你可能希望将那行 src 改为 source/libraries/**/*.js

无论如何,如果可以使用 cwd,则代码应该如下所示:

copy: {
  main: {
    files: [
      {
        src: ["*.js"],
        dest: "build/",
        cwd: "source/libraries/"
      }
    ]
  }

对于另一种情况,也许是这样的吗?(注意设置了expand选项为true

copy: {
  main: {
    files: [
      {
        src: ["source/libraries/**/*.js"],
        dest: "build/",
        flatten: true,
        expand: true
      }
    ]
  }
}

使用cwd确实解决了我的问题。然而,根据grunt文档,看起来flatten也应该可以工作:“'flatten从生成的目标路径中删除所有路径部分。'”你知道为什么它不起作用吗? - dandelion
4
你尝试添加expand选项了吗?每次我看到flatten时,都会看到它与expand一起出现。 - Jordan Kasper
4
嘿...只需阅读文档...就在你提到的那行上面,有这样一句话:"expand设置为true以启用以下选项:"(flatten是其中一个"以下选项")。;) - Jordan Kasper

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