173 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			173 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: Learn Some Gulp Basics | |||
|  | localeTitle: Изучите некоторые основы глотки | |||
|  | --- | |||
|  | Гальп может **многое** сделать. Это всего лишь общий обзор основ. Как только вы это поймете, вы можете добавить больше к Gulp самостоятельно. Документация для разных пакетов, которые я использовал, была отличной, и у нас также есть отличное сообщество FreeCodeCamp, готовое помочь с любым проектом. | |||
|  | 
 | |||
|  |  | |||
|  | 
 | |||
|  | ## Что такое глоток?
 | |||
|  | 
 | |||
|  | Gulp - это бегун для сборки / задания JavaScript. Вы используете Jade, но нужен HTML? Сасс, но нужен CSS? CoffeeScript, но нужен JavaScript? Или, может быть, вы просто хотите объединить и / или минимизировать то, что у вас уже есть? Gulp может сделать все это для вас легко, поэтому вам не нужно постоянно возвращаться к вашему терминалу после каждого небольшого изменения. | |||
|  | 
 | |||
|  | ## Зачем использовать Gulp?
 | |||
|  | 
 | |||
|  | Мы используем много CodePen на FreeCodeCamp. CodePen позволяет использовать препроцессоры без необходимости делать что-либо еще. Вы можете просмотреть скомпилированную версию, если был использован препроцессор. Это выглядит совсем по-другому. Вы можете сделать проект в React on CodePen, выбрать Babel в качестве препроцессора JavaScript, и все будет работать. Если бы вы делали этот же проект локально, не обрабатывая все, то вы не получили бы то, что ожидали. Здесь появляется Gulp. | |||
|  | 
 | |||
|  | ## Как использовать Gulp?
 | |||
|  | 
 | |||
|  | Опять же, это всего лишь обзор основ. Обзор будет обрабатывать Sass для CSS, конкатенировать и минимизировать таблицы стилей и скриптов и внедрять Gulp watch. Вам нужно, чтобы Node и NPM были установлены на вашем компьютере, прежде чем что-либо делать. Скорее всего, у вас есть это, но введите `node -v` и `npm -v` в свой терминал, чтобы проверить. | |||
|  | 
 | |||
|  | *   Перейдите в каталог проекта и запустите `npm init` в терминале. | |||
|  |      | |||
|  |     *   Это создает файл `package.json` в рабочем каталоге. | |||
|  |          | |||
|  |     *   Это также было бы хорошим временем для запуска `touch .gitignore` в терминале и добавления `node_modules/` в файл, поэтому вы не будете нажимать все эти пакеты на GitHub. | |||
|  |          | |||
|  | *   Запустите `npm install --save-dev gulp gulp-concat gulp-minify-css gulp-rename gulp-sass gulp-uglify` в терминале. Это может занять пару минут. | |||
|  |      | |||
|  |     *   Это устанавливает 6 различных `node_modules` . Вы можете посмотреть файл `package.json` и просмотреть все перечисленные ниже в `devDependencies` и в папке `node_modules` и посмотреть все установленные вами пакеты. | |||
|  |          | |||
|  |     *   `gulp-concat` для конкатенирования таблиц стилей и скриптов, gulp-minify `gulp-minify-css` предназначен для минимизации CSS, gulp `gulp-rename` - для переименования файла, `gulp-sass` - для Sass для CSS, а `gulp-uglify` - для минимизации JS. | |||
|  |          | |||
|  | *   Запустите `touch gulpfile.js` в терминале. | |||
|  |      | |||
|  |     *   Теперь вы готовы начать. | |||
|  | *   Вам нужно будет потребовать все файлы, которые вы только что сохранили. Вы делаете это в `gulpfile.js` . | |||
|  |      | |||
|  | 
 | |||
|  | ```javascript | |||
|  |     'use strict';  | |||
|  |   | |||
|  |     var gulp = require('gulp');  | |||
|  |     var concat = require('gulp-concat');  | |||
|  |     var minifyCss = require('gulp-minify-css');  | |||
|  |     var rename = require('gulp-rename');  | |||
|  |     var sass = require('gulp-sass');  | |||
|  |     var uglify = require('gulp-uglify');  | |||
|  | ``` | |||
|  | 
 | |||
