2014-10-03 12 views
7

Situazione:Copia file con sorso preservando ora di modifica

Al momento ho un compito piccolo sorso che prepara i miei file di progetto per essere distribuito tramite FTP. Non è niente di speciale, ma questo semplice progetto non ha bisogno di più, in questo momento.

Il compito intera Deploy ha un "sub compito", che prende semplicemente un elenco di percorsi, e copia di tutti i file in una directory __deploy:

/* 
    Path: Folder path for a prepared deploy 
*/ 
var deployBasePath = '__deploy/'; 


/* 
    Paths: Include all paths into deploy and excluded unneeded files. 
*/  
var deployIncludePaths = [ 
    '**/*', 
    '.htaccess', 
    '!{__deploy,__deploy/**}', 
    '!{.git,.git/**}', 
    '!assets/{js-sources,js-sources/**}', 
    '!assets/{scss,scss/**}', 
    '!assets/{vendor,vendor/**}', 
    '!{node_modules,node_modules/**}', 
    '!{panel,panel/**}', 
    '!thumbs/**', 
    '!.bowerrc', 
    '!.gitignore', 
    '!.gitmodules', 
    '!bower.json', 
    '!composer.{json,lock}', 
    '!gulpfile.js', 
    '!package.json', 
    '!readme.md' 
]; 


gulp.task('deploy-copy', ['deploy-cleanup', 'css', 'js'], function() { 
    return gulp.src(deployIncludePaths) 
     .pipe(gulp.dest(deployBasePath)); 
}); 

Questo copierà i file di progetto in una directory __deploy ed escludere tutti i file config di gulp, bower, compositore e sorgenti SCSS e JS. L'attività deploy-cleanup che sta chiamando elimina semplicemente la directory di distribuzione.


Problema:

C'è una parte del codice che utilizza progetti di modifica del file risale per creare sitemap, ecc Purtroppo, questo comportamento non può essere modificato.

Pertanto sarebbe utile, se esistesse un modo per copiare i file esattamente come l'attività sopra descritta, pur preservando tutte le date di modifica dei file (o almeno i file da una directory specificata).

C'è un modo per realizzare questo?

+0

È questo ancora un problema? Ho scavato nel codice sorgente e non c'è sicuramente alcuna opzione per abilitarlo, tuttavia non ho visto alcun posto esplicito in cui si stava aggiornando il tempo modificato. Suppongo che sia un comportamento predefinito di alcune librerie. Sembra qualcosa di simile a 'gulp.dest()' dovrà essere creato per garantire che il tempo modificato non venga modificato. – pgreen2

+0

Sì, mi piacerebbe ancora poter copiare i file mantenendo il timestamp di modifica. – DieserJonas

risposta

1

Per questo è possibile utilizzare gulp-newer.

Ecco l'esempio da esso:

var gulp = require('gulp'); 
var newer = require('gulp-newer'); 
var imagemin = require('gulp-imagemin'); 

var imgSrc = 'src/img/**'; 
var imgDest = 'build/img'; 

// Minify any new images 
gulp.task('images', function() { 

    // Add the newer pipe to pass through newer images only 
    return gulp.src(imgSrc) 
     .pipe(newer(imgDest)) 
     .pipe(imagemin()) 
     .pipe(gulp.dest(imgDest)); 

}); 

gulp.task('default', function() { 
    gulp.watch(imgSrc, ['images']); 
}); 
9

come avevo bisogno anche questo, ma non ho trovato niente di adatto, ho scritto il plugin gulp-preservetime per farlo.

Esempio:

var gulp = require('gulp'); 
var preservetime = require('gulp-preservetime'); 

gulp.task('default', function() { 
    gulp.src('./src/**/*') 
     .pipe(gulp.dest('./dest')) 
     .pipe(preservetime()); 
}); 
Problemi correlati