Построение с Глоток

Оптимизация свои активы сайта и тестирования дизайна в различных браузерах, конечно, не самое веселое частью процесса проектирования.К счастью, он состоит из повторяющихся заданий, которые могут быть автоматизированы с правильными инструментами, чтобы повысить эффективность работы вашего .

Глоток является система сборки, которые могут улучшить, как вы разрабатываем сайты за счет автоматизации общих задач, таких как составление препроцессированный CSS, minifying наличие и перезагрузки браузера.В этой статье мы увидим, как вы можете использовать Глоток изменить свой workflow, что делает его более быстрым и эффективным .

Что такое Глоток

Gulp 1 является система сборки, означает, что вы можете использовать его для автоматизации общих задач в развитии веб-сайта.Он построен на Node.js, и оба источника Глоток и ваш Глоток за файл, где вы определяете задачи, которые написаны на JavaScript (или что-то вроде CoffeeScript, если вы того пожелаете).Это делает его идеальным, если вы фронтальный Разработчик: Вы можете написать задачи нибудь вкусненькое свой наличие и CSS, анализировать свои шаблоны и скомпилировать меньше, когда файл был изменен (и это только несколько примеров), а вязык, который вы, вероятно, уже знакомы с .

Глоток сам по себе не действительно много, но огромное количество плагинов доступны, которые вы видите на плагины page 2 либо путем поиска gulpplugin по НПМ.Например, есть плагины для запустить JSHint 3 , компилировать ваш CoffeeScript 4 , запустить Mocha tests 5 и даже обновить версию number 6 .

Другие инструменты для сборки, такие, как Grunt 7 и, в последнее время, Broccoli 8 , но я считаю, Глоток быть выше (смраздел “Почему Глоток?” ниже).Я составил длинный список строительных инструментов, написанных на JavaScript 9 .

Глоток является открытым исходным кодом и может быть узнать на GitHub 10 .

Установка Gulp

Установка Глоток довольно легко.Во-первых, необходимо установить пакет глоток во всем мире:

npm install -g gulp

Затем установите его в свой проект:

npm install --save-dev gulp

Использование Gulp

Давайте создадим глоток задачу Минимизировать один из наших файлов JavaScript.Создайте файл с именем gulpfile.js.Это где вы будете определять ваши глоток задачи, которые будут выполняться с использованием gulp Команда .

Поставьте следующее в вашем gulpfile.js файла:

var gulp = require('gulp'),
   uglify = require('gulp-uglify');

gulp.task('minify', function () {
   gulp.src('js/app.js')
      .pipe(uglify())
      .pipe(gulp.dest('build'))
});

Установка gulp-uglify по НПМ работает npm install --save-dev gulp-uglify, а затем запустить задачу, запустив gulp minify.Если предположить, что у вас есть файл с именем app.js в js каталог, новая app.js будет создан в директории для сборки, содержащей сжатый содержимое js/app.js .

Что на самом деле произошло здесь, хотя

Мы делаем несколько вещей в нашей gulpfile.js файла.Во-первых, мы загружаем в gulp и gulp-uglify модули:

var gulp = require('gulp'),
    uglify = require('gulp-uglify');

Тогда, мы определим задачу с именем minify, которые, при запуске будет вызывать функцию, представленную в качестве второго аргумента:

gulp.task('minify', function () {

});

Наконец, — и это, где это становится сложнее — мы определяем, что наша задача должна делать:

gulp.src('js/app.js')
   .pipe(uglify())
   .pipe(gulp.dest('build'))

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

Streams

Потоки позволяют пройти некоторые данные через ряд, как правило, небольших функций, которые будут изменять данные, а затем передать измененные данные в следующую функцию .

В приведенном выше примере, gulp.src() функция принимает строку, которая соответствует файл или несколько файлов (известный как “Глоб”), и создает поток объектов, представляющих эти файлы.Затем они прошли (или водопроводной) до uglify() функции, которая принимает объекты файл и возвращает новые файловые объекты с минимизированы источника.Это выход переправлена ​​gulp.dest() функции, которая сохраняет измененные файлы .

В виде диаграммы, это то, что происходит:

Stream diagram.
Когда есть только одна задача, функция не действительно много.Тем не менее, рассмотрим следующий код:

gulp.task('js', function () {
   return gulp.src('js/*.js')
      .pipe(jshint())
      .pipe(jshint.reporter('default'))
      .pipe(uglify())
      .pipe(concat('app.js'))
      .pipe(gulp.dest('build'));
});

Чтобы запустить это самостоятельно, установите gulp, gulp-jshint, gulp-uglify и gulp-concat .

Эта задача будет принимать все файлы, соответствующие js/*.js (т.е. все файлы JavaScript из js каталог), запустите JSHint на них и вывод результата, уродовать каждый файл, а затем объединить их, сохраняя их в build/app.js.В виде диаграммы:

Stream diagram.
Если вы знакомы с Грантом, то вы заметите, что это очень отличается от, как Грунт делает это.Грунт не использует потоки;Вместо этого, он принимает файлы, проходит одна задача на них и сохраняет их в новые файлы, повторяя весь процесс для каждой задачи.Это приводит к большим хитов в файловой системе,что делает его медленнее, чем Глоток .

Для более полного чтения на потоках, проверить “ поток Handbook 11 .”

Gulp.src ()

gulp.src() функция принимает универсальный символ (т.е. строка, соответствующая одному или более файлов) или массив шариков и возвращает поток, который может быть передан в плагины .

Глоток использует узел-glob 12 получить файлы из Глоб или шарики вы укажете.Проще всего объяснить на примерах:

  • js/app.jsМатчи точное file
  • js/*.jsМатчи все файлы, оканчивающиеся на .js в js каталог only
  • js/**/*.jsМатчи все файлы, оканчивающиеся на .js в js каталог и все его дочерние directories
  • !js/app.jsИсключает js/app.js от матча, что полезно, если вы хотите, чтобы соответствовать все файлы в каталоге для конкретного file
  • *.+(js|css)Матчи всех файлов в корневом каталоге, заканчивающиеся на .js или .css