|  | *   Нам нужно начать где-то, так что Sass для CSS сначала? Здесь мы собираемся обрабатывать Sass для CSS, минимизировать CSS и переименовывать файл. | |||
|  |      | |||
|  |     *   Имя задачи `sass` (подробнее об этом позже). | |||
|  |          | |||
|  |     *   В текущем каталоге мы ищем папку с именем `assets` , затем папку с именем `scss` , затем файл с именем `main.scss` . | |||
|  |          | |||
|  |     *   Мы обрабатываем Sass для CSS и регистрируем, если возникает ошибка. | |||
|  |          | |||
|  |     *   Затем CSS затем оценивается. Это просто избавляет от лишних линий и пробелов. Компьютер не нуждается в том, чтобы читать файл, и он резко уменьшает размер файла. | |||
|  |          | |||
|  |     *   Поскольку файл теперь минимизирован, имеет смысл переименовать его `.min.css` . | |||
|  |          | |||
|  |     *   Последний шаг - сохранить файл `main.min.css` где-нибудь, и он идет в текущем каталоге в папку с именем `public` , а затем в папку `css` . | |||
|  |          | |||
|  | 
 | |||
|  | ```javascript | |||
|  |     gulp.task('sass', function() {  | |||
|  |         return gulp.src('./assets/scss/main.scss')  | |||
|  |         .pipe(sass().on('error', sass.logError))  | |||
|  |         .pipe(minifyCss({compatibility: 'ie8'}))  | |||
|  |         .pipe(rename('main.min.css'))  | |||
|  |         .pipe(gulp.dest('./public/css'));  | |||
|  |     });  | |||
|  | ``` | |||
|  | 
 | |||
|  | *   Теперь мы можем получить немного больше в Gulp и попытаться объединить и уменьшить все файлы сценариев. Что делать, если у вас есть только один скрипт, так что вам нечего конкатенации? Может быть, избавиться от некоторых CDN, которые у вас есть, и сделать их сценариями. Но вы получите более крупные проекты с несколькими сценариями. | |||
|  |      | |||
|  |     *   Обратите внимание, что я не рассматриваю исходные карты. Я думаю, что это следующий шаг после этого основного обзора, поэтому посмотрите, как только вы поймете, что вы здесь делаете. | |||
|  |          | |||
|  |     *   Текущие задачи называются `concatScripts` и `minifyScripts` . | |||
|  |          | |||
|  |     *   Это та же основная структура, что и `sass` . Все файлы добавляются в `gulp.src` , но сначала мы должны сохранить этот конкатенированный файл, прежде чем его можно будет минимизировать. | |||
|  |          | |||
|  |     *   Минимизация JavaScript называется `uglify` . | |||
|  |          | |||
|  |     *   Вы заметили `['concatScripts]` после `minifyScripts` ? Это означает, что `concatScripts` будут запускаться сначала каждый раз, когда мы пытаемся запустить `minifyScripts` . | |||
|  |          | |||
|  | 
 | |||
|  | ```javascript | |||
|  |     gulp.task('concatScripts', function() {  | |||
|  |         return gulp.src([  | |||
|  |             './assets/js/script-1.js',  | |||
|  |             './assets/js/script-2.js',  | |||
|  |             './assets/js/script-3.js'  | |||
|  |         ])  | |||
|  |         .pipe(concat('app.js'))  | |||
|  |         .pipe(gulp.dest('./assets/js'));  | |||
|  |     });  | |||
|  |   | |||
|  |     gulp.task('minifyScripts', ['concatScripts'], function() {  | |||
|  |         return gulp.src('assets/js/app.js')  | |||
|  |         .pipe(uglify())  | |||
|  |         .pipe(rename('app.min.js'))  | |||
|  |         .pipe(gulp.dest('public/app/js'));  | |||
|  |     });  | |||
|  | ``` | |||
|  | 
 | |||
