Gulp.js - 在gulp.dest()中使用gulp.src()中的路径

Ada*_*dam 54 less.js gulp gulp-less

尝试创建一个gulp任务,通过LESS管理来自不同文件夹的一堆文件,然后将它们输出到基于原始源的文件夹.考虑这个文件夹结构:

Project
+-- /Module_A
|   +- /less
|   |  +- a.less
|   +- a.css
|
+-- /Module_B
    +- /less
    |  +- b.less
    +- b.css
Run Code Online (Sandbox Code Playgroud)

这是我的gulpfile:

var gulp = require('gulp');
var gutil = require('gulp-util');
var less = require('gulp-less');

gulp.task('compileLess', function () {
  gulp.src('./*/less/*.less')
    .pipe(less())
    .pipe(gulp.dest( ??? ));
});

gulp.task('default', ['compileLess']);
Run Code Online (Sandbox Code Playgroud)

我知道gulp.dest()期望传入路径,但在我的示例中,路径将根据源文件而不同.那么如何从源代码中获取路径,修改它然后将其传递给gulp.dest()?

或者我是以错误的方式来做这件事的?

Cor*_*ing 87

在您src设置的base选项中,它将保留较少文件的原始路径.

gulp.task('compileLess', function () {
  gulp.src('./*/less/*.less', {base: './'})
    .pipe(less())
    .pipe(gulp.dest( './dist' ));
});
Run Code Online (Sandbox Code Playgroud)

./dist目标可以是任何东西.您希望在何处放置文件结构.

其他信息:https: //github.com/wearefractal/glob-stream#options

  • 完善!这应该是公认的答案. (3认同)
  • 是! 这就是我要找的! (2认同)

Man*_*utz 30

你应该看看gulp-rename

差不多:

gulp.src('./*/less/*.less')
  .pipe(less())
  .pipe(rename(function(path){
    // Do something / modify the path here         
  }))
  .pipe(gulp.dest('./finalRootDestination'))
Run Code Online (Sandbox Code Playgroud)

你让gulp.dest指向你的最终输出目录,但是根据你想要回调到gulp-rename的任何逻辑,动态修改各个文件路径.

  • 我更喜欢CoryDorning的答案 - 那么你甚至不需要做额外的管道.看起来这就是src()基础选项的设计目的. (5认同)