如何将gulp.dest()设置在与管道输入相同的目录中?
我需要在每个目录中找到的所有图像进行优化并记录到它们中,而无需分别设置每个文件夹的路径。我不知道该怎么做如何将gulp.dest()设置在与管道输入相同的目录中?,gulp,Gulp,我需要在每个目录中找到的所有图像进行优化并记录到它们中,而无需分别设置每个文件夹的路径。我不知道该怎么做 var gulp = require('gulp'); var imageminJpegtran = require('imagemin-jpegtran'); gulp.task('optimizeJpg', function () { return gulp.src('./images/**/**/*.jpg') .pipe(imageminJpegtran({ progre
var gulp = require('gulp');
var imageminJpegtran = require('imagemin-jpegtran');
gulp.task('optimizeJpg', function () {
return gulp.src('./images/**/**/*.jpg')
.pipe(imageminJpegtran({ progressive: true })())
.pipe(gulp.dest('./'));
});
给你:
gulp.task('optimizeJpg', function () {
return gulp.src('./images/**/**/*.jpg')
.pipe(imageminJpegtran({ progressive: true })())
.pipe(gulp.dest('./images/'));
});
Gulp将通配符或globstar的所有内容都放入其虚拟文件名中。因此,您知道要选择的所有部分(如/images/
)都必须位于目标目录中。以下是两个答案。首先:它更长,灵活性更低,需要额外的模块,但它的工作速度要快20%,并为每个文件夹提供日志
var merge = require('merge-stream');
var folders =
[
"./pictures/news/",
"./pictures/product/original/",
"./pictures/product/big/",
"./pictures/product/middle/",
"./pictures/product/xsmall/",
...
];
gulp.task('optimizeImgs', function () {
var tasks = folders.map(function (element) {
return gulp.src(element + '*')
.pipe(sometingToDo())
.pipe(gulp.dest(element));
});
return merge(tasks);
});
第二种解决方案:它灵活优雅,但速度较慢。我更喜欢
return gulp.src('./pictures/**/*')
.pipe(somethingToDo())
.pipe(gulp.dest(function (file) {
return file.base;
}));
您可以使用
base
参数:
gulp.task('uglify', function () {
return gulp.src('./dist/**/*.js', { base: "." })
.pipe(uglify())
.pipe(gulp.dest('./'));
});
原始代码段中唯一问题的可能重复是使用
'./'
调用dest
,而不是基./images'
。修复该错误将在不更改方法的情况下使此工作正常。解决方案2是否可以改进为在未知文件夹深度下工作?我想遍历整个文件夹结构?@Rouz它已经可以在未知文件夹深度下工作foo/***
表示foo及其任何级别的子目录中的所有文件。两颗双星是多余的。我已经找了很久了!我不能接受你不能将文件输出到它们所在的位置!非常感谢。我只是想补充一点,解决方案2在使用tsconfig.json
文件指定输入/输出(对于在这种情况下登陆此处的用户)时非常有效。首先,确保注释掉(或删除)outDir。其次,如果您使用的是babel(gulpfile.babel.js),您可以使它更加优雅:gulp.dest(file=>file.base)
。谢谢你的回答!为什么是两个双星?@turibe,双星就是我们提到的通配符ddbrrt@MarioAlbertoContreras一双就够了。“/images/***.jpg”与“/images/***/***.jpg”一样好