FrontenderMagazine / no-need-to-grunt-take-a-gulp-of-fresh-air

No Need To Grunt, Take A Gulp Of Fresh Air
http://travismaynard.com/writing/no-need-to-grunt-take-a-gulp-of-fresh-air
1 stars 0 forks source link

Комментарии #1

Open FMRobot opened 10 years ago

ishaba commented 10 years ago

Не успел я приобщиться к Grunt'у, как все уже перешли на Gulp, весело живем:)

korochinsky commented 10 years ago

@ishaba, это было найдено мной на одном из форумов:

"К 30ку самообразование уже надоедает. У меня родственник - переводчик. Он за год английский освоил и работает. Дак вот, английский из моды не выйдет и не изменится. Гражданский летчик на другой тип судна переучивается после выпуска и летает всю жизнь часы налетывает, а потом командир. А программист? Постоянно догоняет последний вагон поезда."

ihorzenich commented 10 years ago

Используя gulp, мы уменьшили количество строк в нашем коде с 52 до 30.

wtf? Это то преимущество ради которого нужно переходить на Gulp?

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

А это вообще не преимущество, а огромный недостаток, что нужно мало того что несовместимые, да ещё и другие плагины?

Если не вдаваться в подробности, потоковая передача дает вам больше контроля над происходящим и избавляет вас от промежуточных папок и файлов. Вы передаете файл в gulp, а затем сохраняете результат другой файл. Всё очень просто.

И что хорошего в этом? Где мощь и гибкость Grunt через который можно что угодно сделать, хоть песню в WinAmp'e запустить по успешной компиляции?

Вывод: Gulp - очередная новомодная хипстерская фигня.

A commented 10 years ago

@delka это всего лишь значит что тебя всем устраивает Grunt, и Gulp тебе не нужен =)

ai commented 10 years ago

Мне вообще кажется, что Make-архитектура плохо подходит для сборки ассетов. Как минимум потому, что есть большая разница в работе во время разработки и во время деплоя на продакшен.

Так что мне гораздо ближе Assets Pipeline из Рельс или аналог для ноды — mincer.

iamstarkov commented 10 years ago

@delka

Используя gulp, мы уменьшили количество строк в нашем коде с 52 до 30.

wtf? Это то преимущество ради которого нужно переходить на Gulp?

нет, но согласись это приятнее и выгоднее


А это вообще не преимущество, а огромный недостаток, что нужно мало того что несовместимые, да ещё и другие плагины?

Чем же это недостаток, это ведь обычная издержка при смене инструмента.


И что хорошего в этом?

Раскрой, пожалуйста свой вопрос.


Где мощь и гибкость Grunt через который можно что угодно сделать, хоть песню в WinAmp'e запустить по успешной компиляции?

Галп гибче и привычнее засчёт императивного подхода. В том числе можно сделать, что угодно после успешной компиляции, а не только песню запустить.


Вывод: Gulp - очередная новомодная хипстерская фигня.

не будь так строг к новичку Галпу

ai commented 10 years ago

Вывод: Gulp - очередная новомодная хипстерская фигня.

Это вы не разобрались. В этой статье не указан главный плюс Гульпа — колоссальное снижение времени сборки. Иногда до 10 раз.

ai commented 10 years ago

Кстати, мы недавно столкнулись с интересными вопросом по архитектуре Гульпа — как со всеми этими потоками передавать карты кода (source map)?

Решили пока работать с заинлайненными картами в комментарии-аннотации, но, например, Сасс для ноды инлайнить не умеет — нужно патчить Сасс для Гульпа.

A commented 10 years ago

@ai @delka для меня огромный плюс gulp — CommonJS вместо JSON. Не нужно больше разбивать одну задачу на кучу конфигов для плагинов. Ну и то, что API nodejs не скрывается за огромной абстракцией меня тоже очень радует.

ihorzenich commented 10 years ago

Главный плюс Гульпа — колоссальное снижение времени сборки. Иногда до 10 раз.

Вот это уже аргумент. Правда очень слабый, не стоящий того чтоб переходить. Ну будет у меня сборка не 4 секунды, а полсекунды-секунда. Это мелочь. А через полгода - обновится или Grunt и станет быстрее, или железо у меня в ноуте - и тоже будет секунда.

ai commented 10 years ago

А через полгода - обновится или Grunt и станет быстрее, или железо у меня в ноуте - и тоже будет секунда.

В Гранте-то проблема не по процессору, а из-за постоянной записи на диск. В ближайшей перспективе SSD ускоряться не будет, да и постоянно ненужная запись на диск плохо для здоровья SSD.

Например, секундная задержка компиляции — это очень много во время разработки. Это секунда между вводом кода и проверкой в браузере.

Я согласен, что плюсов не так много, но и переход очень дешёв. Консерватизм очень опасен для программиста. Одна утилита экономит 10 %, вторая — 8 %, третья — 12 %, а в итоге все уже уехали на поезде в мир новой архитектуры ;).

iamstarkov commented 10 years ago

@ai @delka @shuvalov-anton вот кстати этот твит:

Gulp Sass compile, auto prefix and minify: 902ms. Grunt Sass compile, auto prefix and minify: 24.152s. Exact same set up. cc/@wearefractal

ihorzenich commented 10 years ago

Кстати, мы недавно столкнулись с интересными вопросом по архитектуре Гульпа — как со всеми этими потоками передавать карты кода (source map)?

И это только первая проблема. А многих плагинов под него просто нет и не факт что будут. Нет никакого лёгкого перехода. А переход должен быть только по очень веским причинам. Хороший консерватизм - полезен.

@ai @delka для меня огромный плюс gulp — CommonJS вместо JSON. Не нужно больше разбивать одну задачу на кучу конфигов для плагинов.

