Статьи

Использование Gulp для автоматизации WordPress

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

Gulp — система потоковой сборки. Возможно, вы уже слышали и использовали ворчание. Но в последнее время глоток становится все более популярным. Он может делать удивительные вещи, такие как компиляция LESS / Sass, JS-файлы, живая перезагрузка веб-страниц и многое другое.

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

Для начала вам нужно установить Node.js (v0.10.30 или выше). Я лично предпочитаю использовать Node Version Manager (NVM), чтобы я мог переключаться между различными версиями Node.js на моей машине для разработки.

Первое, что вам нужно сделать, это установить gulp. Используйте следующую команду из терминала, чтобы сделать это.

1
npm install -g gulp

Это установит gulp на ваш компьютер.

Давайте начнем настройку инструмента автоматизации с создания каталога в папке тем WordPress или в любом предпочтительном месте.

В моем случае я перейду к папке с темами …

1
cd …./wp-content/themes

… и выполните следующую команду.

1
mkdir wp-gulp-automation

Теперь я перейду к папке, чтобы начать проект npm .

1
2
3
cd wp-gulp-automation
 
npm init

Это задаст вам несколько вопросов, таких как название проекта, версия, описание, автор, лицензия и т. Д.

Вы можете либо заполнить их, либо продолжать нажимать Enter, пока он не скажет « yes . Наконец, введите yes и нажмите Enter еще раз.

Это создаст файл package.json в каталоге. Он содержит информацию о вашем проекте и его зависимостях.

Если вы правильно выполнили этот процесс, ваш файл package.json будет выглядеть так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
{
 
  «name»: «wp-gulp-automation»,
 
  «version»: «1.0.0»,
 
  «description»: «»,
 
  «main»: «index.js»,
 
  «scripts»: {
 
    «test»: «echo \»Error: no test specified\» && exit 1″
 
  },
 
  «author»: «»,
 
  «license»: «ISC»
 
}

Установите Gulp локально для вашего проекта.

1
npm install gulp —save-dev

Это создаст папку node_modules и сохранит там все зависимости вашего проекта. --save-dev используется для обновления dev-dependencies в package.json.

Создайте gulpfile.js в каталоге проекта со следующим кодом.

1
2
3
4
5
6
7
var gulp = require(‘gulp’);
 
gulp.task(‘default’, function(){
 
    console.log(‘default gulp task…’)
 
});

В терминале наберите gulp и нажмите Enter . Вы увидите, что приведенный выше текст зарегистрирован в консоли.

Для компиляции Sass доступны различные плагины gulp. Я попробовал и перечислил три из них ниже.

  1. глоток (простой и легкий в использовании)
  2. gulp-compass (прекрасно работает с проектами на основе компаса)
  3. gulp-ruby-compass (этот дает больше контроля, чем два других)

Для простоты в этом уроке я буду использовать первый — gulp-sass .

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

1
npm install gulp-sass —save-dev

Обновим код для компиляции файлов Sass в файлы CSS.

Добавьте требуемый вверху gulpfile.

01
02
03
04
05
06
07
08
09
10
11
12
13
var sass = require(‘gulp-sass’);
 
