Gulp:如何同时使用Browsersync、Sourcemaps、Autoprefixer和CSS Cleaner?

7
请看下面。我目前代码的问题是,Sourcemaps没有通过Browsersync注入。我是否漏了什么或者做错了什么?
参考: https://www.browsersync.io/docs/gulp/#gulp-sass-maps
// requirements
var gulp         = require('gulp');
var sass         = require('gulp-ruby-sass');
var browserSync  = require('browser-sync').create();
var prefix       = require('gulp-autoprefixer');
var rename       = require('gulp-rename');
var sourcemaps   = require('gulp-sourcemaps');
var cssclean     = require('gulp-clean-css');

// create sass tasks
gulp.task('sass', function() {
  return sass('assets/scss/style.scss', {sourcemap: true, style: 'compact'})
    .on('error', function (err) {
        console.error('Error!', err.message);
    })
    .pipe(rename({suffix: '.min'}))
    .pipe(cssclean())
    .pipe(prefix("last 2 versions", "> 1%", "ie 8", "Android 2", "Firefox ESR"))
    .pipe(sourcemaps.write('.'))
    .pipe(gulp.dest('assets/styles'))
    .pipe(browserSync.stream({match: '**/*.css'}))
});

gulp.task('serve', ['sass'], function() {

  browserSync.init({
    proxy: "localhost/portfolio2014",
    open:false
  });

  gulp.watch("assets/scss/**/*.scss", ['sass']);
  gulp.watch(["assets/styles/*.css", "site/**/*", "content/**/*", "assets/javascript/*.js"]).on('change', browserSync.reload);
});

// default task (just run gulp)
gulp.task('default', ['serve'] );
1个回答

4

你是否必须使用 gulp-ruby-sass?下面的 gulpfile.js 使用 gulp-sass 添加了 sourcemaps,并在保存带有 sourcemaps 的 .scss 文件时更新浏览器。

        var gulp = require('gulp');
        var sass = require('gulp-sass');
        var browserSync = require('browser-sync').create();
        var prefix = require('gulp-autoprefixer');
        var rename = require('gulp-rename');
        var sourcemaps = require('gulp-sourcemaps');
        var cssclean = require('gulp-clean-css');

        // create sass tasks
        gulp.task('sass', function () {
            return gulp.src('assets/scss/test.scss')
                .pipe(sourcemaps.init())
                .pipe(sass())
                .pipe(rename({ suffix: '.min' }))
                .pipe(cssclean())
                .pipe(prefix("last 2 versions", "> 1%", "ie 8", "Android 2", "Firefox ESR"))
                .pipe(sourcemaps.write(''))
                .pipe(gulp.dest('assets/styles'))
                .pipe(browserSync.stream({ match: '**/*.css' }))
                .on('error', function (err) {
                    console.error('Error!', err.message);
                });
        });

        gulp.task('serve', ['sass'], function () {

            browserSync.init({
                proxy: "localhost/portfolio2014",
                open: false
            });

            gulp.watch("assets/scss/**/*.scss", ['sass']);
            gulp.watch(["assets/styles/*.css", "assets/javascript/*.js"]).on('change', browserSync.reload);
        });

        // default task (just run gulp)
        gulp.task('default', ['serve']);

感谢您的帮助。奇怪的是,我的答案现在似乎可以工作了,但这个答案不行。我需要再仔细研究一下,看看能不能想出更好的解决方案。无论如何,您的帮助确实让我受益匪浅,再次感谢! - gburning
很高兴能够帮忙。上面的代码有点像你的代码和我用来测试它的代码的混合体 - 我不得不启动一个服务器来使用browserSync,并更改了一些文件名,这可能是为什么它没有立即起作用的原因。 - Duderino9000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接