varios una tutorial tesis teclado socket serve renombrar relies procedimiento pasos parte para nombre nodejs node indique grunt graficas formas for español documento curso con completo compile como comando cli carpetas carpeta cambiar archivos archivo gruntjs parent-child rename build-automation

gruntjs - una - ¿Cómo puedo cambiar el nombre de los archivos con Grunt, según el nombre de la carpeta principal del archivo respectivo?



socket io pdf (5)

Tengo la siguiente estructura:

src/ modules/ module1/ js/ main.js scss/ main.scss index.html module2/ js/ main.js scss/ main.scss index.html

Me gustaría ejecutar una tarea ronca para copiarlos en la siguiente estructura:

dev/ js/ module1.js module2.js css/ module1.css module2.css module1.html module2.html

¿Hay alguna manera de hacer esto con un plugin existente? Si no, ¿cómo podría lograr esto?


Esto se puede hacer usando el complemento grunt-contrib-copy .

Lo más importante a tener en cuenta es que puede cambiar el destino mediante programación utilizando una función de cambio de nombre (que toma el destino y la fuente de cada archivo).

Aquí hay un Gruntfile.js muestra (algo quebradizo) que debe copiar a su estructura deseada:

module.exports = function(grunt) { // Project configuration. grunt.initConfig({ copy: { main: { files: [ { expand: true, cwd: ''src/modules/'', src: [''**/*.js''], dest: ''dev/js/'', rename: function(dest, src) { // use the source directory to create the file // example with your directory structure // dest = ''dev/js/'' // src = ''module1/js/main.js'' return dest + src.substring(0, src.indexOf(''/'')) + ''.js''; } }, { expand: true, cwd: ''src/modules/'', src: [''**/*.scss''], dest: ''dev/css/'', rename: function(dest, src) { return dest + src.substring(0, src.indexOf(''/'')) + ''.css''; } }, { expand: true, cwd: ''src/modules/'', src: [''**/*.html''], dest: ''dev/'', rename: function(dest, src) { return dest + src.substring(0, src.indexOf(''/'')) + ''.html''; } } ] } } }); grunt.loadNpmTasks(''grunt-contrib-copy''); // Default task(s). grunt.registerTask(''default'', [''copy'']); };


Si desea cambiar el nombre de los archivos .coffee a .js o similar, simplemente adáptelos;)

sudo npm instalar grunt-contrib-copy

copy: { rename: { files: [{ expand: true, dot: true, cwd: ''./app/scripts'', dest: ''./app/scripts/'', src: [ ''**/*.coffee'' ], rename: function(dest, src) { console.log(dest + src); return dest + src.replace(''.coffee'',''.js''); } }] } },


Simplemente puede usar las opciones: expandir: verdadero, aplanar: verdadero

No hay necesidad de cambiar el nombre de devoluciones de llamada.


Ya no es necesario usar grunt-contrib-copy solo para esto, ahora puede aprovechar grunt.file.expandMapping que tiene opciones para cambiar la extensión del archivo o para definir una función que devuelva el nombre de archivo de salida.

Aquí hay un ejemplo de un objeto de files en una tarea de jade para compilar plantillas de .jade en archivos .html:

files: [{ expand: true, src: "**/*.jade", dest: "<%= distDir %>", cwd: "<%= assetsDir %>/jade", rename: function(dest, matchedSrcPath, options) { // return the destination path and filename: return (dest + matchedSrcPath).replace(''.jade'', ''.html''); } }]

Habría sido más fácil usar la opción ext: ''.html'' lugar de la opción de cambio de rename en este caso, pero estoy usando el rename aquí para que pueda ver cómo funciona.

Más información sobre las opciones de ext y rename (y otras) en los documentos grunt.file . Algunos ejemplos más here y here .


No es exactamente una respuesta a tu pregunta, pero lo hice aquí buscando carpetas de destino relativas con gruñido, así que ... Así es como lo resolví

... base: { files: [ { expand: true, cwd: ''app/design/frontend/'', src: [''**/Magento_Sales/email-src/*.html''], dest: ''../../Magento_Sales/email/'', rename: function(dest, src, expand) { src = path.parse(src) return path.join(expand.cwd, src.dir, dest, src.base); } }, ], } ...

Este pequeño bit path.join(expand.cwd, src.dir, dest, src.base); simplemente creando el camino que necesito.

expand.cwd = app/design/frontend/

src.dir = <DYNAMIC_FOLDERS>/Magento_Sales/email-src/

dest = ../../Magento_Sales/email/

src.base = <FILE>.html

y todos juntos = app/design/frontend/<COMPANY>/<MAIN-THEME>/Magento_Sales/email/<FILE>.html

y en mi situación ahora compilará mis correos electrónicos html en carpetas de destino relativas