2015-02-27 1 views
11

Я разрабатываю образец приложения, которое использует bower для управления зависимостями и gulp для его системы сборки.Как использовать gulp для конкатенации bower_components, которые содержат активы?

Я использовал плагин main-bower-files, чтобы скопировать все соответствующие файлы из каталога bower_components в каталог build/dist/bower_components.

Все это работает отлично, и я могу открыть index.html приложения, которое правильно указывает на каждый из этих файлов, и они правильно указывают на активы.

Мой следующий шаг - объединить bower_components, чтобы у меня был один CSS и один JS-файл вместе со всеми активами (шрифты, изображения и т. Д.). Я использовал gulp-useref для соединения всех компонентов, и, похоже, он работает хорошо.

Однако, некоторые из CSS и JS файлов сочетаясь использовать относительные пути для ссылки на активы, которые теперь неверен, так как все в одном файле:

  • FontAwesome
  • Bootstrap
  • и обычай составляющей антенны мы создаем

Есть ли стандартное решение для фиксации активов?

Нужно ли использовать глоток для обновления ссылок на ресурсы или, возможно, с помощью другого плагина?

+0

@DavinTryon - В соответствии с глотком черного списка (https://github.com/gulpjs/plugins/blob/master/src/blackList.json), он был занесен в черный список в пользу gulp-useref, поэтому я пытался использовать «лучшую практику» здесь. Как вы думаете, я должен все равно переключиться и использовать черный список? Благодаря! –

+0

gulp-useref выглядит как лучший вариант. –

+0

Я не могу ответить на конкретный вопрос, поскольку я использую SASS версии/таблицы стилей упомянутых вами компонентов (Bootstrap, Font Awesome), где вы обычно переопределяете переменную, чтобы определить, где находятся ваши активы, и использовать '' ' @ import''' из одного файла '' 'main.scss''', чтобы получить все в один файл. Поэтому, если переключение на SASS является вариантом, я могу сделать короткую запись о том, как проблема будет решена в этом случае. –

ответ

8

Используя gulp-replace plugin, мы сможем конкатенации bower_components assests.

Например:

var replace = require('gulp-replace'); 

gulp.task('fix-paths', ['minify'], function() { 
    gulp.src('public/css/site.css') 
     .pipe(replace('../', '../bower_components/bootstrap/dist/')) 
     .pipe(gulp.dest('public/css')); 
}); 
+0

Это точный тип ответа, который я искал, и в конечном итоге решение, к которому я пришел, также. Чтобы исправить пути, мне пришлось вручную обновить CSS и заменить пути плагином 'gulp-replace'. –

2

Я использую глоток INJECT плагин, чтобы придать сцепленный файл в формат HTML. Что-то вроде этого -

gulp.task('html', ['styles', 'vendor-js', 'templateCache', 'scripts'], function() { 
    gulp.src('./*.html') 
     .pipe(inject(gulp.src(['./dist/js/**/*.js']) 
      .pipe(angularFilesort()), { 
       'ignorePath': 'dist/js', 
       'addRootSlash': false, 
       'addPrefix': 'scripts' 
      })) 
     .pipe(inject(gulp.src(['./dist/vendors/**/*.js', '!./dist/vendors/less/less.js'], { 
      read: false 
     }), { 
      'name': 'vendors', 
      'ignorePath': 'dist/vendors', 
      'addRootSlash': false, 
      'addPrefix': 'vendors' 
     })) 
     .pipe(inject(gulp.src(['./dist/css/*.css'], { 
      read: false 
     }), { 
      'ignorePath': 'dist/css', 
      'addRootSlash': false, 
      'addPrefix': 'styles' 
     })) 
     .pipe(gulp.dest('dist')); 
}); 

Сообщите мне, если вам нужен код.

+0

Будьте осторожны, чтобы заметить параметры, которые я передаю, чтобы дать ему желаемый путь. – stripathi

+0

Это общий подход, который следует принять, но мой случай был немного более конкретным в том, что мне нужно было обновить пути к ресурсам для некоторых параметров bower_components, поэтому мне пришлось использовать плагин 'glup-replace ', как это было предложено принятый ответ. Спасибо за дополнительный ответ, хотя! –

0

Недавно я нашел ту же проблему, которая прошла через различные решения, и одним из них было заменить содержание css в этом ответе. После просмотра шрифта-awesome.css было ясно, что он относит относительный путь к папке шрифтов. То же самое было с bootstrap css. Решение просто теперь всегда следить за сохранением папки css и fonts на том же уровне и копировать данные. Даже включите здесь свои мини-файлы приложения. Одно место для всех DIST файлов делает жизнь легко

1

Для CSS, я предложил бы использовать gulp-rework, который оборачивает rework, который имеет ряд очень полезных плагинов.

Один из них - url, который предоставляет функцию обновления URL-адресов, содержащихся в CSS.

Пример, где это полезно, в CSS, который не содержит пути для замены; например

url (backgroundimage2.png)

Или вы хотите выполнить различные изменения URL-адреса на основе типа (например, только изображений, а не веб-шрифтов).

Может быть создана функция, которая проверяет тип актива; Следующий пример обрабатывает только файлы изображений:

// CSS 
    .pipe(cssFilter) 
    .pipe(rework(reworkUrl(function (url) { 
     // modifications on url, e.g. using http://medialize.github.io/URI.js/ 
     if (url.match(/[^/]+(jpg|jpeg|png|gif)$/)) 
     { 
      return '/lib/img/' + url.replace('../', ''); 
     } 
     else 
     { 
      return url; 
     } 

    })))