Другие функции доступны, но они обычно не используются в залпом.Проверьте Out The Minimatch 13 документация для более .

Давайте предположим, что мы каталог с именем js, содержащая файлы JavaScript, некоторые уменьшенная и некоторые нет, и мы хотим, чтобы создать задачу для Минимизировать файлы, которые еще не уменьшенная.Чтобы сделать это, мы сопоставляем все файлы JavaScript в каталоге, а затем исключить все файлы, оканчивающиеся на .min.js:

gulp.src(['js/**/*.js', '!js/**/*.min.js'])

Определение Tasks

Чтобы определить задачу, используйте gulp.task() функцию.Когда вы определяете простой задачей, эта функция принимает два параметра: имя задачу и функции для работы .

gulp.task('greet', function () {
   console.log('Hello world!');
});

Летние gulp greet приведет к “Привет, мир” печатается на консоль .

Задача может быть также список других задач.Предположим, мы хотим определить build задание, которое проходит три другие задачи, css, js и imgs.Мы можем сделать это, указав массив задач, вместо функции:

gulp.task('build', ['css', 'js', 'imgs']);

Они будут работать в асинхронном режиме, так что вы не можете предположить, что css задача будет закончит работу к тому времени, js начинается — на самом деле, это, вероятно, не будет иметь.Чтобы убедиться, что задача завершения работы, прежде чем другая задача выполняется, вы можете указать зависимости путем объединения массива задач с функцией.Например, чтобы определить css задачу, которая проверяет, что greet задача завершения работы перед выполнением, вы можете сделать это:

gulp.task('css', ['greet'], function () {
   // Deal with CSS here
});

Теперь, когда вы запустите css задачи, Глоток будет выполнять greet задание, подождите, пока он закончить, а затем вызвать функцию, вы указали .

По умолчанию Tasks

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

gulp.task('default', function () {
   // Your default task
});

Plugins

Вы можете использовать несколько плагинов — более 600, на самом деле — с залпом.Вы найдете их в списке на плагинов page 14 либо путем поиска gulpplugin по НПМ.Некоторые плагины помечены “gulpfriendly”;это не плагины, но предназначен для работы с глотком.Будьте в курсе при поиске непосредственно на НПМ, что вы не будете в состоянии видеть, был ли черный список плагина (прокрутка нижней части страницы плагинов, вы увидите, что многие из них) .

Большинство плагинов довольно проста в использовании, имеют хорошую документацию и выполнить таким же образом (по конвейеру поток файловых объектов к нему).Они то, как правило, изменять файлы (хотя некоторые, такие как валидаторы, не будет), и возвратить новые файлы, которые будут передаваться следующему плагина .

Давайте расширим наш js задачи из ранее:

var gulp = require('gulp'),
    jshint = require('gulp-jshint'),
    uglify = require('gulp-uglify'),
    concat = require('gulp-concat');

gulp.task('js', function () {
   return gulp.src('js/*.js')
      .pipe(jshint())
      .pipe(jshint.reporter('default'))
      .pipe(uglify())
      .pipe(concat('app.js'))
      .pipe(gulp.dest('build'));
});

Мы используем три плагины здесь, глоток-jshint 15 , глоток-uglify 16 и глоток-concat 17 .Вы можете увидеть в README файлы для плагинов, что они очень прост в использовании;варианты, но по умолчанию обычно достаточно .

Вы могли заметить, что плагин JSHint вызывается дважды.Это потому, что первая линия работает JSHint на файлы, которые только придает jshint недвижимость в файловых объектов без вывода чего-либо.Вы можете прочитать jshint свойства самостоятельно или передать его JSHint репортера по умолчанию или в другой репортер, таких как jshint-stylish 18 .

Два других плагинов яснее: uglify() функция minifies код, а concat('app.js') функция объединяет все файлы в один файл с именем app.js .

Глоток-нагрузки plugins

Модуль, который я нахожу очень полезным является глотком ограждающих плагины, которые автоматически загружает все плагины глоток из своего package.json файла и придает им объекта.Наиболее основы использования выглядит следующим образом:

var gulpLoadPlugins = require('gulp-load-plugins'),
    plugins = gulpLoadPlugins();

Вы можете положить, что все в одной строке (var plugins = require('gulp-load-plugins')();), но я не большой поклонник встроенного require называет .

После запуска этого кода, plugins объект будет содержать ваши плагины, верблюжьей кожуха их имена (например, gulp-ruby-sass будет загружена до plugins.rubySass).Вы можете использовать их, как будто они были обязаны нормально.Например, наш js задача еще до будет сводится к следующему:

var gulp = require('gulp'),
    gulpLoadPlugins = require('gulp-load-plugins'),
    plugins = gulpLoadPlugins();

gulp.task('js', function () {
   return gulp.src('js/*.js')
      .pipe(plugins.jshint())
      .pipe(plugins.jshint.reporter('default'))
      .pipe(plugins.uglify())
      .pipe(plugins.concat('app.js'))
      .pipe(gulp.dest('build'));
});

Это предполагает package.json файл, который что-то вроде следующего:

{
   "devDependencies": {
      "gulp-concat": "~2.2.0",
      "gulp-uglify": "~0.2.1",
      "gulp-jshint": "~1.5.1",
      "gulp": "~3.5.6"
   }
}

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

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

Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров

Comments are closed.