Search code examples
javascriptgulpphpstormgulp-sass

ReferenceError in gulpfile


var gulp = require('gulp');
var sass = require('gulp-sass');

gulp.task('sass', done => {
    gulp.src('./css/**/*.sass')
        .pipe(sourcemaps.init())
        .pipe(sass({outputStyle: 'expanded'}).on('error', sass.logError))
        .pipe(sourcemaps.write('.'))
        .pipe(gulp.dest('.'));

    done()
});

gulp.task('sass:watch', done => {
    gulp.watch('./css/**/*.sass', gulp.series('sass'));

    done()
});

gulp.task('compressed-js', done => {
    gulp.src('js/src/*.js')
        .pipe(uglify())
        .pipe(rename({suffix: '.min'}))
        .pipe(gulp.dest('js'));

    done()
});

gulp.task('compressed-js:watch', done => {
    gulp.watch('./js/src/*.js', gulp.series('compressed-js'));

    done()
});

In the phpstorm getting this error: "ReferenceError: sourcemaps is not defined"


Solution

  • The error is pretty self-explanatory: you're referring to the sourcemaps variable while it doesn't exist.

    Normally, you would need to declare it at the top of your gulpfile, like so:

    var sourcemaps = require('gulp-sourcemaps');
    

    However, Gulp 4 has sourcemap functionality built-in, so you can rewrite your sass task like this:

    gulp.task('sass', () =>
      gulp.src('./css/**/*.sass', { sourcemaps: true })
        .pipe(sass({ outputStyle: 'expanded' }).on('error', sass.logError))
        .pipe(gulp.dest('.', { sourcemaps: '.' }))
    );
    

    Note that I removed the done callback, which isn't needed if you just return the stream.

    Note that you will run into the same problem when running the compressed-js task. You'll need to define uglify and rename:

    var uglify = require('gulp-uglify');
    var rename = require('gulp-rename');
    

    And make sure the packages you require are installed.