Open FMRobot opened 10 years ago
@ishaba, это было найдено мной на одном из форумов:
"К 30ку самообразование уже надоедает. У меня родственник - переводчик. Он за год английский освоил и работает. Дак вот, английский из моды не выйдет и не изменится. Гражданский летчик на другой тип судна переучивается после выпуска и летает всю жизнь часы налетывает, а потом командир. А программист? Постоянно догоняет последний вагон поезда."
Используя gulp, мы уменьшили количество строк в нашем коде с 52 до 30.
wtf? Это то преимущество ради которого нужно переходить на Gulp?
Вы должны были заметить, что хотя нам и потребовалось одинаковое количество плагинов, два из них различаются, несмотря на то, что мы выполняем совершенно одинаковую задачу в первом и во втором примерах.
А это вообще не преимущество, а огромный недостаток, что нужно мало того что несовместимые, да ещё и другие плагины?
Если не вдаваться в подробности, потоковая передача дает вам больше контроля над происходящим и избавляет вас от промежуточных папок и файлов. Вы передаете файл в gulp, а затем сохраняете результат другой файл. Всё очень просто.
И что хорошего в этом? Где мощь и гибкость Grunt через который можно что угодно сделать, хоть песню в WinAmp'e запустить по успешной компиляции?
Вывод: Gulp - очередная новомодная хипстерская фигня.
@delka это всего лишь значит что тебя всем устраивает Grunt, и Gulp тебе не нужен =)
Мне вообще кажется, что Make-архитектура плохо подходит для сборки ассетов. Как минимум потому, что есть большая разница в работе во время разработки и во время деплоя на продакшен.
Так что мне гораздо ближе Assets Pipeline из Рельс или аналог для ноды — mincer.
@delka
Используя gulp, мы уменьшили количество строк в нашем коде с 52 до 30.
wtf? Это то преимущество ради которого нужно переходить на Gulp?
нет, но согласись это приятнее и выгоднее
А это вообще не преимущество, а огромный недостаток, что нужно мало того что несовместимые, да ещё и другие плагины?
Чем же это недостаток, это ведь обычная издержка при смене инструмента.
И что хорошего в этом?
Раскрой, пожалуйста свой вопрос.
Где мощь и гибкость Grunt через который можно что угодно сделать, хоть песню в WinAmp'e запустить по успешной компиляции?
Галп гибче и привычнее засчёт императивного подхода. В том числе можно сделать, что угодно после успешной компиляции, а не только песню запустить.
Вывод: Gulp - очередная новомодная хипстерская фигня.
не будь так строг к новичку Галпу
Вывод: Gulp - очередная новомодная хипстерская фигня.
Это вы не разобрались. В этой статье не указан главный плюс Гульпа — колоссальное снижение времени сборки. Иногда до 10 раз.
Кстати, мы недавно столкнулись с интересными вопросом по архитектуре Гульпа — как со всеми этими потоками передавать карты кода (source map)?
Решили пока работать с заинлайненными картами в комментарии-аннотации, но, например, Сасс для ноды инлайнить не умеет — нужно патчить Сасс для Гульпа.
@ai @delka для меня огромный плюс gulp — CommonJS вместо JSON. Не нужно больше разбивать одну задачу на кучу конфигов для плагинов. Ну и то, что API nodejs не скрывается за огромной абстракцией меня тоже очень радует.
Главный плюс Гульпа — колоссальное снижение времени сборки. Иногда до 10 раз.
Вот это уже аргумент. Правда очень слабый, не стоящий того чтоб переходить. Ну будет у меня сборка не 4 секунды, а полсекунды-секунда. Это мелочь. А через полгода - обновится или Grunt и станет быстрее, или железо у меня в ноуте - и тоже будет секунда.
А через полгода - обновится или Grunt и станет быстрее, или железо у меня в ноуте - и тоже будет секунда.
В Гранте-то проблема не по процессору, а из-за постоянной записи на диск. В ближайшей перспективе SSD ускоряться не будет, да и постоянно ненужная запись на диск плохо для здоровья SSD.
Например, секундная задержка компиляции — это очень много во время разработки. Это секунда между вводом кода и проверкой в браузере.
Я согласен, что плюсов не так много, но и переход очень дешёв. Консерватизм очень опасен для программиста. Одна утилита экономит 10 %, вторая — 8 %, третья — 12 %, а в итоге все уже уехали на поезде в мир новой архитектуры ;).
@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
Кстати, мы недавно столкнулись с интересными вопросом по архитектуре Гульпа — как со всеми этими потоками передавать карты кода (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 %>'
]
},
Или даже можно вообще вот так:
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');
...
Парсер неосилил, вот пример: аккуратного grunt-файла: https://github.com/ideus-interactive/html-framework/blob/master/dev/Gruntfile.js
@ai @delka для меня огромный плюс gulp — CommonJS вместо JSON. Не нужно больше разбивать одну задачу на кучу конфигов для плагинов.
Ну так настройки для плагинов же можно вынести во внешние файлы!
во-первых, Антон насколько я понял имеет ввиду другое — ситуация, когда ты находишь плагины, пишешь для них неудобные json-конфиги с тасками, которые тебе на самом деле не нужны, а необходимы лишь косвенно. и только потом пишешь необходимые тебе build, release и тп таски — это всё раздражает (@shuvalov-anton, я ведь правильно понял?)
во-вторых, такой способ настройки тасков я встречал только у линтеров, а их не больше пары десятков
https://github.com/ideus-interactive/html-framework/blob/master/dev/Gruntfile.js
json-конфиги всё равно никуда не исчезли https://github.com/ideus-interactive/html-framework/tree/master/dev/tasks
Т.е. у вас есть отдельная папка /tasks/ и в неё закидывайте все настройки для плагинов: https://github.com/ideus-interactive/html-framework/tree/master/dev/tasks А gruntfile будет маленький и чистенький.
@matmuchrapna @delka Ага, я об этом же. Допустим, у меня есть задача — компиляция пользовательских данных из БД + assets в статический сайт. Получается, что для GruntJS у меня эта задача должна быть декомпозированна на набор плагинов и конфиги для них, в gulp же это выглядит более императивно, без лишней декомпозиции, в каких-то местах, возможно, будет проще использовать NodeJS а не плагины для Gulp, но в целом все будет выглядеть достаточно цельно.
@delka ну да, я практически, так и делаю с Grunt. Плюс файл с конфигом, где хранятся пути к директориям и те настройки, которые вероятнее всего будут меняться.
Вы так говорите о нехватке плагинов, как будто плагины Гранта сложный проект. Обычно плагин — просто обвязка в один небольшой файл, которую можно написать за вечер.
Рано вы раздухарились на холивар. Gulp сырой, но интересный. Пока я вижу только вау-эффект от node-way конфигов и прироста в скорости. Появление Gulp'а хорошо тем, что теперь будет какая то конкуренция. Я бы подождал ответа от Grunt'a.
Вопрос, так как не нашел решения.
Как обстоят дела с отладкой ошибок, что бы не было необходимости заново запускать Gult (к примеру при ошибке компилирования Less), а спокойненько вывести оповещение через тот же gult-notify?
может ссылку на источник.
Заранее благодарю.
@prBigBrother можно так:
var stream = gulp.src(...)...;
stream.on('error', function(err) {
if(err) console.log(''+err);
});
@shuvalov-anton можно поподробнее на тему var stream = gulp.src(...)...;
@prBigBrother gulp основанн на стимах ноды, стимы — инстанс EventEmitter, соответственно, в каждом стиме(а плагины, тоже стримы) можно подписаться на событие error
, и обрабатывать ошибку так, как хочется, тo eсть на псевдо-коде как-то так:
gulpLess.on('error', function(err) {
if(err) gulpNotify(''+err);
});
К 30ку самообразование уже надоедает.
@korochinsky это скорее очередной шаг для освоения магии фронтэнда Node.js разработчиком. Вот в browserify.org все понятно, а с этим require.js нужно разбираться, чего-то читать. Главное в gulp, это то - что он работает по "родному", в стиле Node. Поскольку после 30 ...
а подскажите. не хочет работать
gulp.task('less', function () {
gulp.src('less/main.less')
.pipe(less({
sourceMap: true,
sourceMapFilename: "Имя файла"
}))
.pipe(gulp.dest('./css'));
});
не создает файл, а добавляет в конец css. читал что не работает с несколькими файлами сразу но это как то странно
Добавляем в задачу по стилям этот код:
.on('error', function(error) { console.log(error); this.end(); })
Не успел я приобщиться к Grunt'у, как все уже перешли на Gulp, весело живем:)