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

Gruntjs 使用grunt复制文件会生成所有父目录,gruntjs,Gruntjs,当我使用以下任务复制一些文件时 copy: { tmp: { src: 'lib/public/**', dest: 'tmp/' } } 这是我的消息来源 |_lib |_public |_ dir1 |_ dir2 |_ index.html copy方法中的目录结构如下所示 |_tmp |_lib

当我使用以下任务复制一些文件时

    copy: {
        tmp: {
            src: 'lib/public/**',
            dest: 'tmp/'
        }
    }
这是我的消息来源

|_lib
    |_public
            |_ dir1
            |_ dir2
            |_ index.html
copy方法中的目录结构如下所示

|_tmp
     |_lib
          |_public
                  |_ dir1
                  |_ dir2
                  |_ index.html
我希望目录看起来更像这样

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

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

您将需要
展平
选项。您可以阅读我的答案(不完全是副本),但它相当简单:

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

更新:要在不使用根源目录的情况下复制内容(文件夹和文件),可以使用
cwd
选项。看起来你是根据你的评论发现的

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

您可以使用
展平
过滤器
属性来实现这一点。由于您希望文件没有父目录,因此需要指定
'isFile'
过滤器。要使用
展平
,您需要启用
展开
选项。本文件涵盖本节中的此选项和其他选项

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

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

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

我对示例进行了编辑,以使其更加具体。你举的例子几乎是我所需要的,但不完全是。如果你有时间,也许你可以提供一个替代答案?实际上,你发布的链接帮助我发现我真正需要做的是这个tmp:{expand:true,cwd:'lib/public',src:'**',dest:'tmp/'}@EdgarMartinez updated。看起来你已经找到解决方案了!我对我的示例进行了编辑,使其更加具体。你举的例子几乎是我所需要的,但不完全是。如果你有时间,也许你可以提供一个替代答案?我真正想避免的是复制父文件夹以及其中的内容,包括Directoriesaaah。。。我懂了。嗯,我认为@ahmad mageed的答案在更新后相当全面。很高兴你明白了。