gulp-bem / gulp-bem-bundle-builder

DEPRECATED repository, moved to https://github.com/bem/gulp-bem/tree/master/packages/gulp-bem-bundle-builder
Other
3 stars 1 forks source link

Добавить одиночный таргет #14

Open belozer opened 7 years ago

belozer commented 7 years ago

Сейчас на вход билдера подаётся объект с тагретами. Но если разбивать gulpfile на таски - это не совсем удобно.

// Сборка стилей
gulp.task('build:css', () => {
  return bundler('bem/bundles/*')
  .pipe(builder({ css: bundle =>
    require('gulp-bem-preset-css')(bundle, {svgPaths: ['bem/icons']})
  }))
  .on('error', console.error)
  .pipe(gulp.dest('./public/bundles/'))
  .pipe(debug({title: 'public bundles'}))
})

Лучше было бы так

// Сборка стилей
gulp.task('build:css', () => {
  return bundler('bem/bundles/*')
  .pipe(builder(bundle =>require('gulp-bem-preset-css')(bundle, {svgPaths: ['bem/icons']})))
  .on('error', console.error)
  .pipe(gulp.dest('./public/bundles/'))
  .pipe(debug({title: 'public bundles'}))
})

так это без пресетов выглядит

// Сборка стилей
gulp.task('build:css', () => {
  return bundler('bem/bundles/*')
  .pipe(builder(bundle => bundle.src('css')))
  .on('error', console.error)
  .pipe(gulp.dest('./public/bundles/'))
  .pipe(debug({title: 'public bundles'}))
})
belozer commented 7 years ago

или даже так

// Сборка стилей
gulp.task('build:css', () => {
  return bundler('bem/bundles/*')
  .pipe(builder('css'))
  .on('error', console.error)
  .pipe(gulp.dest('./public/bundles/'))
  .pipe(debug({title: 'public bundles'}))
})

или можно вот так

// Сборка стилей
gulp.task('build:css', () => {
  return bundler('bem/bundles/*')
  .pipe(builder({tech: 'css'})) // techs для массива
  .on('error', console.error)
  .pipe(gulp.dest('./public/bundles/'))
  .pipe(debug({title: 'public bundles'}))
})
yar-usenko commented 7 years ago

Тогда bundler и builder можно обеденить в 1 плагин и, судя по внутриностям, добавить кеширование библиотек, как в enb (чтоб он не обходил их каждый раз при сборке)

belozer commented 7 years ago

Если объединить bundler и builder, как предложил @yar-usenko, можно получить например такое API

// Сборка стилей
gulp.task('build:css', () => {
  return bundler('bem/bundles/*') // Все технологиий
  .pipe(/*...*/)
  .on('error', console.error)
  .pipe(gulp.dest('./public/bundles/'))
  .pipe(debug({title: 'public bundles'}))
})
// Сборка стилей
gulp.task('build:css', () => {
  return bundler('bem/bundles/*', {tech: 'css'}) // только CSS технологии
  .pipe(/*...*/)
  .on('error', console.error)
  .pipe(gulp.dest('./public/bundles/'))
  .pipe(debug({title: 'public bundles'}))
})
// Сборка стилей
gulp.task('build:css', () => {
  return bundler('bem/bundles/*', 'css') // Или такой вариант
  .pipe(/*...*/)
  .on('error', console.error)
  .pipe(gulp.dest('./public/bundles/'))
  .pipe(debug({title: 'public bundles'}))
})

upd.

// Сборка стилей
gulp.task('build:css', () => {
  return bundler('bem/bundles/*').tech('css') // Или так
  .pipe(/*...*/)
  .on('error', console.error)
  .pipe(gulp.dest('./public/bundles/'))
  .pipe(debug({title: 'public bundles'}))
})
belozer commented 7 years ago

@zxqfox что скажешь?

qfox commented 7 years ago

@belozer можно, конечно ;-) Но нужно ли?

belozer commented 7 years ago

@zxqfox ну с чем я сейчас столкнулся - так это с излишком необходимости объекта для таргетов на вход билдера, когда таргет всего один. https://github.com/gulp-bem/gulp-bem-bundle-builder/issues/14#issue-191526977 https://github.com/gulp-bem/gulp-bem-bundle-builder/issues/14#issuecomment-262785145

belozer commented 7 years ago

Про необходимость в разбивке бандлов по таскам я описал здесь