Динамически запускать задачу concat с динамически создаваемым файлом назначения

Я бегу grunt concat Задача на одном из моих проектов, и это выглядит примерно так:

/**
 * Concatenate | Dependencies Scripts
 */

concat: {
    dependencies: {
        files: {        
            "./Ditcoop/js/plugins.min.js": ["./Ditcoop/js/vendor/**/*.min.js", "!./Ditcoop/js/vendor/modernizr/*.js", "!./Ditcoop/js/vendor/jquery/*.js"],
            "./Global/js/plugins.min.js": ["./Global/js/vendor/**/*.min.js", "!./Global/js/vendor/modernizr/*.js", "!./Global/js/vendor/jquery/*.js"],
            "./Webshop/js/plugins.min.js": ["./Webshop/js/vendor/**/*.min.js", "!./Webshop/js/vendor/modernizr/*.js", "!./Webshop/js/vendor/jquery/*.js"]
        }
    }
}

Мой вопрос был бы, если бы я мог как-то сделать это более динамичным, не указывая каждую корневую папку. Я думал о чем-то вроде этого:

    concat: {
    dependencies: {
        files: {        
            "./*/js/plugins.min.js": ["./*/js/vendor/**/*.min.js", "!./*/js/vendor/modernizr/*.js", "!./*/js/vendor/jquery/*.js"],
        }
    }
}

Я уверен, что не могу сделать это таким образом, но я мог бы использовать expand вариант, я просто не уверен, как я мог бы использовать его, чтобы я мог сделать это в правой корневой папке, так что я не буду создавать один и тот же файл назначения, как много раз я запускаю concat.

1 ответ

Решение

Всегда помните, что Gruntfiles - это javascript:)

grunt.initConfig({
  concat: {
    dependencies: {
      files: (function() {
        var files = Object.create(null);
        grunt.file.expand({filter: 'isDirectory'}, '*').forEach(function(dir) {
          files[dir + '/js/plugins.min.js'] = [
            dir + '/js/vendor/**/*.min.js',
            '!' + dir + '/js/vendor/modernizr/*.js',
            '!' + dir + '/js/vendor/jquery/*.js'
          ];
        });
        return files;
      }()),
    },
  },
});

Но если ваша логика обработки зависимостей настолько сложна, вы можете рассмотреть возможность использования загрузчика модулей, такого как browserify или requirejs. Задача concat на самом деле просто для объединения простых файлов.

Другие вопросы по тегам