|  | *   Теперь вы можете перейти в терминал и введите в `gulp sass` и / или `gulp minifyScripts` . Это будет работать каждый, но мы хотим сделать это проще для нас. Мы собираемся создать сборку по умолчанию, поэтому мы можем просто ввести `gulp` в терминал. Мы также собираемся добавить `gulp watch` , поэтому всякий раз, когда вы сохраняете файл, который указан в часах, он будет запускать то, что вы сказали ему запустить. | |||
|  |      | |||
|  |     *   Мы сделали задачу под названием `build` . Это очень похоже на `minifyScripts` поскольку в нем есть массив. Всякий раз , когда мы вступаем `gulp build` в терминал будет работать `sass` и `minifyScripts` (который на самом деле работает `concatScripts` первый). | |||
|  |          | |||
|  |     *   Мы также поставили задачу под названием `watch` . Это задача сохранения времени. В терминале вы запускаете `gulp watch` . Gulp останется открытым на терминале, поэтому вы, вероятно, захотите запустить его на другой вкладке. Всякий раз , когда файл обновляется и сохраняется в `scss` папке с `.scss` расширения `sass` задача будет выполнена. И то же самое для файла в папке `js` с расширением `.js` , но будут выполняться `concatScripts` и `minifyScripts` . | |||
|  |          | |||
|  |     *   Последняя задача - по `default` . Вы можете просто запустить `gulp` в терминале, и он выполнит задание по `default` . Задача по `default` здесь - вызов задачи `build` , которая просто запускает все задачи, которые у нас есть на странице. | |||
|  |          | |||
|  | 
 | |||
|  | ```javascript | |||
|  |     gulp.task('build', ['sass', 'minifyScripts']);  | |||
|  |   | |||
|  |     gulp.task('watch', function() {  | |||
|  |         gulp.watch('./assets/scss/**/*.scss', ['sass']);  | |||
|  |         gulp.watch('./assets/js/**/*.js', ['minifyScripts']);  | |||
|  |     });  | |||
|  |   | |||
|  |     gulp.task('default', ['build']);  | |||
|  | ``` | |||
|  | 
 | |||
|  | Вот как выглядит ваш последний файл `gulpfile.js` : | |||
|  | 
 | |||
|  | ```javascript | |||
|  |     'use strict';  | |||
|  |   | |||
|  |     var gulp = require('gulp');  | |||
|  |     var concat = require('gulp-concat');  | |||
|  |     var minifyCss = require('gulp-minify-css');  | |||
|  |     var rename = require('gulp-rename');  | |||
|  |     var sass = require('gulp-sass');  | |||
|  |     var uglify = require('gulp-uglify');  | |||
|  |   | |||
|  |     gulp.task('sass', function() {  | |||
|  |         return gulp.src('./assets/scss/main.scss')  | |||
|  |         .pipe(sass().on('error', sass.logError))  | |||
|  |         .pipe(minifyCss({compatibility: 'ie8'}))  | |||
|  |         .pipe(rename('main.min.css'))  | |||
|  |         .pipe(gulp.dest('./public/css'));  | |||
|  |     });  | |||
|  |   | |||
|  |     gulp.task('concatScripts', function() {  | |||
|  |         return gulp.src([  | |||
|  |             './assets/js/script-1.js',  | |||
|  |             './assets/js/script-2.js',  | |||
|  |             './assets/js/script-3.js'  | |||
|  |         ])  | |||
|  |         .pipe(concat('app.js'))  | |||
|  |         .pipe(gulp.dest('./assets/js'));  | |||
|  |     });  | |||
|  |   | |||
|  |     gulp.task('minifyScripts', ['concatScripts'], function() {  | |||
|  |         return gulp.src('assets/js/app.js')  | |||
|  |         .pipe(uglify())  | |||
|  |         .pipe(rename('app.min.js'))  | |||
|  |         .pipe(gulp.dest('public/app/js'));  | |||
|  |     });  | |||
|  |   | |||
|  |     gulp.task('build', ['sass', 'minifyScripts']);  | |||
|  |   | |||
|  |     gulp.task('watch', function() {  | |||
|  |         gulp.watch('./assets/scss/**/*.scss', ['sass']);  | |||
|  |         gulp.watch('./assets/js/**/*.js', ['minifyScripts']);  | |||
|  |     });  | |||
|  |   | |||
|  |     gulp.task('default', ['build']);  | |||
|  | 
 | |||
|  | ``` |