Ну так настройки для плагинов же можно вынести во внешние файлы!

CSSLint

csslint: {
  main: {
    options: {
      csslintrc: '.csslintrc'
    },
    src: '<%= compass.main.options.cssDir %>' + '/*.css'
  }
},

JSHint

jshint: {
  options: {
    jshintrc: '.jshintrc'
  },
  files: [
    'Gruntfile.js',
    '<%= js_files %>'
  ]
},
A commented 10 years ago

@delka https://npmjs.org/package/gulp-grunt

ihorzenich commented 10 years ago

Или даже можно вообще вот так:

gruntfile.js

// Обязательная обёртка
module.exports = function(grunt) {

  // Конфигурация
  grunt.initConfig({
    // Пути к файлам и папкам JS
    configDir: 'config',
    sassDir: 'sass',
    sassFiles: '<%= sassDir %>' + '/main.scss',
    cssDir: '../css',
    jsSourceFiles: 'js/main.js',
    jsSourcePlugins: 'js/plugins/**/*.js',
    jsResultFile: '../js/scripts.js',
  });

  // Загрузка конфигурации к задачам из отдельных файлов
  grunt.loadTasks('tasks');
...
ihorzenich commented 10 years ago

Парсер неосилил, вот пример: аккуратного grunt-файла: https://github.com/ideus-interactive/html-framework/blob/master/dev/Gruntfile.js

iamstarkov commented 10 years ago

@ai @delka для меня огромный плюс gulp — CommonJS вместо JSON. Не нужно больше разбивать одну задачу на кучу конфигов для плагинов.

Ну так настройки для плагинов же можно вынести во внешние файлы!

во-первых, Антон насколько я понял имеет ввиду другое — ситуация, когда ты находишь плагины, пишешь для них неудобные json-конфиги с тасками, которые тебе на самом деле не нужны, а необходимы лишь косвенно. и только потом пишешь необходимые тебе build, release и тп таски — это всё раздражает (@shuvalov-anton, я ведь правильно понял?)

во-вторых, такой способ настройки тасков я встречал только у линтеров, а их не больше пары десятков

iamstarkov commented 10 years ago

https://github.com/ideus-interactive/html-framework/blob/master/dev/Gruntfile.js

json-конфиги всё равно никуда не исчезли https://github.com/ideus-interactive/html-framework/tree/master/dev/tasks

ihorzenich commented 10 years ago

Т.е. у вас есть отдельная папка /tasks/ и в неё закидывайте все настройки для плагинов: https://github.com/ideus-interactive/html-framework/tree/master/dev/tasks А gruntfile будет маленький и чистенький.

A commented 10 years ago

@matmuchrapna @delka Ага, я об этом же. Допустим, у меня есть задача — компиляция пользовательских данных из БД + assets в статический сайт. Получается, что для GruntJS у меня эта задача должна быть декомпозированна на набор плагинов и конфиги для них, в gulp же это выглядит более императивно, без лишней декомпозиции, в каких-то местах, возможно, будет проще использовать NodeJS а не плагины для Gulp, но в целом все будет выглядеть достаточно цельно.

A commented 10 years ago

@delka ну да, я практически, так и делаю с Grunt. Плюс файл с конфигом, где хранятся пути к директориям и те настройки, которые вероятнее всего будут меняться.

ai commented 10 years ago

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

ghost commented 10 years ago

Рано вы раздухарились на холивар. Gulp сырой, но интересный. Пока я вижу только вау-эффект от node-way конфигов и прироста в скорости. Появление Gulp'а хорошо тем, что теперь будет какая то конкуренция. Я бы подождал ответа от Grunt'a.

prBigBrother commented 10 years ago

Вопрос, так как не нашел решения.

Как обстоят дела с отладкой ошибок, что бы не было необходимости заново запускать Gult (к примеру при ошибке компилирования Less), а спокойненько вывести оповещение через тот же gult-notify?

может ссылку на источник.

Заранее благодарю.

A commented 10 years ago

@prBigBrother можно так:

var stream = gulp.src(...)...;
stream.on('error', function(err) {
  if(err) console.log(''+err);
});
prBigBrother commented 10 years ago

@shuvalov-anton можно поподробнее на тему var stream = gulp.src(...)...;

A commented 10 years ago

@prBigBrother gulp основанн на стимах ноды, стимы — инстанс EventEmitter, соответственно, в каждом стиме(а плагины, тоже стримы) можно подписаться на событие error, и обрабатывать ошибку так, как хочется, тo eсть на псевдо-коде как-то так:

gulpLess.on('error', function(err) {
  if(err) gulpNotify(''+err);
});
ghost commented 10 years ago

К 30ку самообразование уже надоедает.

@korochinsky это скорее очередной шаг для освоения магии фронтэнда Node.js разработчиком. Вот в browserify.org все понятно, а с этим require.js нужно разбираться, чего-то читать. Главное в gulp, это то - что он работает по "родному", в стиле Node. Поскольку после 30 ...

blanzh commented 10 years ago

а подскажите. не хочет работать gulp.task('less', function () { gulp.src('less/main.less') .pipe(less({ sourceMap: true, sourceMapFilename: "Имя файла" })) .pipe(gulp.dest('./css')); });

не создает файл, а добавляет в конец css. читал что не работает с несколькими файлами сразу но это как то странно

krontill commented 9 years ago

Добавляем в задачу по стилям этот код:

.on('error', function(error) { console.log(error); this.end(); })

http://github.shvalyov.ru/markup-blueprint/#22

jmas commented 8 years ago

http://blog.keithcirkel.co.uk/why-we-should-stop-using-grunt/