gulp browser-sync didn't work - gulp

this is my gulpfile.js
var gulp = require('gulp'),
browserSync = require('browser-sync');
gulp.task('browser-sync', function() {
browserSync({
server: {
baseDir: './',
}
})
})
then i started "gulp browser-sync" and it listening on port 3000
and i opened the url in browser.
While editing html or css and document saved, the browser won't reload.
If I used browser-sync to monitoring files, it works.
Anything wrong with my gulpfile.js ?

You'll need to trigger the reload yourself. I recommend a setup like this one; watch your files for changes, run the optimisation tasks and then call the reload method at the end of the pipeline. Something like this:
gulp.task('styles', function() {
return gulp.src('assets/sass/*.scss')
.pipe(sass())
.pipe(csso())
.pipe(gulp.dest('web/css'))
.pipe(browserSync.reload({stream:true})); // Make sure this is called!
});
gulp.task('browser-sync', function() {
browserSync.init(null, {
server: {
baseDir: './'
}
});
});
gulp.task('watch', ['browser-sync'], function() {
gulp.watch(['assets/sass/*.scss'], ['styles']);
});
Edit: To reload your HTML, use a task like this:
gulp.task('watch', ['browser-sync'], function () {
// add browserSync.reload to the tasks array to make
// all browsers reload after tasks are complete.
gulp.watch("html/*.html", ['htmlTasks', browserSync.reload]);
});
From here: http://www.browsersync.io/docs/gulp/#gulp-reload

Related

Problem with refreshing the website by GULP only once time

I would like to ask you for a help. I have a problem with browsersync. I want to learn this tool, and working with tutorial on the WEB, i typed a code but it works only once. Namely, while i put any changes in HTML file, it browser doesn't reload. It realoads only once and never more.
Below is my code. TIA
const gulp = require('gulp');
const browserSync = require('browser-sync');
gulp.task('reload', function(){
browserSync.reload();
});
gulp.task('serve', function(){
browserSync({
server: 'src'
});
gulp.watch('src/*.html', gulp.series('reload'));
});
gulp.task('default', gulp.series('serve'));
gulp.task('reload', function(done){
browserSync.reload();
done();
});
gulp.task('serve', function(done){
browserSync({
server: 'src'
});
gulp.watch('src/*.html', gulp.series('reload'));
done();
});
You can see in the above code I have added done() callbacks - you need those to signal async completion so that the tasks can be fired a second, etc. time.

