Что такое чистый фронт-рабочий процесс с беседкой и gulp?

Я действительно пытаюсь понять, как правильно устанавливать и обновлять клиентские ресурсы от сторонних поставщиков. Все, что я действительно хочу сделать, это получить текущие версии и скопировать готовые файлы в фиксированное место. Лучшее, что я смог придумать до сих пор, - это уродливая вещь:

gulp.task('bower', ['clean','load'], function(){
    var bowerFilesToMove = [
        'angular*/*',
        'bootstrap/dist/*',
        'fontawesome/*',
        'jasny-bootstrap/dist/*',
        'jcrop/css/*',
        'jcrop/js/*',
        'jquery/dist/*',
        'jquery-align-column/*',
        'jquery-autosize/*',
        'jqueryui/ui/minified/*',
        'moment/min/*',
        'select2/*',
        'underscore/*',
    ];

    bowerFilesToMove.forEach(function(filespec){
        gulp.src('./bower_components/'+filespec+'.css')
            .pipe(flatten())
            .pipe(gulp.dest('public/vendor/css'));
    });

    bowerFilesToMove.forEach(function(filespec){
        gulp.src('./bower_components/'+filespec+'.js')
            .pipe(flatten())
            .pipe(gulp.dest('public/vendor/js'));
    });

    bowerFilesToMove.forEach(function(filespec){
        gulp.src('./bower_components/'+filespec+'.map')
            .pipe(flatten())
            .pipe(gulp.dest('public/vendor/js'));
    });

    gulp.src('./bower_components/jqueryui/themes/*')
        .pipe(gulp.dest('public/vendor/css/themes'));

    gulp.src('./bower_components/bootstrap/dist/fonts/*')
        .pipe(gulp.dest('public/vendor/fonts'));

    gulp.src('./bower_components/fontawesome/fonts/*')
        .pipe(gulp.dest('public/vendor/fonts'));
});

gulp.task('clean', function(){
    return gulp.src('./public/vendor')
        .pipe(clean({force: true}));
});

gulp.task('load', function(){
    return bower();
});

Я читал много, чтобы попытаться выяснить лучшие практики и инструменты для развертывания клиентов, но только что запутался. Я уверен, что интерфейс будет сложнее, чем просто выбирать пакеты и запускать "композиторское обновление", но это кажется довольно глупым. Каковы некоторые лучшие способы справиться с этим?

Ответ 1

Всякий раз, когда я работаю над приложением на уровне производства, а не вручную обрабатываю копирование определенных активов поставщика в каталог, я разрешаю моему процессу сборки просматривать мои соответствующие файлы разметки, ссылающиеся на теги <script> и выяснить, что нужно скопировать. Это позволяет избежать копирования или развертывания сценариев, которые фактически не используются.

Если вы хотите взглянуть на то, как мы в команде Yeoman используем этот тип настройки, посмотрите здесь наш Gulp файл, который также использует задачу useref:

https://github.com/yeoman/generator-gulp-webapp/blob/master/app/templates/gulpfile.js#L27