简体   繁体   中英

Gulp sass compiles to wrong directory only when triggered by gulp watch

This one has me scratching my head for sure. I have my project set up like so

.
├── app
|   └── styles
|          ├── foundation
|          |       └── foundatipn.scss
|          └── app.scss
├── build
|   └── styles
└         └── app.css

My gulp-sass task compiles the app.scss correct and places the final file in build.styles.

However, when the sass task is triggered by gulp watch it puts a css file in app/styles/. It still compiles the correct file to build/styles.

Relevant code below

var gulp = require('gulp'),
    browserSync = require('browser-sync').create(),
    notify = require('gulp-notify'),
    include = require('gulp-include'),
    autoprefixer = require('gulp-autoprefixer'),
    sass = require('gulp-ruby-sass'),
    sourcemaps  = require('gulp-sourcemaps'),
    cssnano = require('gulp-cssnano'),
    browserify = require('browserify'),
    source = require('vinyl-source-stream');
var reload = browserSync.reload;
var dest = './build';
var src = './app';

gulp.task("sass", function(cb){
    //Compile Foundation SCSS to CSS
    var stream = sass('app/styles/app.scss',{
        loadPath: ['app/styles/foundation'],
        })
        //.pipe(notify("Compiling SCSS, Autoprefixeing, Minifying and Creating Sourcemaps"))
        .pipe(sourcemaps.init())
        .pipe(autoprefixer({
            browsers: ['last 2 versions', 'ie >= 9', 'and_chr >= 2.3']
        }))
        .pipe(cssnano())
        .pipe(sourcemaps.write('/'))
        .pipe(gulp.dest(dest + '/styles'))
        .pipe(reload({stream: true}));
    return stream;
});

gulp.task('watch', function(){
    gulp.watch('app/**/*.html', ['markup']);
    gulp.watch('app/styles/**/*.scss', ['sass']);
    gulp.watch('app/scripts/**/*.js',['js']);
    gulp.watch('app/images/**/*.png', ['images']);
});

depending on what version of gulp / gulp sass you are using it could be your "base".

Something about gulp using /**/ to set it's base for dest files/folders.

see this post: how base option affects gulp.src & gulp.dest

More importantly this line: If you want to avoid this you have to explicitly specify the base option:

gulp.src('some/path/**/js/*.js', {base:'.'}) .pipe(gulp.dest('output'));

I hope it helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM