update run descargar compile cli node.js automation overwrite gulp

node.js - run - ¿Puede Gulp sobrescribir todos los archivos src?



npm gulp (3)

Dígale a gulp que escriba en el directorio base del archivo en cuestión, así:

.pipe( gulp.dest(function(data){ console.log("Writing to directory: " + data.base); return data.base; }) )

(El argumento de datos es un objeto de archivo de vinilo )

La ventaja de este enfoque es que si tiene archivos de varias fuentes, cada uno anidado en diferentes niveles de la estructura del archivo, este enfoque le permite sobrescribir cada archivo correctamente. (Según lo establecido para establecer un directorio base en el flujo ascendente de su cadena de tuberías)

Digamos que quiero reemplazar el número de versión en un grupo de archivos, muchos de los cuales viven en subdirectorios. Enviaré los archivos a través de gulp-replace para ejecutar la función regex-replace; pero en última instancia, quiero sobrescribir todos los archivos originales .

La tarea podría ser algo como esto:

gulp.src([ ''./bower.json'', ''./package.json'', ''./docs/content/data.yml'', /* ...and so on... */ ]) .pipe(replace(/* ...replacement... */)) .pipe(gulp.dest(/* I DONT KNOW */);

Entonces, ¿cómo puedo terminarlo para que cada archivo src sobrescriba solo en su ubicación original? ¿Hay algo que pueda pasar a gulp.dest() que haga esto?


Puedo pensar en dos soluciones:

  1. Agregue una opción para base a su gulp.src así:

    gulp.src([...files...], {base: ''./''}).pipe(...)...

    Esto le dirá a Gulp preservar todo el camino relativo. Luego pase ''./'' a gulp.dest() para sobrescribir los archivos originales. (Nota: esto no se ha probado, debe asegurarse de tener una copia de seguridad en caso de que no funcione).

  2. Utilizar funciones. Gulp solo tiene JavaScript, así que puedes hacer esto:

    [...files...].forEach(function(file) { var path = require(''path''); gulp.src(file).pipe(rename(...)).pipe(gulp.dest(path.dirname(file))); }

    Si necesita ejecutarlos de forma asíncrona, el primero será mucho más fácil, ya que necesitará usar algo como event-stream.merge y asignar las secuencias a una matriz. Se vería como

    var es = require(''event-stream''); ... var streams = [...files...].map(function(file) { // the same function from above, with a return return gulp.src(file) ... }; return es.merge.apply(es, streams);


Si está usando gulp-rename , aquí hay otra solución:

var rename = require(''gulp-rename''); ... function copyFile(source, target){ gulp.src(source) .pipe(rename(target)) .pipe(gulp.dest("./")); } copyFile("src/js/app.js","dist/js/app.js");

y si quieres que la fuente y el destino sean rutas absolutas,

var rename = require(''gulp-rename''); ... function copyFile(source, target){ gulp.src(source.replace(__dirname,".")) .pipe(rename(target.replace(__dirname,"."))) .pipe(gulp.dest("./")); } copyFile("/Users/me/Documents/Sites/app/src/js/app.js","/Users/me/Documents/Sites/app/dist/js/app.js");