文件夹结构:
project
|
+-coffee
| |
| +-main.coffee
| |
| +-testDir
| | |
| | +-models.coffee
| | |
| | +-views.coffee
| |
| +-anotherDir
| | |
| | +-routes.coffee
| | |
| | +-views.coffee
| | |
| | +-modules.coffee
| |
| +- etc...
|
+-www
这个想法是在向www/
目录写入文件时保持coffee/
目录的文件夹结构。在coffee/
中可以有任意数量的子文件夹。所有.coffee
文件从每个文件夹应该连接到一个modules.js
文件:
www
|
+-modules.js
|
+-testDir
| |
| +-modules.js
|
+-anotherDir
| |
| +-modules.js
|
+- etc...
我现在有这个gulp任务:
gulp.task('coffee', function() {
gulp.src('./coffee/**/*.coffee', {base: './coffee/'})
.pipe(coffee({bare: true}).on('error', gutil.log))
.pipe(uglify())
// .pipe(concat('modules.js'))
.pipe(gulp.dest('./www'))
});
如果没有concat()
,文件将被放置到正确的子文件夹中(但它们没有连接)。使用concat()
,所有文件被连接到单个modules.js
文件中:
www
|
+-modules.js
我怎样才能正确地认识到这一点?
以下是使用gulp-flatmap
的解决方案:
var flatmap = require('gulp-flatmap');
gulp.task('coffee', function() {
return gulp.src('./coffee/{*,}/', {base:'./coffee'})
.pipe(flatmap(function(stream, dir) {
return gulp.src(dir.path + '/*.coffee')
.pipe(coffee({bare: true}).on('error', gutil.log))
.pipe(uglify())
.pipe(concat('modules.js'))
.pipe(gulp.dest('./www/' + path.relative(dir.base, dir.path)))
}))
});
首先将coffee/
目录及其所有直接子目录放入流中。然后将这些目录中的每个目录映射到一个新的流,该流连接各自目录中的所有.coffee
文件。最后,通过使用path.relative()
来确定每个结果modules.js
文件的适当目标文件夹。