Задать вопрос

Как компилировать PUG на лету в VScode?

Хочу, чтобы можно было собирать html файлы из Pug, так же как это делает с SCSS Live Sass Compiler.
Нашёл плагин Live Pug Compiler, но он тащит сразу всё, ещё и с папками (в случае с Sass вопрос решается добавлением к файлу нижнего подчёркивания).
Вебпак я не умею. Да, надо, но сейчас вопрос не о нём.
  • Вопрос задан
  • 1520 просмотров
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
Тогда проще Gulp конфиг собрать и не страдать так. Вот пример. Организовываете проект следующим образом (все можно обозвать как Вам угодно, только и конфиг поменять надо будет).
Project
 ├ Sources
 │  ├ Styles
 │  ├ Scripts
 │  ├ Images
 │  └ index.html
 ├ package.json
 └ gulpfile.js

Необходимые пакеты
npm i gulp gulp-if gulp-pug gulp-htmlmin gulp-sass gulp-sourcemaps gulp-autoprefixer gulp-clean-css gulp-babel gulp-concat gulp-uglify gulp-image gulp-clean browser-sync yargs node-sass @babel/core @babel/preset-env -D

Команды:
gulp --development - сборка проекта, старт сервера, live reload.
gulp --series clear build --production - сборка проекта, сжатие, оптимизация изображений.
gulpfile

const gulp = require('gulp');
const pipeIf = require('gulp-if');
const pug = require('gulp-pug');
const minify = require('gulp-htmlmin');
const sass = require('gulp-sass');
const sourcemaps = require('gulp-sourcemaps');
const autoprefixer = require('gulp-autoprefixer');
const clean = require('gulp-clean-css');
const babel = require('gulp-babel');
const concat = require('gulp-concat');
const uglify = require('gulp-uglify');
const image = require('gulp-image');
const clear = require('gulp-clean');
const browser = require('browser-sync').create();
const { argv } = require('yargs');

sass.compiler = require('node-sass');

gulp.task('server', (callback) => {
	browser.init({
		server: {
			baseDir: 'Build/'
		},
		notify: false
	});

	callback();
});

gulp.task('reload', (callback) => {
	browser.reload();

	callback();
});

gulp.task('clear', () => {
	return gulp.src('Build', { allowEmpty: true })
		.pipe(clear({
			force: true
		}));
});

gulp.task('build:html', () => {
	return gulp.src(['Sources/*.html', 'Sources/*.pug'])
		.pipe(pug())
		.pipe(pipeIf(argv.production, minify({ collapseWhitespace: true })))
		.pipe(gulp.dest('Build/'));
});

gulp.task('build:sass', () => {
	return gulp.src(['Sources/Styles/*.sass', 'Sources/Styles/*.scss'])
		.pipe(pipeIf(argv.development, sourcemaps.init()))
		.pipe(sass())
		.pipe(autoprefixer({
			cascade: false
		}))
		.pipe(pipeIf(argv.production, clean()))
		.pipe(pipeIf(argv.development, sourcemaps.write('.')))
		.pipe(gulp.dest('Build/Styles/'));
});

gulp.task('build:js', () => {
	return gulp.src('Sources/Scripts/**/*.js')
		.pipe(pipeIf(argv.development, sourcemaps.init()))
		.pipe(concat('main.js'))
		.pipe(babel({
			presets: ['@babel/env']
		}))
		.pipe(pipeIf(argv.production, uglify()))
		.pipe(pipeIf(argv.development, sourcemaps.write('.')))
		.pipe(gulp.dest('Build/Scripts/'));
});

gulp.task('build:images', () => {
	return gulp.src(['Sources/Images/**/*.png', 'Sources/Images/**/*.jpg', 'Sources/Images/**/*.svg'])
		.pipe(pipeIf(argv.production, image()))
		.pipe(gulp.dest('Build/Images/'));
});

gulp.task('watch:html', () => {
	gulp.watch(['Sources/**/*.html', 'Sources/**/*.pug'], gulp.series('build:html', 'reload'));
});

gulp.task('watch:sass', () => {
	gulp.watch(['Sources/Styles/**/*.sass', 'Sources/Styles/**/*.scss'], gulp.series('build:sass', 'reload'));
});

gulp.task('watch:js', () => {
	gulp.watch('Sources/Scripts/**/*.js', gulp.series('build:js', 'reload'));
});

gulp.task('watch:images', () => {
	gulp.watch(['Sources/Images/**/*.png', 'Sources/Images/**/*.jpg', 'Sources/Images/**/*.svg'], gulp.series('build:images'));
});

gulp.task('build', gulp.parallel('build:html', 'build:sass', 'build:js', 'build:images'));

gulp.task('watch', gulp.parallel('watch:html', 'watch:sass', 'watch:js', 'watch:images'));

gulp.task('default', gulp.series('clear', 'build', 'server', 'watch'));

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы