Ответ 1
Итак, я нашел ответ, который я искал.
Это сообщение SO было в основном тем же самым вопросом с хорошим ответом. К сожалению, это не получилось, когда я задавал свой вопрос, иначе вы бы не читали это.
Была небольшая настройка моих потребностей. Мне нужно было сделать это динамически для каждого модуля, а не только одного файла compile.js, поэтому мой последний код выглядит следующим образом, размещенный сразу после моего initConfig():
grunt.registerTask("prepareModules", "Finds and prepares modules for concatenation.", function() {
// get all module directories
grunt.file.expand("src/js/modules/*").forEach(function (dir) {
// get the module name from the directory name
var dirName = dir.substr(dir.lastIndexOf('/')+1);
// get the current concat object from initConfig
var concat = grunt.config.get('concat') || {};
// create a subtask for each module, find all src files
// and combine into a single js file per module
concat[dirName] = {
src: [dir + '/**/*.js'],
dest: 'dev/js/modules/' + dirName + '.min.js'
};
// add module subtasks to the concat task in initConfig
grunt.config.set('concat', concat);
});
});
// the default task
grunt.registerTask("default", ["sass", "ngtemplates", "prepareModules", "concat", "uglify", "cssmin"]);
Это существенно упрощает мою concat-задачу, когда я ее вручную кодировал, но немного проще (и масштабируемости!).
concat: {
...
moduleOne: {
src: "src/js/modules/moduleOne/**/*.js",
dest: "dev/js/modules/moduleOne.min.js"
},
moduleTwo:{
src: "src/js/modules/moduleTwo/**/*.js",
dest: "dev/js/modules/moduleTwo.min.js"
}
}
Еще одно отклонение, которое я сделал из сообщения SO, заключалось в том, что я решил не иметь, чтобы makeModules выполняли concat самостоятельно, когда это было сделано. Моя задача по умолчанию (в которой наблюдаются настройки для запуска во время dev) все еще выполняет всю мою обработку.
Это оставляет меня со следующей структурой, готовой для минимизации в prod/:
| dev
| js
| modules
|-- moduleOne.min.js
|-- moduleTwo.min.js