在gulp中使用file-directory的父目录作为目标

时间:2016-07-04 12:28:53

标签: 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

期望的目标/结果:

|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.task('scripts', function () {
    return gulp.src('./elements/foundations/**/js/src/*.js', {base: './elements/foundations/'})
            .pipe(rename({suffix: '.min'}))
            .pipe(gulp.dest('./elements/foundations/**/'))
            ;
});

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

1 个答案:

答案 0 :(得分:2)

您可以将函数传递给gulp-rename以进行更复杂的重命名操作。这允许您例如使用path module 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/'))
});