上一篇我们简单介绍了browsersync的基础的用法,但在实际开发中,我们常常需要使用gulp
或grunt
对项目中的js和css等文件进行相应的压缩,实现自动化构建。由于browsersync
在调试方面具有很强的优势,所以在项目中可以考虑他们的集成。本文主要介绍gulp
和browser-sync
的集成。
安装
首先,安装browsersync
和gulp
的依赖包,并把它们添加到项目依赖中。
1
| npm install browser-sync gulp
|
然后,在你的gulpfile.js
文件中添加相应的task。
1 2 3 4 5 6 7 8 9 10 11 12 13
| var gulp = require('gulp'); var browserSync = require('browser-sync').create();
gulp.task('browser-sync', function() {
browserSync.init({ server: { baseDir: "./" } }); });
|
上面是基础的task,我们会把根目录(gulpfile所在文件目录)下面的所有文件映射到一个静态服务器中。但有时候我们项目的不会如此简单,比如我们不需要访问node_modules
中的文件,我们只需要能够访问dist
和bower_components
目录中的内容等等。
常见配置示例
访问固定目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| gulp.task('browser-sync', function() { browserSync.init({ server: "dist",
}); });
|
高级配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| gulp.task('browser-sync', function() { browserSync.init({ server: { baseDir: "./dist", index: "main.html", routes: { '/bower_components': 'bower_components' } },
ghostMode: false,
tunnel: true,
open: "local",
port: 8080,
logLevel: "debug",
logPrefix: "My Project",
notify: false, }); });
|
文件监听和重载
在我们开发调试阶段,有时会需要对文件监听,实现scss自动编译。
SASS + CSS 注入
在browsersync中使用流,这样你可以在你任务指定的地方调用reload,同时所有的浏览器将被告知变化,因为browsersync只关注完成编译后css,请确保在gulp.dest
之后调用.stream()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| var gulp = require('gulp'); var browserSync = require('browser-sync').create(); var sass = require('gulp-sass');
gulp.task('serve', ['sass'], function() {
browserSync.init({ server: "./app" });
gulp.watch("app/scss/*.scss", ['sass']); gulp.watch("app/*.html").on('change', browserSync.reload); });
gulp.task('sass', function() { return gulp.src("app/scss/*.scss") .pipe(sass()) .pipe(gulp.dest("app/css")) .pipe(browserSync.stream()); });
gulp.task('default', ['serve']);
|
浏览器的重载
有时候,你可能想整个页面都重新加载(例如在处理了一堆js文件),但是你想reload事件发生在task执行完成后。这在gulp 4.x.x
将会变的很容易,但是现在你可以按下面的做:(确保你所有tasks都return
流,这样browserSync.reload()
就会在正确的时候被调用)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| var gulp = require('gulp'); var browserSync = require('browser-sync').create();
gulp.task('js', function () { return gulp.src('js/*js') .pipe(browserify()) .pipe(uglify()) .pipe(gulp.dest('dist/js')); });
gulp.task('js-watch', ['js'], function (done) { browserSync.reload(); done(); });
gulp.task('serve', ['js'], function () {
browserSync.init({ server: { baseDir: "./" } });
gulp.watch("js/*.js", ['js-watch']); });
|
结语
本文介绍了gulp
和browsersync
的集成使用,基本的配置参数可参照上一篇web开发神器——browsersync(1)。需要注意的是sass文件重新编译为css,或是js文件合并时,我们可以通过stream的方式将改变注入到所有浏览器中。
参考
- Browsersync + Gulp.js