簡體   English   中英

Grunt Copy任務將覆蓋目標父目錄

[英]Grunt Copy task overwrites destination parent directory

我對Grunt很陌生。 我正在嘗試從一個位置復制每個子目錄,並將每個子目錄放置在另一個目標目錄中。 我正在執行自定義任務,因為無法確定源位置中將存在多少個子目錄。 我面臨的問題是每次執行復制時,都會覆蓋以前的目錄結構。

我嘗試將“ cwd”設置為要從中復制的子目錄的根目錄,但問題仍然存在。

資料夾結構:

container
     |
      - dist/  *I want to copy each src folder here
     |
     GruntFile.js

subapps
     |
      - thing1/dist
     |            *I want to copy each of these dirs (thing1/dist, thing2/dist) to container/dist eg: container/dist/thing1/dist, container/dist/thing2/dist
      - thing2/dist

我的任務:

grunt.registerTask('copySubApps', function () {

grunt.file.expand({filter : 'isDirectory'}, '../subapps/*/').forEach(function (subapp) {
  var subAppName = path.basename(subapp);
  var subAppDest = grunt.template.process('dist/subapps/<%= appName %>/dist/',{data:{appName:subAppName}});
  grunt.config('subAppDest', subAppDest);
  grunt.config('subAppName', subAppName);
  grunt.task.run('copy:subapp');
});

});

組態:

copy: {
  subapp: {
    expand: true,
    src: '**/*',
    dest: '<%= subAppDest %>',
    cwd: '../subapps/<%= subAppName %>/dist'
  }
}

隨后的每個副本都覆蓋其前面的副本。 如何避免這種情況? 我確信這是一種非常幼稚的方法,因此非常歡迎提出建議和指導。 :-)一旦工作,我需要進一步過濾每個子文件夾中要復制的項目。 例如subapps / thing1 / style,!subapps / thing1 / common等。

謝謝!

很抱歉回答我自己的問題,但是我對Grunt任務配置缺乏最初的了解。 希望這可以幫助正在努力了解如何動態創建任務目標的其他人。

這是我想出的:

    grunt.file.expand({filter: 'isDirectory'}, '../subapps/*/').forEach(function (subapp) {
      var subAppName = path.basename(subapp);
      var subAppDest = grunt.template.process('dist/subapps/<%= appName %>/', {data: {appName: subAppName}});
      var distWorkingDir = grunt.template.process('../subapps/<%= appName %>/', {data: {appName: subAppName}});
      var templatesWorkingDir = grunt.template.process('../subapps/<%= appName %>/src/', {data: {appName: subAppName}});
      //add a copy target for each subApp dir
      var distTarget = subAppName + '_dist';
      var templateTarget = subAppName + '_template';
      subAppTargetNames.push('copy:' + distTarget);
      subAppTargetNames.push('copy:' + templateTarget);
      subAppTargets.copy[distTarget] = {
        expand: true,
        src: 'dist/*',
        dest: subAppDest,
        cwd: distWorkingDir
      };
      subAppTargets.copy[templateTarget] = {
        expand: true,
        src: 'templates/*',
        dest: subAppDest,
        cwd: templatesWorkingDir
      };
    });
    //Merge new copy targets with existing copy configuration.
    grunt.config.merge(subAppTargets);
//Run each of the newly created copy targets
    grunt.task.run(subAppTargetNames);
  });

基本上,上面的操作如下:

  1. 查找“ subapps”的所有子目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM