【发布时间】:2016-08-11 05:28:59
【问题描述】:
我正在运行一个 gulpfile 来编译 Sass、CoffeeScript 并通过 Browsersync 实时重新加载:
var gulp = require('gulp');
var plumber = require('gulp-plumber');
var sass = require('gulp-sass');
var autoprefixer = require('gulp-autoprefixer');
var cssmin = require('gulp-cssmin');
var coffee = require('gulp-coffee');
var uglify = require('gulp-uglify');
var browserSync = require('browser-sync');
gulp.task('sass', function() {
return gulp.src('./src/scss/**/*.scss')
.pipe(plumber())
.pipe(sass({
style: 'expanded',
precision: 10
}))
.pipe(autoprefixer({browsers: ['> 1%', 'last 2 versions', 'Firefox ESR']}))
.pipe(cssmin())
.pipe(gulp.dest('./dist'))
.pipe(browserSync.stream());
});
gulp.task('coffee', function() {
return gulp.src('./src/coffee/**/*.coffee')
.pipe(plumber())
.pipe(coffee())
.pipe(uglify())
.pipe(gulp.dest('./dist'))
.pipe(browserSync.stream());
});
gulp.task('serve', function() {
browserSync.init({
proxy: 'http://mamp-site.dev'
});
gulp.watch('./src/scss/**/*.scss', ['sass']);
gulp.watch('./src/coffee/**/*.coffee', ['coffee']);
});
每次我进行更改时,Browsersync 都会成功重新加载我编译的 JS,但不会重新加载我编译的 CSS。我知道在gulp.dest() 之后放置browserSync.stream() 是正确的,因为Browsersync 说它only cares about your CSS when it's finished compiling。我还验证了我的 Sass 正在编译。
为什么 Browsersync 可以用于我的 'coffee' 任务而不是我的 'sass' 任务?这是我第一次尝试 gulp,所以我希望它是简单的。
编辑:仅在 'serve' 任务中观看 'sass' 有效,但不适用于 'sass' 和 'coffee'
【问题讨论】:
-
恕我直言:你应该尝试 webpack 并离开 gulp..
-
@Hardy,对于这样的事情,webpack 不是矫枉过正吗?我只做了很少的研究。是什么让 webpack(或任何其他模块打包器)比 gulp 甚至 grunt 之类的任务运行器更好?
-
@Hardy,FWIW 我在 Drupal 主题上使用它
-
我不认为 webpack 对于这种东西是“矫枉过正”。 Gulp 总是比 grunt 好,因为 gulp 是关于流和构建复杂管道的。它使用 node.js 的流,执行速度更快,因为它不会像 grunt 那样打开/关闭文件,也不会一直创建中间副本。
标签: javascript coffeescript gulp browser-sync