Загрузка файла index.html с помощью Gulp
Я пытаюсь обновить браузер, когда внесу изменения в index.html в корне моего проекта. Livereloading работает нормально при обновлении CSS. Я снял все усилия, чтобы это работало в моем gulpfile.js ниже...
Спасибо!
var gulp = require('gulp'),
sass = require('gulp-ruby-sass'),
autoprefixer = require('gulp-autoprefixer'),
minifycss = require('gulp-minify-css'),
jshint = require('gulp-jshint'),
uglify = require('gulp-uglify'),
imagemin = require('gulp-imagemin'),
rename = require('gulp-rename'),
clean = require('gulp-clean'),
concat = require('gulp-concat'),
notify = require('gulp-notify'),
cache = require('gulp-cache'),
livereload = require('gulp-livereload'),
lr = require('tiny-lr'),
server = lr();
gulp.task('styles', function() {
return gulp.src('components/sass/style.scss')
.pipe(sass({ style: 'expanded' }))
.pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
.pipe(gulp.dest(''))
.pipe(rename({suffix: '.min'}))
.pipe(minifycss())
.pipe(gulp.dest(''))
.pipe(livereload(server))
.pipe(notify({ message: 'Styles task complete' }));
});
gulp.task('scripts', function() {
return gulp.src('components/js/*.js')
// .pipe(jshint('.jshintrc'))
.pipe(jshint.reporter('default'))
.pipe(concat('main.js'))
.pipe(gulp.dest('js'))
.pipe(rename({suffix: '.min'}))
.pipe(uglify())
.pipe(gulp.dest('js'))
.pipe(livereload(server))
.pipe(notify({ message: 'Scripts task complete' }));
});
gulp.task('images', function() {
return gulp.src('components/img/*')
.pipe(imagemin({ optimizationLevel: 5, progressive: true, interlaced: true }))
.pipe(gulp.dest('img'))
.pipe(livereload(server))
.pipe(notify({ message: 'Images task complete' }));
});
// gulp.task('clean', function() {
// return gulp.src(['css', 'js', 'img'], {read: false})
// .pipe(clean());
// });
gulp.task('watch', function() {
server.listen(35729, function (err) {
if (err) {
return console.log(err)
};
// Watch .scss files
gulp.watch('components/sass/*.scss', ['styles']);
// Watch .js files
gulp.watch('components/js/*.js', ['scripts']);
// Watch image files
gulp.watch('components/img/*', ['images']);
});
});
// gulp.task('default', ['clean'], function() {
gulp.task('default', function() {
gulp.start('styles', 'scripts', 'images');
});
4 ответа
Там может быть лучший способ сделать то, что вы хотите сделать.
Задумывались ли вы, возможно, использовать экземпляр express
с livereload
?
Альтернатива заключается в использовании gulp-connect
что сделает то, что вы пытаетесь сделать, намного проще. В любом случае вместо вызова livereload
в задачах обрабатывайте загрузку в рамках задачи, которая устанавливает ваш сервер. Основная идея заключается в том, что вы устанавливаете задачу отслеживания для ваших файлов, которую вы хотите загрузить в реальном времени, а затем перезагрузите изменения.
gulp.task('serve', function(event) {
connect.server({
root: destinations.docs,
port: 1987,
livereload: true
});
// sets up a livereload that watches for any changes in the root
watch({glob: [sources.html, sources.styles]})
.pipe(connect.reload());
});
Я экспериментировал с обоими способами и gulp-connect
это гораздо более простой вариант. Независимо от этого, я написал два шаблона gulp, которые вы можете увидеть на https://github.com/jh3y/gulp-boilerplate-v2 и https://github.com/jh3y/gulp-boilerplate.
Надеюсь, это поможет!
Вы можете попробовать поместить свои HTML-файлы в подпапку, например: components/html
и используйте задачу, аналогичную задаче стилей:
gulp.task('html', function() {
return gulp.src('components/html/**/*.html')
.pipe(gulp.dest(''))
.pipe(livereload(server))
.pipe(notify({ message: 'HTML task complete' }));
});
Ваша задача по умолчанию должна выглядеть так:
// gulp.task('default', ['clean'], function() {
gulp.task('default', function() {
gulp.start('styles', 'scripts', 'images', 'html');
});
И измените задачу часов:
gulp.task('watch', function() {
server.listen(35729, function (err) {
if (err) {
return console.log(err)
};
// Watch .scss files
gulp.watch('components/sass/*.scss', ['styles']);
// Watch .js files
gulp.watch('components/js/*.js', ['scripts']);
// Watch image files
gulp.watch('components/img/*', ['images']);
// Watch html files
gulp.watch('components/html/**/*.html', ['html']);
});
});
Чао Ральф
Ручная перезагрузка браузера с синхронизацией файлов определенных типов в корне проекта с использованием текущего синтаксиса gulp по состоянию на 4/2016, ссылка на который приведена здесь:
https://www.browsersync.io/docs/gulp/
ПРИМЕР: Добавьте строки под ссылкой SCSS для просмотра файлов HTML и HTM с синхронизацией браузера:
gulp.watch("./scss/*.scss", ['sass']);
gulp.watch("*.html").on("change", reload);
gulp.watch("*.htm").on("change", reload);
Если вы не хотите использовать экземпляр livereload или express, вы можете сделать что-то вроде следующего, которое я использую в своем проекте laravel 5 с расширением elixir gulp в сочетании с live.js.
расширить эликсир
elixir.extend('livereloader',function(message) {
gulp.task('livereloader',function(){
return gulp.src('public/js/livereloader.js')
.pipe(insert.append(''))
.pipe(gulp.dest('public/js/'));
});
this.registerWatcher("livereloader", 'resources/views/**/*.php');
return this.queueTask('livereloader');
});
использовать задачу
mix.livereloader();
достаточно просто. даже без livereload или экспресс (не понимаю, почему я должен использовать их вообще...)