2014-06-06 4 views
0

Я довольно новичок в Grunt. Я пытаюсь скопировать каждый подкаталог из одного места и поместить их в другой целевой каталог. Я делаю это в специальной задаче grunt, потому что я не могу быть уверен, сколько подкаталогов будет существовать в исходном местоположении. Проблема, с которой я сталкиваюсь, - каждый раз, когда выполняется копирование, предыдущая структура каталога переопределяется.Задача Grunt Copy перезаписывает родительский каталог назначения

Я попытался установить '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 и т. д.

Спасибо!

ответ

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'.
Смежные вопросы