Пример структуры проекта с использованием Gulp для компиляции CSS/SCSS и JavaScript, а также запуска локального сервера:
/project-root
│
├── /dist # Папка для финальных скомпилированных файлов
│ ├── /css # Скомпилированные CSS файлы
│ └── /js # Скомпилированные и минифицированные JS файлы
│
├── /src # Папка с исходными файлами
│ ├── /scss # Исходные файлы SCSS
│ │ ├── main.scss # Основной SCSS файл
│ │ └── _partials.scss # Пример SCSS-подключаемых файлов
│ └── /js # Исходные JS файлы
│ └── main.js # Основной JS файл
│
├── /node_modules # Установленные через npm модули
│
├── gulpfile.js # Конфигурация Gulp
├── package.json # Данные о проекте и зависимости
├── package-lock.json # Автоматически сгенерированный файл зависимостей
└── index.html # Основной HTML файл
Описание структуры:
- /dist: Папка, в которую Gulp будет сохранять скомпилированные и минифицированные файлы.
/css
: здесь будут находиться все скомпилированные CSS файлы./js
: сюда будут сохраняться минифицированные JS файлы.
- /src: Папка с исходными файлами.
/scss
: исходные файлы стилей в формате SCSS. Основной файл стилейmain.scss
может импортировать другие файлы (например,_partials.scss
)./js
: исходные файлы JavaScript.
- /node_modules: Здесь находятся все зависимости, установленные через npm. Эта папка создается автоматически при установке зависимостей.
- gulpfile.js: Файл с настройками Gulp, который описывает задачи для сборки проекта.
- package.json: Файл, который содержит информацию о проекте, его зависимости и команды для npm.
- package-lock.json: Автоматически сгенерированный файл с точной версией установленных пакетов.
- index.html: Основной HTML файл проекта, который будет использоваться для тестирования во время разработки.
Шаги для работы с проектом:
1. Инициализация проекта:
npm init -y
2. Установка Gulp и необходимых плагинов:
npm install gulp gulp-sass gulp-concat gulp-uglify gulp-rename browser-sync sass --save-dev
3. Создание Gulp-файла:
// Подключаем модули
const gulp = require('gulp');
const sass = require('gulp-sass')(require('sass')); // Используем правильную версию gulp-sass
const concat = require('gulp-concat');
const uglify = require('gulp-uglify');
const rename = require('gulp-rename');
const browserSync = require('browser-sync').create();
// Пути к файлам
const paths = {
styles: {
src: 'src/scss/**/*.scss',
dest: 'dist/css'
},
scripts: {
src: 'src/js/**/*.js',
dest: 'dist/js'
}
};
// Компиляция SCSS в CSS
function styles() {
return gulp.src(paths.styles.src)
.pipe(sass({ outputStyle: 'compressed' }).on('error', sass.logError)) // Компиляция с минификацией
.pipe(rename({ suffix: '.min' }))
.pipe(gulp.dest(paths.styles.dest))
.pipe(browserSync.stream());
}
// Минификация и объединение JS
function scripts() {
return gulp.src(paths.scripts.src)
.pipe(concat('all.js'))
.pipe(uglify())
.pipe(rename({ suffix: '.min' }))
.pipe(gulp.dest(paths.scripts.dest))
.pipe(browserSync.stream());
}
// Запуск локального сервера
function serve() {
browserSync.init({
server: {
baseDir: './'
}
});
gulp.watch(paths.styles.src, styles);
gulp.watch(paths.scripts.src, scripts);
gulp.watch('./*.html').on('change', browserSync.reload);
}
// Определение задач
gulp.task('styles', styles);
gulp.task('scripts', scripts);
gulp.task('default', gulp.series(gulp.parallel(styles, scripts), serve));
Что делает этот скрипт:
- Компиляция SCSS в минифицированный CSS:
- Все SCSS файлы компилируются в CSS и минифицируются.
- Компилированный файл получает суффикс
.min
.
- Минификация и объединение JS:
- Все файлы JS объединяются в один файл
all.min.js
и минифицируются.
- Все файлы JS объединяются в один файл
- Запуск сервера с автообновлением:
- Сервер запускается на корневой директории, и страница обновляется при изменении файлов SCSS, JS или HTML.
Команды:
- Запуск: Просто используйте команду
gulp
, чтобы запустить компиляцию, сервер и отслеживание изменений.