Почему gulp не выдает ошибку, если путь импорта неверен в файле sass? - PullRequest
0 голосов
/ 10 ноября 2018

У меня вопрос: почему я не получаю сообщение об ошибке из задач gulp, когда я использую неправильный путь импорта в моих файлах scss?

Я использую это задание gulp для компиляции и минимизации моих файлов sass в их целевой каталог

// gulpfile.js
var gulp   = require('gulp');
var sass   = require('gulp-sass');

var frontendSassSrcDir = 'build/frontend/sass/**';
var frontendCssDestDir = 'public/css/';
var backendSassSrcDir  = 'build/backend/sass/**';
var backendCssDestDir  = 'public/css/';


gulp.task('frontend-style', function() {
  return gulp
      .src(frontendSassSrcDir + '/*.scss')
      .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
      .pipe(gulp.dest(frontendCssDestDir))
});

gulp.task('backend-style', function() {
  return gulp.src(backendSassSrcDir + '/*.scss')
      .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
      .pipe(gulp.dest(backendCssDestDir));
});


gulp.task('default-watch', function() {
  gulp.watch('build/frontend/sass/**/*.scss', ['frontend-style']);
  gulp.watch('build/backend/sass/**/*.scss', ['backend-style']);
});

вот структура папок

- project-folder
  - build
    - backend
      - sass
        - backend.scss
    - frontend
      - sass
        - frontend.scss
  - node_modules
  - public
    - css
      - backend.css
      - frontend.css
  gulpfile.js

Вот неправильное содержимое моего файла scss

@import "node_modules/bootstrap/scss/functions";
@import "node_modules/bootstrap/scss/variables";
@import "node_modules/bootstrap/scss/mixins";

если я запускаю эту команду в командной строке, похоже, она работает, потому что я получаю этот вывод, однако он генерирует пустой файл css

$ node_modules/gulp/bin/gulp.js frontend-style

[20:50:40] Using gulpfile /opt/workspace/www/bhajanBook/gulpfile.js
[20:50:40] Starting 'frontend-style'...
[20:50:40] Finished 'frontend-style' after 73 ms

почему он не выдает мне такое же сообщение об ошибке, как эта команда?

$ node_modules/sass/sass.js ./build/frontend/sass/frontend.scss ./public/css/frontend.css

Error: Can't find stylesheet to import.
@import "node_modules/bootstrap/scss/functions";
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
build/frontend/sass/frontend.scss 1:9  root stylesheet

Запуск в командной строке помог мне исправить это

@import "./../../../node_modules/bootstrap/scss/functions";
@import "./../../../node_modules/bootstrap/scss/variables";
@import "./../../../node_modules/bootstrap/scss/mixins";

Я узнал, что on('error', sass.logError) выдает ошибку, если я делаю ошибку в gulpfile.js, но она не должна отвечать за ее перехват?

Есть ли более конкретное решение для отображения сообщения об ошибке, если я сделаю ошибку в scss файлах?

...