【问题标题】:Flattening of File Tree when using Grunt Copy Task使用 Grunt Copy 任务时文件树的展平
【发布时间】:2012-11-03 14:32:43
【问题描述】:

不确定我是否遗漏了什么,但我为 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 文件夹被彻底炸毁。还有一件事......当我删除 !(coffee) 时它可以工作,但我需要排除咖啡文件,因为我有一个 grunt-coffee watch 任务正在运行。

【问题讨论】:

    标签: javascript node.js gruntjs


    【解决方案1】:

    显然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 文件夹)

    【讨论】:

    • 太棒了!这可行,但还有一件事……在我的示例中,有两个 basePaths 服务器 + 客户端。我宁愿没有两个单独的复制任务 buildServer + buildClient ...如果必须,我会这样做,但还有其他方法。谢谢。
    • 抱歉,我看不到您可以通过当前的任务实现来做到这一点。您可能想与我在回答中链接的问题中的贡献者交谈...
    • 顺便说一句:basePath 在 v0.4.0rc5 中更改为 cwd,请参阅:github.com/gruntjs/grunt-contrib-copy/#release-history
    【解决方案2】:

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

    【讨论】:

    • 我没想到复制文件需要几个小时才能弄清楚,但是哦,这至少帮助了我。
    • 为我工作!最后!!!非常非常非常感谢你!!!我搜索了几个月!
    猜你喜欢
    • 2018-02-13
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多