Я пытаюсь настроить gulpfile.js
на конкатенирование всех .js
файлов в моей папке src/js
и называть их на основе их родительской папки.
Пример структуры папок:
project
|
+-assets
| |
| +-app.min.js
| |
| +-vendor.min.js
|
+-src
| |
| +-app
| | |
| | +-file1.js
| | |
| | +-file2.js
| |
| +-vendor
| | |
| | +-file1.js
| | |
| | +-file2.js
Я могу настроить его для определенных папок и иметь конкретные имена файлов для каждого из них, но мне нужна функция, которая может работать через неопределенное изменение папок и имен.
Раньше я использовал:
gulp.task('js', function () {
gulp.src('src/js/app/**/*.js')
.pipe(plumber(plumberErrorHandler))
.pipe(jshint())
.pipe(jshint.reporter('fail'))
.pipe(concat('app.min.js'))
.pipe(uglify())
.pipe(gulp.dest('assets/js'))
});
Взгляните на этот официальный рецепт. Он должен показывать именно то, что вы хотите.
function getFolders(dir) {
return fs.readdirSync(dir)
.filter(function(file) {
return fs.statSync(path.join(dir, file)).isDirectory();
});
}
var folders = getFolders('src');
folders.map(function(folder) {
gulp.src(path.join('src', folder, '/**/*.js'))
.pipe(concat(folder + '.js'))
.pipe(gulp.dest('assets'));
});
но мне нужна функция, которая может работать через неопределенное изменение папок и имен.
Я лично не знаю, как это сделать. То, что я обычно решал, решает мою проблему - установить переменную пути с именем этих папок и построить мою задачу таким образом.
var path = [ 'app', 'vendor' ];
gulp.task('js', function () {
for (var i = 0; i < path.length; i++) {
var p = path[i];
gulp.src('src/' + p + '/**/*.js')
.pipe(plumber(plumberErrorHandler))
.pipe(jshint())
.pipe(jshint.reporter('fail'))
.pipe(concat(p + '.min.js'))
.pipe(uglify())
.pipe(gulp.dest('assets/js'))
}
});
Я слышал, что путь глотки может сделать то, что вы хотите, но я лично не заглянул в него.