使用grunt-contrib-copy从父文件夹复制文件

时间:2015-02-02 14:23:05

标签: grunt-contrib-copy

我正在尝试使用grunt-contrib-copy从父文件夹复制文件。我的文件夹结构是:

-libs
  -html5shiv
  -respond
  -jquery
-apps
  -exampleApp1
    -GruntFile.js
    -build
  -exampleApp2
    -GruntFile.js
    -build

当我在exampleApp1中运行GruntFile.js时,我试图将libs文件夹中的所有JavaScript文件复制到apps / exampleApp1 / build。我在GruntFile.js中有以下设置:

build_dir: 'build';

lib_files: {
  js: [
    '../../libs/html5shiv/dist/html5shiv.js',
    '../../libs/respond/dest/respond.min.js',
    '../../libs/jquery/dist/jquery.min.js'
  ]
};

copy: {
  build_libjs: {
    files: [
      {
        src: [ '<%= lib_files.js %>' ],
        dest: '<%= build_dir %>/',
        cwd: '.',
        expand: true            
      }
    ]
  },

},

目前,由于&#39; .. / .. /&#39,它将所有文件复制到apps / libs;每个文件都在lib_files.js数组中。如何确保文件最终在build文件夹中?:

-apps
  -exampleApp1
    -GruntFile.js
    -build
      -libs
        -html5shiv/dist/html5shiv.js
        -libs/respond/dest/respond.min.js
        -jquery/dist/jquery.min.js

2 个答案:

答案 0 :(得分:2)

实际上答案很简单。有一个重命名函数,可以与grunt-contrib-copy结合使用。

“您只需要将一个参数附加到我的配置中,这将覆盖Grunt文件实用程序的标准重命名功能。”

从:

http://fettblog.eu/blog/2014/05/27/undocumented-features-rename/

我将它与一个简单的正则表达式结合起来并解决了问题:

  build_libjs: {
    files: [
      {
        src: [ '<%= lib_files.js %>' ],
        dest: '<%= build_dir %>/',
        cwd: '.',
        expand: true,
        rename: function(dest, src) {
          //Replace '../../' with an empty string
          return dest + ( src.replace(/^..\/..\// ,"") );
        }           
      }
    ]
  },

答案 1 :(得分:0)

尝试使用 cwd 属性更改源目录

lib_files: {


js: [
    'html5shiv/dist/html5shiv.js',
    'respond/dest/respond.min.js',
    'jquery/dist/jquery.min.js'
  ]
};

copy: {
  build_libjs: {
    files: [
      {
        src: [ '<%= lib_files.js %>' ],
        dest: '<%= build_dir %>/',
        cwd: '../libs',
        expand: true            
      }
    ]
  },