2015-03-12 3 views
0

Я использую Gulp для создания небольшого веб-приложения на основе структуры React.Gulp js src: сначала получить самые глубокие файлы

Для компиляции клиентских скриптов, моя задача начинается так:

gulp.task('buildClientScripts', function() { 
    // Get all the js and jsx scripts 
    // Starts with the app.js file 
    return gulp.src([ 
      'app/app.js', 
      'app/clientScripts/**/*.jsx', 
      'app/clientScripts/**/*.js', 
     ]) 

Порядок файлов моя проблема. Для этой файловой структуры:

- clientScripts 
---- components 
-------- subComponents 
------------ mysubComponent.js 
-------- myComponent.js 
---- main.js 

Порядок загрузки будет: main.js, myComponent.js, mysubComponent.js. Но, очевидно, моим топ-файлам нужны более глубокие файлы для работы.

Как я могу попросить gulp сначала загрузить самые глубокие файлы?

+1

Если у вас есть явный заказ, вы должны указать их в указанном порядке. В противном случае используйте диспетчер зависимостей, например [Require] (http://requirejs.org/), чтобы заказать их по мере необходимости. – Mathletics

+0

Это было для примера. В приложении реального мира у меня будет сотни файлов. Я не хочу требовать каждый файл везде, где он мне нужен, и установить порядок в списке глотков не может быть и речи. Вот почему '' app/clientScripts/**/*. Jsx'' для. Порядок загрузки файлов в Meteor (http://docs.meteor.com/#/full/structuringyourapp) является хорошим примером того, что я хочу сделать. – fabien

ответ

0

Вы можете использовать gulp-sort, чтобы заказать файлы после того, как gulp.src читает их.

Подсчет следов в пути как грубый способ определения глубины.

var sort = require('gulp-sort'); 
var path = require('path'); 

gulp.task('buildClientScripts', function() { 
    // Get all the js and jsx scripts 
    // Starts with the app.js file 
    return gulp.src([ 
     'app/app.js', 
     'app/clientScripts/**/*.jsx', 
     'app/clientScripts/**/*.js', 
    ]) 
    .pipe(sort(function(file1, file2) { 
     return countSlashes(file2) - countSlashes(file1); 

     function countSlashes(file) { 
     return file.path.split(path.sep).length - 1; 
     } 
    }) 
Смежные вопросы