npm install gulp-jshint --save-dev
Чтобы минимизировать код:
npm install gulp-uglify --save-dev
Затем, внутри файла gulpfile.js
, нам нужны новые установленные плагины и добавление новой задачи js
.
var concat = require('gulp-concat'); var jshint = require('gulp-jshint'); var uglify = require('gulp-uglify'); gulp.task('js', function() { return gulp.src(['./js/*.js']) .pipe(jshint()) .pipe(jshint.reporter('default')) .pipe(concat('app.js')) .pipe(rename({suffix: '.min'})) .pipe(uglify()) .pipe(gulp.dest('./js')) });
по var concat = require('gulp-concat'); var jshint = require('gulp-jshint'); var uglify = require('gulp-uglify'); gulp.task('js', function() { return gulp.src(['./js/*.js']) .pipe(jshint()) .pipe(jshint.reporter('default')) .pipe(concat('app.js')) .pipe(rename({suffix: '.min'})) .pipe(uglify()) .pipe(gulp.dest('./js')) });
Эта задача берет любой файл, который заканчивается на .js
в ./js
, проверяет ошибки кода с помощью jshint, затем объединяет их в app.js
, и, поскольку нам нужен минимизированный вывод, пришло время переименовать файл в app.min.js
Затем мы минимизируем код и на последнем шаге ./js
файл в каталог ./js
.
На этом этапе вам нужно создать .jshintrc
конфигурации .jshintrc
в .jshintrc
каталоге темы, который представляет собой простой файл JSON, в котором указывается, какие параметры JSHint следует включать или отключать, например:
{ "undef": true, "unused": true, "browser": true }
-
undef
: Предупреждает, когда вы используете переменную, которая не была объявлена.
-
unused
: Предупреждает при определении переменной и никогда не использует ее.
-
browser
: определяет глобальные переменные, предоставляемые современными браузерами, такими как navigator
и document
.
JSHint поставляется с целым рядом опций, которые вы можете использовать в зависимости от ваших предпочтений.
Теперь запустите gulp js
из командной строки (или терминала). Будет app.min.js
новый файл app.min.js
, который будет использован позже в теме.
По умолчанию тема _underscore
включает _underscore
customizer.js
, navigation.js
и skip-link-focus-fix.js
каталоге /js
.
Если вам нужно только включить определенные файлы, вы можете добавить их в массив gulp.src
следующим образом:
gulp.task('js', function() { return gulp.src([ './js/navigation.js', './js/skip-link-focus-fix.js' ]) });
Приведенный выше код будет выполнять все операции над этими двумя файлами. Если вам нужно добавить еще один новый файл, вы можете добавить его в массив.
Вы также можете обновить задачу watch
чтобы отслеживать изменения в любом файле JavaScipt, а также обновить задачу по default
для автоматического запуска действий js
при запуске gulp
, как мы это делали с Sass.
gulp.task('watch', function() { gulp.watch('./sass/**/*.scss', ['sass']); gulp.watch('./js/*.js', ['js']); }); gulp.task('default', ['sass', 'js', 'watch']);
Внутри файла темы functions.php поставьте в очередь созданный файл app.min.js
как:
wp_enqueue_script( 'gulp-wordpress-javascript', get_template_directory_uri() . '/js/app.min.js', array(), '20151215', true );
Вы можете удалить другие файлы JavaScript в очереди, так как они уже объединены и сведены в один файл. В текущем состоянии HTTP, включая один файл, а не многие, ускорит и улучшит производительность сайта.
Функция сценариев enqueue внутри файла functions.php
будет выглядеть примерно так:
function gulp_wordpress_scripts() { wp_enqueue_style( 'gulp-wordpress-style', get_stylesheet_uri() ); wp_enqueue_script( 'gulp-wordpress-javascript', get_template_directory_uri() . '/js/app.min.js', array(), '20151215', true ); } add_action( 'wp_enqueue_scripts', 'gulp_wordpress_scripts' );
Картинки
Давайте теперь попробуем оптимизировать изображения с помощью Gulp, сделав это, мы гарантируем, что все используемые изображения в теме автоматически оптимизируются по скорости. Чтобы упростить эту автоматизацию, вы можете настроить задачу Gulp для просмотра каталога с изображениями, а после перетаскивания изображения туда Gulp оптимизирует его и переместит в другую папку для оптимизированных и готовых к использованию изображений.
Создайте две папки:
-
/images/src
: исходная папка содержит исходные изображения.
-
/images/dest
: папка назначения содержит оптимизированные изображения.
Установите gulp-imagemin для минимизации изображений PNG, JPEG, GIF и SVG.
npm install gulp-imagemin --save-dev
Создайте новую задачу ( images
), которая будет просматривать изображения, расположенные в исходной папке ( /images/src
), оптимизировать их и перемещать в оптимизированную папку ( /images/dest
).
var imagemin = require('gulp-imagemin'); gulp.task('images', function() { return gulp.src('./images/src/*') .pipe(plumber({errorHandler: onError})) .pipe(imagemin({optimizationLevel: 7, progressive: true})) .pipe(gulp.dest('./images/dist')); });
Вы также можете просмотреть папку /images/src
, чтобы при каждом перетаскивании туда нового изображения запускалась задача с images
. Кроме того, обновите задачу по default
для запуска действия с images
.
gulp.task('watch', function() {
Обновление браузера с помощью BrowserSync
Что если вы хотите обновить браузер после любых изменений кода, будь то код PHP, Sass или JavaScript? Что делать, если вы тестируете с более чем одним браузером или мобильным устройством? Вам придется нажимать кнопку обновления на каждом экране. BrowserSync поможет сделать это эффективно и автоматически!
Во-первых, вам нужно установить BrowserSync как зависимость для разработки.
npm install browser-sync --save-dev
Затем требуется BrowserSync внутри вашего файла gulpfile.js
и обновите задачу watch
чтобы включить BrowserSync:
var browserSync = require('browser-sync').create(); var reload = browserSync.reload; gulp.task('watch', function() { browserSync.init({ files: ['./**/*.php'], proxy: 'http://localhost:8888/wordpress/', }); gulp.watch('./sass/**/*.scss', ['sass', reload]); gulp.watch('./js/*.js', ['js', reload]); gulp.watch('images/src/*', ['images', reload]); });
Обратите внимание, что вам нужно обновить опцию прокси на локальный URL-адрес разработки. Например, если ваш локальный URL-адрес localhost:8888/wordpress
, обновите значение прокси-сервера выше с этим.
Например, поскольку BrowserSync может наблюдать за вашими файлами во время вашей работы, я настроил задачу на отслеживание любых изменений в файлах PHP.
Я также обновил задачи просмотра sass
, js
и images
чтобы перезагрузить страницу, если произошли какие-либо изменения в файлах или изменилось содержимое папки images.
Теперь вы можете запустить gulp
, в браузере автоматически откроется новая вкладка с URL-адресом localhost, и ваша консоль будет выглядеть примерно так:
[BS] Access URLs: -------------------------------------------- Local: http://localhost:3000/wordpress/ External: http://192.168.1.2:3000/wordpress/ -------------------------------------------- UI: http://localhost:3001 UI External: http://192.168.1.2:3001 --------------------------------------------
Внешний URL-адрес можно использовать на любом устройстве, подключенном к той же сети, поэтому при каждом изменении browserSync перезагрузит все браузеры.
Внешний URL-адрес пользовательского интерфейса используется для панели управления Browsersync, которая позволяет изменять параметры синхронизации, управлять устройствами.
Вывод
Как вы видели, работа с инструментами автоматизации невероятно полезна и может повысить скорость процесса разработки. Существует множество плагинов Gulp , которые вы можете попробовать и использовать в соответствии с вашими требованиями, поэтому есть все, что можно автоматизировать, чтобы сэкономить время, сделайте это!
Я создал репозиторий GitHub для темы WordPress этой статьи, и вы можете проверить код здесь . Дайте мне знать, если вы используете какие-либо плагины Gulp в процессе разработки, которые облегчают вашу жизнь.