gulp.task(‘sass’, function () {
 
    gulp.src(‘./css/src/*.scss’)
 
        .pipe(sass())
 
        .pipe(gulp.dest(‘./css’));
 
});
 
gulp.task(‘default’, [‘sass’]);

Теперь, когда я запускаю gulp sass в терминале, запускается задача sass.

И поскольку я добавил его в массив задач по умолчанию, при запуске gulp в терминале задача по умолчанию запускает задачу sass.

Это скомпилирует все файлы в папке css/src проекта и сохранит их в папке css . Вы можете передать дополнительные параметры функции sass() зависимости от ваших потребностей.

Так что в основном запуск gulp и gulp sass будет делать то же самое в это время.

Далее, чтобы иметь более качественный и упакованный код JavaScript в ваших темах, вам нужны gulp-jshint и gulp-concat .

1
2
3
npm install gulp-jshint —save-dev
 
npm install gulp-concat —save-dev

Теперь добавьте require в верхней части gulpfile:

1
2
3
var jshint = require(‘gulp-jshint’);
 
var concat = require(‘gulp-concat’);

Добавьте следующую задачу gulp в файл, чтобы объединить и объединить все файлы js.

01
02
03
04
05
06
07
08
09
10
11
12
13
gulp.task(‘js’, function () {
 
gulp.src(‘js/src/*.js’)
 
.pipe(jshint())
 
.pipe(jshint.reporter(‘fail’))
 
.pipe(concat(‘theme.js’))
 
.pipe(gulp.dest(‘js’));
 
});

Если вы хотите организовать немного больше, у вас могут быть папки vendor и theme внутри js / src . Папка vendor содержит все сторонние библиотеки, такие как плагины jQuery, а папка theme будет содержать код JavaScript вашей собственной темы.

Если вы тоже хотите их минимизировать , вы можете включить плагин gulp-uglify . И давайте обновим нашу задачу по умолчанию:

1
gulp.task(‘default’, [‘sass’, ‘js’]);

Наиболее часто используемый плагин gulp для этой задачи — gulp-imagemin . Установите его с помощью:

1
npm install gulp-imagemin —sav-dev

Добавьте требуемый gulp-imagemin вверху:

1
var imagemin = require(‘gulp-imagemin’);

И добавьте следующее задание в файл gulpfile.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
gulp.task(‘img’, function() {
 
  gulp.src(‘img/src/*.{png,jpg,gif}’)
 
    .pipe(imagemin({
 
      optimizationLevel: 7,
 
      progressive: true
 
    }))
 
    .pipe(gulp.dest(‘img’))
 
});

Для этого нужно сделать оптимизированную копию всех изображений, помещенных в каталог img / src в каталог img .

Добавьте его в список задач по умолчанию.

1
gulp.task(‘default’, [‘sass’, ‘js’, ‘img’]);

Далее идет настройка часов для автоматизации задач.

1
2
3
4
5
6
7
8
9
gulp.task(‘watch’, function() {
 
  gulp.watch(‘css/src/*.scss’, [‘sass’]);
 
  gulp.watch(‘js/src/*.js’, [‘js’]);
 
  gulp.watch(‘img/src/*.{png,jpg,gif}’, [‘img’]);
 
});

Добавление его в список задач по умолчанию дает нам:

1
gulp.task(‘default’, [‘sass’, ‘js’, ‘img’, ‘watch’]);

Что произойдет, если во время выполнения одной из наших задач произойдет ошибка? Ваш gulpfile перестанет работать.

Чтобы справиться с этим, давайте воспользуемся хорошим плагином gulp под названием gulp-plumber . Мы также будем использовать gulp-notify, чтобы показывать хорошие уведомления о жизни рычания при ошибках.

Установите gulp-plumber и gulp-notify используя:

1
2
3
npm install gulp-plumber —save-dev
 
npm install gulp-notify —save-dev

Снова потребуйте это наверху gulpfile.

1
2
3
var plumber = require(‘gulp-plumber’);
 
var notify = require(‘gulp-notify’);

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

1
2
3
4
5
6
7
8
9
var plumberErrorHandler = { errorHandler: notify.onError({
 
    title: ‘Gulp’,
 
    message: ‘Error: <%= error.message %>’
 
  })
 
};

Теперь наша обновленная задача sass будет выглядеть так:

01
02
03
04
05
06
07
08
09
10
11
gulp.task(‘sass’, function () {
 
  gulp.src(‘./css/src/*.scss’)
 
    .pipe(plumber(plumberErrorHandler))
 
    .pipe(sass())
 
    .pipe(gulp.dest(‘./css’))
 
});

Обратите внимание на добавленный plumberErrorHandler . Таким же образом я добавлю это к задачам js и img .

Одна важная вещь, необходимая — это функция перезагрузки в реальном времени.

Прежде всего, установите расширение / дополнение браузера для прямой перезагрузки:

Теперь вам нужно установить gulp-livereload, используя:

1
npm install gulp-liveraload —save-dev

Еще раз добавьте его в начало, где вам нужно в gulpfile.

1
var livereload = require(‘gulp-livereload’);

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

Задание sass будет выглядеть так:

01
02
03
04
05
06
07
08
09
10
11
12
13
gulp.task(‘sass’, function () {
 
  gulp.src(‘./css/src/*.scss’)
 
    .pipe(plumber(plumberErrorHandler))
 
    .pipe(sass())
 
    .pipe(gulp.dest(‘./css’))
 
    .pipe(livereload());
 
});

Аналогичным образом добавьте livereload к livereload js и img . Еще одна вещь, которую вам нужно сделать, это добавить livereload.listen(); в начале часового задания.

01
02
03
04
05
06
07
08
09
10
11
gulp.task(‘watch’, function() {
 
  livereload.listen();
 
  gulp.watch(‘css/src/*.scss’, [‘sass’]);
 
  gulp.watch(‘js/src/*.js’, [‘js’]);
 
  gulp.watch(‘img/src/*.{png,jpg,gif}’, [‘img’]);
 
});

Чтобы протестировать livereload , давайте создадим файл index.php со следующим кодом.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<html>
 
<head>
 
  <link rel=»stylesheet» type=»text/css» href=»<?php echo get_template_directory_uri(); ?>/css/style.css»>
 
  <title></title>
 
</head>
 
<body>
 
<h1>hello from gulp automation tool</h1>
 
<script type=»text/javascript» src=»<?php echo get_template_directory_uri(); ?>/js/theme.js»></script>
 
</body>
 
</html>

И style.css.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
/*
 
Theme Name: Tutsplus gulp wp automation
 
Theme URI: http://tutsplus.com
 
Description: Automating wordpress development workflow.
 
Author: Atinder Singh
 
Author URI: http://tutsplus.com
 
Version: 1.4.1
 
License: GNU General Public License v2 or later
 
License URI: http://www.gnu.org/licenses/gpl-2.0.html
 
*/

Теперь активируйте эту тему с панели управления WordPress. Ваша базовая среда настроена и готова к работе. Запустите gulp в терминале и просмотрите активированную тему в вашем браузере. Нажмите на расширение live reload, чтобы подключить сервер live reload, и прослушайте изменения.

Всякий раз, когда вы изменяете содержимое любого файла в css / src или js / src , gulp будет отслеживать и компилировать файлы и перезагружать ваш браузер.

Теперь у вас есть инструмент, который можно использовать для создания нескольких тем, поэтому давайте переместим файлы тем в другую папку в каталоге wp-content/themes/wp-gulp-automation/theme-boilerplate .

Скопируйте файлы index.php и style.css и папки css , img и js в шаблон темы .

Это очень основная тема-шаблон. Вы можете продлить это или использовать тот, который вам нравится.

основной шаблон темы

Для этой последней задачи вам понадобятся три модуля Node.js. Установите json-файл , node-fs и fs-extra .

1
2
3
4
5
npm install json-file —save-dev
 
npm install node-fs —save-dev
 
npm install fs-extra —save-dev

Требуйте их в верхней части вашего файла gulpfile.

1
2
3
4
5
6
7
8
9
var fs = require(‘node-fs’);
 
var fse = require(‘fs-extra’);
 
var json = require(‘json-file’);
 
var themeName = json.read(‘./package.json’).get(‘themeName’);
 
var themeDir = ‘../’ + themeName;

Добавьте это задание в свой файл gulpfile.

1
2
3
4
5
6
7
gulp.task(‘init’, function() {
 
  fs.mkdirSync(themeDir, 765, true);
 
  fse.copySync(‘theme-boilerplate’, themeDir + ‘/’);
 
});

Теперь вы можете создать новую тему в wp-content / themes, используя стандартный код, например, указав атрибут themeName в package.json.

содержание пакета

И работает:

1
gulp init

Теперь у вас есть две папки:

  1. wp-gulp-Automation (инструмент для всех ваших тем)
  2. myNewTheme (ваша недавно созданная тема)
структура папок тем wp-content

Возможности для этого безграничны.

Вы можете использовать CoffeeScript вместо обычного JavaScript и сказать gulp также следить за ним. Вы можете добавить больше задач в зависимости от вашего рабочего процесса. Некоторые новые идеи задачи могут быть:

  • удаление файлов .DS_Store, .thumb или любых ненужных файлов автоматически
  • упаковка темы в zip-папку для отправки на Themeforest

Спасибо за прочтение! Если вам есть, что добавить, или вы создали новые задачи, которыми вы можете поделиться с читателями, милости просим.