Uso de gruñido para concatenar muchos archivos de muchos directorios en un solo archivo renombrado en un nuevo directorio

Tengo un proyecto angular con potencialmente muchos módulos. Cada módulo tiene su propio directorio con subdirectorios para controladores, directivas, servicios, etc. Algo así:

src
|-- js
    |-- modules
        |-- moduleOne
            | module.js
            |-- controllers
                | listController.js
                | detailController.js
            |-- directives
                | listItem.js
                | summaryWidget.js
            |-- filters
            |-- services
                | moduleService.js

Mi compilación esencialmente agrupa y compila archivos de src / y los pone en dev /, luego minimiza los archivos en dev / y pasa a prod /. Durante el desarrollo, el servidor apunta a la carpeta dev / y en producción, el servidor apunta a la carpeta prod / (también por qué los archivos terminan en .min.js a pesar de que solo se compilan / concatenan). Este proceso está funcionando bien.

Actualmente, mi tarea concat es tomar todos los archivos en moduleOne / y crear un solo archivo moduleOne.js en mi directorio de desarrollo. Esto es lo que quiero que suceda, pero de forma más dinámica:

concat: {
    modules: {
        files: {
            "dev/js/modules/moduleOne.min.js": [
                "src/js/modules/moduleOne/*.js",
                "src/js/modules/moduleOne/**/*.js"
            ],
            "dev/js/modules/moduleTwo.min.js": [
                "src/js/modules/moduleTwo/*.js",
                "src/js/modules/moduleTwo/**/*.js"
            ]
        } 
    }
}

El problema es que tengo que hacer esto para cada módulo, pero no creo que deba hacerlo.

Intenté hacer lo siguiente porque es lo que quiero hacer:

concat: {
    modules: {
        files: [{
            expand: true,
            cwd: "src/js/modules",
            src: "**/*.js",
            dest: "dev/js/modules",
            ext: ".min.js"
        }]
    }
}

Pero el resultado fue que todos mis archivos y la estructura de directorios se movieron de src / a dev /. Básicamente utilicé concat para hacer una copia, no fue útil.

Me gustaría hacer algo como esto:

concat: {
    modules: {
        files: [{
            expand: true,
            cwd: "src/js/modules",
            src: "**/*.js",
            dest: "dev/js/modules/<foldername>.min.js",  <- how do I achieve this?
        }]
    }
}

He estado leyendo mucho, pero parece que solo estoy cerca de encontrar la respuesta y tengo problemas para unir los conceptos. Mucho de lo que encuentro es solo archivos individuales en un nuevo directorio, con un cambio de nombre. Me gustaría que varios archivos se unan a un nuevo directorio con un nuevo nombre. Porque así es como ruedo :)

Respuestas a la pregunta(1)

Su respuesta a la pregunta