情况:
我目前有一个小小的任务,准备我的项目文件通过FTP部署。这没什么特别的,但这个简单的项目目前还不需要更多。
整个部署任务有一个"子任务"它只是抓取路径列表,并将所有文件复制到__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));
});
这会将项目文件复制到__deploy
目录,并排除所有gulp,bower,composer配置文件以及SCSS和JS源。它调用的deploy-cleanup
任务只是清除部署目录。
问题:
有一部分项目代码使用文件修改日期来创建站点地图等。不幸的是,这种行为无法改变。
因此,如果有一种方法可以像上面的任务一样复制文件,但是同时保留所有文件修改日期(或者至少是指定目录中的文件)。
有没有办法实现这个目标?
答案 0 :(得分:11)
由于我也需要这个,但找不到合适的内容,我已经编写了gulp-preservetime插件来执行此操作。
示例:
var gulp = require('gulp');
var preservetime = require('gulp-preservetime');
gulp.task('default', function() {
gulp.src('./src/**/*')
.pipe(gulp.dest('./dest'))
.pipe(preservetime());
});
答案 1 :(得分:1)
您可以使用gulp-newer
。
这里有一个例子:
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']);
});