Статьи

Улучшение вашего рабочего процесса Ember.js с помощью Gulp.js

Я большой сторонник структуры Ember.js. Я видел много учебников по Ember в Интернете, но большинство из них не объясняют, как настроить систему сборки для использования с ней. В свете этого я решил взять на себя обязанность объяснить эту часть червоточины. С момента своего появления Gulp.js стал горячей темой в обсуждении исполнителей задач JavaScript. Не случайно Gulp.js появляется в обсуждении, когда упоминается проект JavaScript. Итак, эта статья покажет, как Gulp может использоваться с проектами Ember.

Я буду делать некоторые предположения в этой статье. Я предполагаю, что у вас уже есть общее представление о том, как работает Gulp.js, и что вы ранее настраивали проект Gulp.js самостоятельно. Если нет, пожалуйста, посетите SitePoint Введение в Gulp.js для повышения квалификации . В оставшейся части этой статьи вы узнаете, как создавать и настраивать общие задачи Gulp.js для вашего проекта Ember.

Типичный рабочий процесс Ember.js

Я работал над несколькими проектами Ember.js и заметил, что среди них есть общие требования. Эти требования включают необходимость манипулировать кодом SCSS, CSS, JavaScript и Handlebars. Ниже приведены требования и краткое объяснение каждого из них.

Компиляция SCSS

Это включает в себя преобразование кода SCSS в CSS.

JavaScript и CSS минификация

Минификация — это процесс уменьшения размера файла путем удаления ненужных пробелов. В CSS это обычно делается после преобразования кода SCSS в CSS.

JavaScript и CSS Конкатенация

Конкатенация — это процесс объединения множества файлов в один файл. Обычно это делается для уменьшения количества HTTP-запросов к серверу. Чем больше файлов, тем больше запросов HTTP, что приводит к увеличению времени загрузки. При объединении вам нужен всего один HTTP-запрос. Это особенно полезно при передаче файлов по медленному сетевому соединению, например на мобильном устройстве.

Просмотр файлов / папок

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

Сборник рулей

Handlebars — это язык шаблонов Ember.js по умолчанию. Однако браузеры не могут анализировать код Handlebars. Поэтому нам нужен способ конвертировать код Handlebars в HTML. Вот тут-то и начинается сборник рулей. Во-первых, код Handlebars преобразуется в функцию JavaScript. Затем функция запускается, когда требуется среда выполнения Ember для добавления правильного HTML в DOM.

JavaScript Uglifying

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

Разбивка плагинов Gulp.js

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

gulp

Это базовый плагин, который устанавливает сам Gulp.js.

gulp-compass

Этот плагин компилирует код SCSS в CSS. Чтобы использовать его, вы должны установить Ruby и гем компаса .

gulp-uglify

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

gulp-watch

Этот плагин позволяет вашему проекту просматривать один или несколько файлов на предмет изменений.

gulp-concat

Этот плагин позволяет объединить несколько файлов CSS или JavaScript в один. Файлы должны быть одного типа, конечно.

gulp-ember-handlebars

Этот плагин позволяет конвертировать Handlebars в JavaScript.

Установка плагинов

Сначала создайте файл package.json содержащий пустой объект JavaScript, {} . Далее мы установим ранее перечисленные плагины. Используя свой терминал, перейдите в корневой каталог вашего проекта. Установите и добавьте вышеупомянутые плагины как зависимости, используя следующие команды в своем терминале.

 npm install gulp -g 

Это устанавливает глоток во всем мире. Затем сохраните плагин в свой локальный проект с помощью этой команды:

 npm install gulp --save-dev 

Часть команды --save-dev добавляет плагины как зависимости к вашему package.json . Удаление его только установит плагин, но не добавит его в ваш файл.

Повторите вторую команду для других плагинов. В каждом случае замените gulp на имя плагина, который вы хотите установить. Например, gulp-compass , gulp-concat и т. Д. После этого взгляните на ваш package.json , и вы должны увидеть что-то вроде этого:

 { "devDependencies": { "gulp": "^3.8.0", "gulp-compass": "^1.1.9", "gulp-concat": "^2.2.0", "gulp-ember-handlebars": "^0.6.0", "gulp-uglify": "^0.3.0", "gulp-watch": "^0.6.5" } } 

