使用grunt复制文件会生成所有父目录

时间:2013-12-30 00:09:54

标签: gruntjs

使用以下任务复制某些文件时

    copy: {
        tmp: {
            src: 'lib/public/**',
            dest: 'tmp/'
        }
    }

这是我的来源

|_lib
    |_public
            |_ dir1
            |_ dir2
            |_ index.html

复制方法的目录结构如下所示

|_tmp
     |_lib
          |_public
                  |_ dir1
                  |_ dir2
                  |_ index.html

如果目录看起来更像是

,我更喜欢
|_tmp
     |_ dir1
     |_ dir2
     |_ index.html

换句话说,我希望将lib/public中的所有内容复制到tmp是否还有其他选项需要启用?

2 个答案:

答案 0 :(得分:6)

更新:复制没有根源目录的内容(文件夹和文件),您可以使用cwd选项。看起来你已根据自己的意见发现了这一点。

copy: {
  tmp: {
    expand: true,
    cwd: 'lib/public',
    src: '**',
    dest: 'tmp/'
  }
}

<小时/> 您可以使用flattenfilter属性来实现此目的。由于您需要没有父目录的文件,因此您需要指定'isFile'过滤器。要使用flatten,您需要启用expand选项。该文档涵盖"Building the files object dynamically"部分下的此选项和其他选项。

您的配置应类似于以下内容:

copy: {
  tmp: {
    expand: true,
    flatten: true,
    src: 'lib/public/**',
    dest: 'tmp/',
    filter: 'isFile'
  }
}

请注意,将覆盖共享相同名称的文件(较深的嵌套文件将覆盖树中较高的文件)。

答案 1 :(得分:0)

您需要flatten选项。您可以阅读我对this other question的回答(不完全相同),但这很简单:

copy: {
    tmp: {
        src: 'lib/public/**',
        dest: 'tmp/',
        flatten: true,
        expand: true
    }
}