在gulp中使用文件目录的父目录作为目标

在gulp中使用文件目录的父目录作为目标,gulp,Gulp,如何在gulp中使用通配符源的文件目录的父目录 源文件: |gulpfile.js (just to show where the base is) |elements/foundations/A/js/src/mainA.js |elements/foundations/A/js/src/subA.js |elements/foundations/B/js/src/mainB.js ... |elements/foundations/F/js/src/mainF.js 预期目标/结果: |e

如何在gulp中使用通配符源的文件目录的父目录

源文件:

|gulpfile.js (just to show where the base is)
|elements/foundations/A/js/src/mainA.js
|elements/foundations/A/js/src/subA.js
|elements/foundations/B/js/src/mainB.js
...
|elements/foundations/F/js/src/mainF.js
预期目标/结果:

|elements/foundations/A/js/mainA.min.js
|elements/foundations/A/js/subA.min.js
|elements/foundations/B/js/mainB.min.js
...
|elements/foundations/F/js/mainF.min.js
我尝试过不同的方法,但最终没有一种有效

这一个运行时没有错误,但不会生成任何文件

gulp.task('scripts', function () {
    return gulp.src('./elements/foundations/**/js/src/*.js', {base: './elements/foundations/**/'})
            .pipe(rename({suffix: '.min'}))
//          .pipe(uglify()) and others ...
            .pipe(gulp.dest('./'))
            ;
});
这一个生成文件,但直接在src目录中

gulp.task('scripts', function () {
    return gulp.src('./elements/foundations/**/js/src/*.js', {base: './elements/foundations/'})
            .pipe(rename({suffix: '.min'}))
            .pipe(gulp.dest('./elements/foundations/'))
            ;
});
如果我尝试在目的地中使用通配符(**),则gulp最终将进入无限循环(与通配符的位置无关)


我也尝试过在不设置基础的情况下使用它,但结果是相似的

您可以将函数传递到
gulp rename
以进行更复杂的重命名操作。例如,这允许您使用node.js的来操作文件路径:

var gulp = require('gulp');
var rename = require('gulp-rename');
var path = require('path');

gulp.task('scripts', function() {
   return gulp.src('./elements/foundations/**/js/src/*.js')
     .pipe(rename(function(file) {
        file.dirname = path.dirname(file.dirname);
        file.basename = file.basename + '.min';
        return file;
     }))
//   .pipe(uglify()) and others ...
     .pipe(gulp.dest('./elements/foundations/'))
});

谢谢,我已经试过这个方法了。不幸的是,我在管道连接中遇到了一个新问题(将所有基础/**文件连接到一个最终文件中,这并不是所希望的)。你的解决方案解决了我最初的问题。
var gulp = require('gulp');
var rename = require('gulp-rename');
var path = require('path');

gulp.task('scripts', function() {
   return gulp.src('./elements/foundations/**/js/src/*.js')
     .pipe(rename(function(file) {
        file.dirname = path.dirname(file.dirname);
        file.basename = file.basename + '.min';
        return file;
     }))
//   .pipe(uglify()) and others ...
     .pipe(gulp.dest('./elements/foundations/'))
});