Georgy Malinovskiy
Georgy Malinovskiy

Reputation: 41

gulp sass watch task @import issue

I wanted to try gulp with sass and run into problems. I have following sass directory:

main.scss //all custom styling
mixins.scss //custom mixins
variables.scss //custom variables
style.scss //file that imports all the above with bootstrap and fontawesome

When i run gulp, everything compiles and there are no errors, i get the correct sytle.min.css with all the styling included. But then i change one of the watched files (main.scss || mixins.scss || variables.scss) I get one of the following errors: "undefined variable", "no mixin named ..." accordingly.

Also if I change and save main.scss i get no errors but none of the custom scss files get included into css, only bootstrap with fontawesome get compiled.

What is wrong with my setup?

gulpfile.js

var gulp = require('gulp'),
    sass = require('gulp-sass'),
    notify = require("gulp-notify"),
    concat = require('gulp-concat'),
    minifycss = require('gulp-minify-css'),
    uglify = require('gulp-uglify'),
    rename = require('gulp-rename')
    bower = require('gulp-bower')
    merge = require('merge-stream')
    watch = require('gulp-watch');

var config = {
    destPath: './dist',
    sassPath: './src/sass',
    jsPath: './src/js',
    bowerDir: './src/components'
}

gulp.task('bower', function() {
    return bower()
    .pipe(gulp.dest(config.bowerDir));
});

gulp.task('icons', function() {
    var fontawesome = gulp.src(config.bowerDir + '/font-awesome/fonts/**.*')
    .pipe(gulp.dest('./src/fonts'));

    var bootstrap = gulp.src(config.bowerDir + '/bootstrap-sass/assets/fonts/bootstrap/**.*')
    .pipe(gulp.dest('./src/fonts/bootstrap'));

    return merge(fontawesome, bootstrap);
});


gulp.task('sass', function() {
    console.log(config.sassPath);
    var stream = gulp.src([config.sassPath + '/style.scss'])
        .pipe(sass().on('error', sass.logError))
        // .pipe(concat('style.css'))
        .pipe(minifycss())
        .pipe(rename('style.min.css'))
        .pipe(gulp.dest(config.destPath));
    return stream;
});

gulp.task('js', function() {
    var stream = gulp.src([config.bowerDir + '/jquery/dist/jquery.js', config.bowerDir + '/bootstrap-sass/assets/javascripts/bootstrap.js', config.jsPath + '/*.js'])
        .pipe(concat('script.js'))
        .pipe(uglify())
        .pipe(rename('script.min.js'))
        .pipe(gulp.dest(config.destPath)); 
    return stream;
});

gulp.task('watch', function(){
    watch([config.sassPath + '/*.scss'], function(event, cb) {
        gulp.start('sass');
    });
    watch([config.jsPath + '/*.js'], function(event, cb) {
        gulp.start('js');
    });
});

gulp.task('default', ['bower', 'icons', 'js','sass', 'watch']);

style.scss

@import "./variables.scss";
@import "./mixins.scss";
@import "../components/bootstrap-sass/assets/stylesheets/bootstrap.scss";
@import "../components/font-awesome/scss/font-awesome.scss";
@import "./main.scss";

Upvotes: 2

Views: 1649

Answers (1)

Georgy Malinovskiy
Georgy Malinovskiy

Reputation: 41

Ok, so I fixed it by adding timeout to my watch task before calling sass task:

watch([config.sassPath + '/*.scss'], function(event, cb) {
    setTimeout(function(){
        gulp.start('sass');
    }, 1000);
});

It's either the IDE (sublime 2) on save delay or server ping problem.

Upvotes: 2

Related Questions