Требование плагинов

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

 var gulp = require('gulp'), compass = require('gulp-compass'), watch = require('gulp-watch'), handlebars = require('gulp-ember-handlebars'), uglify = require('gulp-uglify'), concat = require('gulp-concat'); 

Настройка задач для плагинов

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

Задача CSS

Эта задача выполняет три вещи. Он использует три плагина, compass , concat и gulp . Он компилирует файлы SCSS в CSS, объединяет их и выводит результат в файл по вашему выбору.

 gulp.task('css', function() { return gulp.src('scss/*.scss') .pipe(compass({ sass: 'scss' })) .pipe(concat('main.min.css')) .pipe(gulp.dest('dist/css')); }); 

Задача шаблонов

Эта задача использует плагины concat , concat и gulp для выполнения двух задач. Он принимает список файлов Handlebars в качестве входных данных, компилирует их в JavaScript и объединяет их в один файл. Затем он сохраняет выходной файл в нужное место.

 gulp.task('templates', function() { gulp.src(['js/templates/**/*.hbs']) .pipe(handlebars({ outputType: 'browser', namespace: 'Ember.TEMPLATES' })) .pipe(concat('templates.js')) .pipe(gulp.dest('js/')); }); 

Сценарии Задача

Эта задача делает две вещи и использует три плагина, concat , uglify и uglify . Он принимает список файлов JavaScript в качестве входных данных. Затем он удаляет содержимое, объединяет их все в один файл и сохраняет в нужном месте.

 gulp.task('scripts', function() { var scriptSrc = [ 'js/vendor/jquery-1.10.2.js', 'js/vendor/jquery-ui.custom.min.js', 'js/vendor/moment.min.js', 'js/vendor/handlebars.runtime-v1.3.0.js', 'js/vendor/ember-1.3.2.js', 'js/vendor/ember-data.js', 'js/vendor/local-storage-adapter.js', 'js/helpers.js', 'js/main.js', 'js/templates.js', 'js/components.js', 'js/models/*.js', 'js/controllers/*.js', 'js/router.js', 'js/views/*.js', 'js/fixtures.js', 'js/routes/*.js' ]; return gulp.src(scriptSrc) .pipe(uglify({ mangle: false })) .pipe(concat('main.min.js')) .pipe(gulp.dest('dist/js')); }); 

Задача File Watcher

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

 gulp.task('watch', function() { //watches SCSS files for changes gulp.watch('scss/*.scss', ['css']); //watches handlebars files for changes gulp.watch('js/templates/**/*.hbs', ['templates']); //watches JavaScript files for changes gulp.watch('js/**/*.js', ['scripts']); }); 

Как использовать задачи

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

Использование разработки

Во время разработки мне нужно иметь возможность компилировать SCSS, компилировать Handlebars, объединять CSS, объединять JavaScript и увеличивать его. Файлы должны быть просмотрены на предмет изменений. Поэтому я настроил следующую задачу для запуска в командной строке.

 gulp.task('default', ['css', 'templates', 'scripts', 'watch']); 

Здесь я устанавливаю задание по умолчанию для Gulp.js. Он запускается с помощью команды gulp в терминале. Это запустит фоновую задачу из- watch зависимости задачи watch . Каждый раз, когда файл изменяется, запускаются задачи внутри задачи watch ( css , templates и scripts ).

Использование продукции

Во время производства, когда я готов отправить приложение, мне нужны зависимые задачи задачи по умолчанию, кроме задачи наблюдения. Это потому, что я не буду вносить какие-либо изменения в файлы, и мне нужно, чтобы инструменты сборки запускались только один раз. Это запускается с использованием команды gulp production , которая выглядит следующим образом:

 gulp.task('production', ['css', 'templates', 'scripts']); 

Вывод

На этом мы завершаем наш урок о том, как использовать Gulp в вашем проекте Ember.js. Мы определили несколько задач для сочетания общих задач. Имейте в виду, что вы можете смешивать и сочетать задания. Например, вы можете отключить расширение кода JavaScript во время разработки и включить его только для производственной задачи. Один из способов сделать это — определить две отдельные задачи: одну для разработки и одну для производства. Кроме того, эти задачи относятся только к моему проекту. Я призываю вас взглянуть на страницы документации по каждому из плагинов. Они содержат более подробную информацию для дальнейшей настройки каждого из них в соответствии с вашими потребностями. Хорошим местом для начала была бы страница плагинов Gulp.js.

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