0

私は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 など。

ありがとう!

4

1 に答える 1

0

私自身の質問に答えて申し訳ありませんが、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」のすべてのサブディレクトリを検索します。
于 2014-06-10T14:29:28.670 に答える