Gulp:如何设置相对于已处理文件的dest文件夹(使用通配符时)?

pet*_*ete 15 javascript node.js gulp

在我的assets/文件夹下,我有很多子文件夹,每个子文件夹包含任意数量的图像,如下所示:

assets/article1/
assets/article2/
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写gulp任务来查找其中的所有.jpg图像并生成其缩略图版本,以保存在thumbs/每个文件所在的文件夹中的子文件夹中:

assets/article1/               # original jpg images
assets/article1/thumbs/        # thumbnail versions of above..
assets/article2/
assets/article2/thumbs/
Run Code Online (Sandbox Code Playgroud)

我一直在尝试各种方法,但没有运气.我最接近的是:

gulp.task('thumbs', function () {
    return gulp.src( './assets/**/*.jpg' )
        .pipe( imageResize( { width: 200 } ) )
        .pipe( gulp.dest( function( file ) { return file.base + '/thumbs/'; } ) );
});
Run Code Online (Sandbox Code Playgroud)

但是,这会thumbs\在根目录下创建一个文件夹assets\

assets/article1/
assets/article2/
assets/thumbs/article1/
assets/thumbs/article2/
Run Code Online (Sandbox Code Playgroud)

在任何地方都有关于路径和通配符的良好信息吗?显然我不是很好处理..

tma*_*ini 7

您可以使用path.dirname它:http://nodejs.org/api/path.html#path_path_dirname_p

// require core module
var path = require('path');

gulp.task('thumbs', function () {
    return gulp.src( './assets/**/*.jpg' )
        .pipe( imageResize( { width: 200 } ) )
        .pipe( gulp.dest( function( file ) { return path.join(path.dirname(file.path), 'thumbs'); } ) );
});
Run Code Online (Sandbox Code Playgroud)

  • 更改gulp.src中的基本路径`return gulp.src('./assets/**/*.jpg',{base:'.'})`.这应该给你从'.'开始的路径.而不是'./assets/'. (2认同)