【问题标题】:Grunt Copy task overwrites destination parent directoryGrunt Copy 任务覆盖目标父目录
【发布时间】:2014-06-10 22:48:34
【问题描述】:

我对 Grunt 很陌生。我正在尝试从一个位置复制每个子目录并将每个子目录放在另一个目标目录中。我在自定义 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 等。

谢谢!

【问题讨论】:

    标签: javascript node.js gruntjs grunt-contrib-copy


    【解决方案1】:

    很抱歉回答我自己的问题,但缺乏我对 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”的所有子目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多