Grunt任务可以导航" up"从他们运行的文件夹?

时间:2015-07-17 19:46:57

标签: gruntjs grunt-contrib-copy

我正在尝试构建我的资产,以便多个项目可以共享"阶段"构建脚本。例如,如果我有3个基于Web的产品都使用Bootstrap和jQuery,我想只从共享的#34;库中获取库#34;。

建议文件夹的结构如下:

shared
  -sharedGrunt.js (file)
  -lib (folder)
    -bootstrap (folder)
    -jQuery.js (file)
app1
  -Gruntfile.js (file)
  -src (folder)
    -images (folder)
    -js (folder)
    -etc
app2
  -Gruntfile.js (file)
  -src (folder)
    -images (folder)
    -js (folder)
    -etc

我想在每个" app"中使用Gruntfile.js文件夹能够"导入"或以其他方式执行sharedGrunt.js。我还没有越过那座桥,因为我已经坚持了第一个概念验证测试:一个简单的副本。

因此,在其中一个应用程序的Gruntfile.js文件中,我有一个如下所示的复制任务:

copy: {
  externalTest: {
    expand: true,
    src: '../shared/lib/jQuery.js',
    dest: 'dev/js/jQuery.js',
    flatten: true
  }
}

正如您所看到的,我尝试从Gruntfile升级一级。哪个目录包含"共享"," app1"和" app2"。然后导航回到共享的lib文件夹以获取jQuery。

任务是'#34;成功" (不会抛出实际错误),但不会复制任何文件。

我如何实现目标?我需要放一个" catch-all" gruntFile成为父母"包含所有项目的文件夹?我不希望开发人员要求检查整个父母。我希望开发人员能够查看" app1"和#34;分享"和它一起运行。

2 个答案:

答案 0 :(得分:1)

这很奇怪--Grunt上升任何级别都没有问题,在我的机器上你的代码确实复制了1个文件。

但是,您使用expand会导致grunt将dest属性用作目录,因此您的文件最终为dev/js/jQuery.js/jQuery.js(请注意重复)。

通过执行修复:

copy: {
  externalTest: {
    expand: true,
    src: '../shared/lib/*.js',
    dest: 'dev/js',
    flatten: true
  }
}

答案 1 :(得分:1)

在Xavier的回答中提出的意见提示,我向前迈进,并确定我有两个缺点:

  1. 我应该只提供目标目录。如果我尝试提供文件名,它将创建一个额外的目录,其名称为我认为的文件名;这是泽维尔的观察结果。

  2. 如果你不发出" cwd"对于副本,它从源端再现整个目录树。

  3. 所以,以下内容:

    share: {
      expand: true,
      src: '../common/lib/jquery.js',
      dest: 'dev/js/'
    }
    

    导致在目的地中找到的文件为'"&dev; common / lib / jquery.js"'。这不是预期的行为。

    解决方案:

    1. 将目标作为目录提供,而不是文件名。它将使用原始文件名。
    2. 在复制之前发出CWD,以便源路径不会合并到目标路径中。
    3. 工作任务:

      share: {
        expand: true,
        cwd: '../common/lib',
        src: 'jquery.js',
        dest: 'dev/js/'
      }
      

      结果来自"../common/lib/jquery.js"的文件,并按预期在目的地"dev/js/jquery.js"结束。