Browsersync + Gulp.js
没有官方版本的 Gulp 插件,因为不需要!你只需 require
本模块,调用
API 并通过 参数 配置它即可。以下是一些常见的
流行项目中的用例,例如 Google's web starter kit
等。
安装 ^ TOP
首先,安装 Browsersync 和 Gulp 并作为开发依赖模块。
$ npm install browser-sync gulp --save-dev
然后,在 gulpfile.js
文件中使用他们:
var gulp = require('gulp');
var browserSync = require('browser-sync').create();
// Static server
gulp.task('browser-sync', function() {
browserSync.init({
server: {
baseDir: "./"
}
});
});
// or...
gulp.task('browser-sync', function() {
browserSync.init({
proxy: "yourlocal.dev"
});
});
SASS + CSS 注入 ^ TOP
Browsersync 支持流(stream),因此你可以在任务(task)执行过程中的某个时间点调用 reload 方法,
并且所有浏览器都将被通知到这些修改。由于 Browsersync 只关心你的 CSS 文件何时被
完成编译 - 因此务必在 gulp.dest
后调用 .stream()
方法。
var gulp = require('gulp');
var browserSync = require('browser-sync').create();
var sass = require('gulp-sass');
// Static Server + watching scss/html files
gulp.task('serve', ['sass'], function() {
browserSync.init({
server: "./app"
});
gulp.watch("app/scss/*.scss", ['sass']);
gulp.watch("app/*.html").on('change', browserSync.reload);
});
// Compile sass into CSS & auto-inject into browsers
gulp.task('sass', function() {
return gulp.src("app/scss/*.scss")
.pipe(sass())
.pipe(gulp.dest("app/css"))
.pipe(browserSync.stream());
});
gulp.task('default', ['serve']);
Ruby SASS 和 Source Maps ^ TOP
如果你使用了 gulp-ruby-sass 插件并设置了 sourcemap: true
参数,将生成额外的
.map
文件。当 browserSync.reload()
接收到这些文件时,他将尝试
重新加载整个页面(因为在 DOM 中找不到任何 .map
文件)。
为了解决这些问题,请使用 browserSync.stream({match: '**/*.css'})
方法,如下所示:
var gulp = require("gulp");
var sass = require("gulp-ruby-sass");
var browserSync = require("browser-sync").create();
// Static Server + watching scss/html files
gulp.task('serve', ['sass'], function() {
browserSync.init({
server: "./app"
});
gulp.watch("app/scss/*.scss", ['sass']);
gulp.watch("app/*.html").on('change', browserSync.reload);
});
/**
* Compile with gulp-ruby-sass + source maps
*/
gulp.task('sass', function () {
return sass('app/scss', {sourcemap: true})
.on('error', function (err) {
console.error('Error!', err.message);
})
.pipe(sourcemaps.write('./', {
includeContent: false,
sourceRoot: '/app/scss'
}))
.pipe(browserSync.stream({match: '**/*.css'}));
});
浏览器重新加载 ^ TOP
有时,你可能希望重新加载整个页面(例如,在处理完一堆 JS 文件之后),并且,
你希望是在任务执行之后重新加载。这种需求在 gulp 4.x.x
中很容易实现,但是,现在你可以执行以下操作,, but for now you can do the following
(确保从任务中 return
流(stream),以保证 browserSync.reload()
在正确的时间被调用)。
如果你使用的是gulp 4.x.x
,那么你可以 按照此文档 操作。
var gulp = require('gulp');
var browserSync = require('browser-sync').create();
// process JS files and return the stream.
gulp.task('js', function () {
return gulp.src('js/*js')
.pipe(browserify())
.pipe(uglify())
.pipe(gulp.dest('dist/js'));
});
// create a task that ensures the `js` task is complete before
// reloading browsers
gulp.task('js-watch', ['js'], function (done) {
browserSync.reload();
done();
});
// use default task to launch Browsersync and watch JS files
gulp.task('default', ['js'], function () {
// Serve files from the root of this project
browserSync.init({
server: {
baseDir: "./"
}
});
// add browserSync.reload to the tasks array to make
// all browsers reload after tasks are complete.
gulp.watch("js/*.js", ['js-watch']);
});
手动重新加载 ^ TOP
如果对流(stream)的支持无能满足你的需求,你可以在任务(task)中手动调用 reload 方法。 下面这个例子中将像以前一样编译并自动注入 CSS ,但是当 HTML 文件 更改后,浏览器才重新加载。
var gulp = require('gulp');
var browserSync = require('browser-sync').create();
var reload = browserSync.reload;
// Save a reference to the `reload` method
// Watch scss AND html files, doing different things with each.
gulp.task('serve', function () {
// Serve files from the root of this project
browserSync.init({
server: {
baseDir: "./"
}
});
gulp.watch("*.html").on("change", reload);
});
Jump to...