Наследование общих параметров конфигурации в конфигурации grunt.js

Как люди обрабатывают общие параметры конфигурации в Grunt для нескольких проектов. Проекты будут иметь некоторые общие параметры конфигурации, например. для min, но также имеют частные или пользовательские параметры конфигурации для каждого проекта, например. только один из трех проектов требует less или имеет разные варианты для него.

Есть ли способ поделиться этой общей конфигурацией между проектами, используя наследование или импортировать существующий файл или каждый проект должен определить все настройки?

Проекты, на которые я ссылаюсь, будут находиться в иерархии каталогов, например

root
    module1
         grunt.js
    module2
         grunt.js
    module3
         grunt.js

Есть ли способ предоставить общие настройки конфигурации на уровне root?

Ответ 1

Вы можете легко сохранить конфигурацию во многих внешних файлах JSON по мере необходимости. grunt.file.readJSON поможет вам здесь. Например:

module.exports = function(grunt) {

  var concatConf = grunt.file.readJSON('../concat-common.json'),
      minConf = grunt.file.readJSON('../min-common.json');

  // do whatever you want with concatConf and minConf here
  // ...

  // Project configuration.
  grunt.initConfig({
    pkg: '<json:grunt-sample.jquery.json>',
    meta: {
      banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - ' +
        '<%= grunt.template.today("yyyy-mm-dd") %>\n' +
        '<%= pkg.homepage ? "* " + pkg.homepage + "\n" : "" %>' +
        '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' +
        ' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */'
    },

    concat: concatConf,
    min: minConf

    // ...
  });

  // Default task.
  grunt.registerTask('default', 'concat min');

};

Не забывайте, что файл grunt является обычным файлом JavaScript, который выполняется в среде Node, а параметры конфигурации - обычные объекты JavaScript:)