Browsersync gulp task will not inject CSS (or gulp won`t run another watch task in background)

Seems like watch tasks stops at browserSync.init. I can run all tasks seperately by calling them via gulp cssInkject for example, but they wont run when gulp watch is run. Browsersync will give "File event [change] : resources/assets/styles/modules/_breadcrumbs.css" notification but wont run task that bundles css and won`t inject CSS (stream).
Below is the code :
var gulp = require('gulp'),
watch = require('gulp-watch'),
browserSync = require('browser-sync').create();
gulp.task('watch', function() {
browserSync.init(null, {
notify: false,
browser: "chrome",
server: {baseDir: "app"},
port: 8000
});
watch('./app/*.html', function() {
browserSync.reload();
});
watch('./app/assets/styles/**/*.css', function() {
gulp.start('cssInject');
});
watch('./app/assets/scripts/**/*.js', function() {
gulp.start('scriptsRefresh');
});
});
gulp.task('cssInject', ['styles'], function() {
return gulp.src('./app/temp/styles/styles.css')
.pipe(browserSync.stream());
});
gulp.task('scriptsRefresh', ['scriptsBundle'], function() {
browserSync.reload();
});
gulp.task('styles', function() {
return gulp.src('./app/assets/styles/styles.css')
.pipe(postcss([cssImport, mixins, cssvars, nested, hexrgba, autoprefixer]))
.on('error', function(errorInfo) {
console.log(errorInfo.toString());
this.emit('end');
})
.pipe(gulp.dest('./app/temp/styles'));
});
I am running it in Ubuntu VM (homestead/laravel), if it makes any difference.
I do not know why it works, but it works:
gulp.watch('./app/*.html', function() {
browserSync.reload();
});
gulp.watch('./app/assets/styles/**/*.css', function() {
gulp.start('cssInject');
});
gulp.watch('./app/assets/scripts/**/*.js', function() {
gulp.start('scriptsRefresh');
});
Basically adding 'gulp' to 'watch' solved the problem, which is even weirder as it works with 'watch' only within local windows environment, but not on homestead laravel.
Try this
gulp.task('cssInject', ['styles'], function() {
browserSync.stream();
});

Gulp browser-sync not reloading

This is my gulpfile.js file. It doesn't reload when I change and save my css or html, but it shows the "Connected to Browser-sync" message when I use gulp serve. I can't seem to figure out what is wrong.
var gulp = require('gulp');
var browserSync = require('browser-sync').create();
var gulp = require('gulp');
gulp.task('styles', function() {
gulp.src('./css/*.css')
.pipe(gulp.dest('./css'))
});
//Watch task
gulp.task('default',function() {
gulp.watch('./css/*.css',['styles']);
});
gulp.task('js', function () {
return gulp.src('./js/*.js')
// .pipe(concat('all.js'))
.pipe(gulp.dest('./js'));
});
gulp.task('html', function () {
return gulp.src('./*.html')
.pipe(gulp.dest('./'));
});
gulp.task('js-watch', ['js'], browserSync.reload);
gulp.task('html-watch', ['html'], browserSync.reload);
gulp.task('css-watch', ['css'], browserSync.reload);
gulp.task('serve', ['js', 'html', 'styles'], function () {
browserSync.init({
server: {
baseDir: "./"
}
});
gulp.watch("./*.js", ['js-watch']);
gulp.watch("./*.html", ['html-watch']);
gulp.watch("./css/*.css", ['css-watch']);
});
Try this.
All i did was add a new dependency.. run-sequence, to make it easy to organize how things are run. All you need is to run gulp to start the script and everything should run perfectly.
Aside from that i created a site folder at the root of my project. just because it seems more organize that way, and if you ever think of using jade, or sass, scss, etc. in your project and all you have to do is change the src path and keep the rendered output in the site folder..
Aside from that, everything is the same.
EDIT
I forgot to mention that i also added the pipe(bs.stream()); line at the end of each task such as HTML, styles, and JS, so that the browser reloads every time you make a change.
In case you don't want to make the server folder to keep your project organized, the all you have to do is delete the site/ path where ever you see it. and for server: 'site' just replace site with ./. Port you can delete it or define your own port
var gulp = require('gulp'),
bs = require('browser-sync').create(),
sequence = require('run-sequence');
gulp.task('styles', function() {
gulp.src('site/css/*.css')
.pipe(gulp.dest('site/css'))
.pipe(bs.stream());
});
gulp.task('js', function() {
gulp.src(['site/js/*.js'])
// .pipe(concat('all.js'))
.pipe(gulp.dest('site/js'))
.pipe(bs.stream());
});
gulp.task('html', function() {
gulp.src('site/*.html')
.pipe(gulp.dest('site'))
.pipe(bs.stream());
});
gulp.task('browser-sync', function() {
bs.init({
server: 'site',
port: 3010
});
});
gulp.task('watch', ['build'], function() {
gulp.watch(['site/css/*.css'], ['styles']);
gulp.watch(['site/js/*.js'], ['js']);
gulp.watch(['site/*.html'], ['html']);
});
gulp.task('build', function(done) {
sequence(
['html', 'js', 'styles'],
'browser-sync',
done);
});
gulp.task('default', ['watch']);

Gulp browser-sync refreshing ATOM editor on file save?

I have the following gulp file setup for testing purposes of small ideas etc..
My project is setup the following way
Project
site
CSS
img
js
index.html
gulpfile.js
package.json
Every time a save a html, css, or js from the site directory, instead of my browser refreshing, my atom text editor refreshes. Its kind of annoying. I have other projects setup similarly but they are work just fine. its just this one i can't seem to figure out.
is it my code, or something else?
var gulp = require('gulp'),
bs = require('browser-sync').create(),
sequence = require('run-sequence');
gulp.task('styles', function() {
gulp.src('site/css/*.css')
.pipe(gulp.dest('site/css'))
.pipe(bs.stream());
});
gulp.task('js', function() {
gulp.src(['site/js/*.js'])
// .pipe(concat('all.js'))
.pipe(gulp.dest('site/js'))
.pipe(bs.stream());
});
gulp.task('html', function() {
gulp.src('site/*.html')
.pipe(gulp.dest('site/'))
.pipe(bs.stream());
});
gulp.task('browser-sync', function() {
bs.init({
server: 'site'
});
});
gulp.task('watch', ['build'], function() {
gulp.watch(['site/css/*.css'], ['styles']);
gulp.watch(['site/js/*.js'], ['js']);
gulp.watch(['site/*.html'], ['html']);
});
gulp.task('build', function(done) {
sequence(
['html', 'js', 'styles'],
'browser-sync',
done);
});
gulp.task('default', ['watch']);
The issue was that I didn't have a body tag in my index file. Once I added it, atom stopped refreshing and browser-sync started working properly

BrowserSync: Reload HTML on Change

I'm using Gulp + BrowserSync and I'm trying to reload my development website when changes are made to my HTML files, but I can't seem to get it working.
I'm getting no errors in the command line, my page seems to reload but the changes I've made don't appear in the browser, unless I quit the gulp task and run it again.
This is my current setup:
var gulp = require('gulp');
var browserify = require('browserify');
var swig = require('gulp-swig');
var browserSync = require('browser-sync');
var reload = browserSync.reload;
gulp.task('serve', function () {
browserSync({
server: {
baseDir: './Build'
}
});
});
gulp.task('templates', function() {
return gulp.src('./src/*.html')
.pipe(swig())
.pipe(gulp.dest('./Build'))
.pipe(reload({stream: true}))
});
// Default task
gulp.task('default', ['serve', 'templates', 'sass', 'js'], function() {
gulp.watch('./src/*.html', ['templates']);
gulp.watch(['./src/scss/*.scss', './src/scss/**/*.scss'], ['sass']);
gulp.watch('./src/js/*.js', ['js']);
});
Any help with this is appreciated. Thanks in advance!
The problem in this setup seems to be swig. When you check the files in ./Build, they haven't changed, so the browser is loading the files correctly. But swig does not get the changes. Disabling swig's caching feature should resolve this:
gulp.task('templates', function() {
return gulp.src('./src/*.html')
.pipe(swig({
defaults: { cache: false }
}))
.pipe(gulp.dest('./Build'))
.pipe(reload({stream: true}));
});