Я пытаюсь объединить несколько файлов js во вложенной структуре каталогов в один файл в другом месте. Они должны быть объединены в определенном порядке, и я не могу найти способ изменить порядок по умолчанию, в котором глобальный поиск gulp извлекает вложенные файлы. Я пробовал различные шаблоны глобусов безрезультатно.
Моя структура каталогов выглядит следующим образом:
components
- componentA
- controllers
- controllerA1.js
- controllerA2.js
- services
- serviceA1.js
- configA.js
- moduleA.js
- componentB
- controllers
- controllerB1.js
- controllerB2.js
- services
- serviceB1.js
- configB.js
- moduleB.js
Я хочу, чтобы файлы объединялись в один файл в следующем порядке:
configA.js
moduleA.js
controllerA1.js
controllerA2.js
serviceA1.js
configB.js
moduleB.js
controllerB1.js
controllerB2.js
serviceB.js
Таким образом, gulp выполняет итерацию по каждому компоненту и выполняет итерацию, насколько это возможно, прежде чем перейти к следующему компоненту и сделать то же самое.
Вместо этого он объединяется в следующем порядке:
configA.js
moduleA.js
configB.js
moduleB.js
controllerA1.js
controllerA2.js
serviceA1.js
controllerB1.js
controllerB2.js
serviceB1.js
Другими словами, он переходит в каталог верхнего уровня, выполняет итерацию по каждому из файлов верхнего уровня в этом каталоге, а затем переходит к следующему каталогу верхнего уровня и делает то же самое, прежде чем вернуться в первый каталог верхнего уровня и выполнить итерацию по следующему уровню. вниз и т.д.
Я пробовал несколько разных методов, каждый из которых представлял проблемы.
Я попытался использовать плагин gulp-recursive-folder для настройки порядка итерации следующим образом:
gulp.task('generateTree', recursivefolder({
base: './components',
exclude: [ // exclude the debug modules from thus build
//'debug-modules'
]
}, function(folderFound){
//This will loop over all folders inside pathToFolder main and recursively on the children folders, secondary
//With folderFound.name gets the folderName
//With folderFound.path gets all folder path found
//With folderFound.pathTarget gets the relative path beginning from options.pathFolder
return gulp.src(folderFound.path + "/**/*.js")
.pipe($.concat("app.js"))
.pipe(gulp.dest('./build/assets/js/'));
}));
Это повторяется в том порядке, в котором я хочу, но я считаю, что он записывает первый каталог верхнего уровня как один поток, а затем записывает второй каталог как другой поток, так что второй поток перезаписывает первый. Итак, у меня остались только следующие объединенные файлы:
configB.js
moduleB.js
controllerB1.js
controllerB2.js
serviceB.js
Поэтому я также попытался использовать плагин add-stream для рекурсивного добавления в тот же поток перед записью в файл. Я не буду никого утомлять деталями, но в основном я тоже не могу заставить это работать так, как хотелось бы. Может ли кто-нибудь порекомендовать пост/учебник/плагин? Спасибо.