web-dev-qa-db-ja.com

gulp-sass、プロパティ名が無効な場合に監視が停止する

エラーメッセージが発生すると、ウォッチは停止します。

stream.js:94
      throw er; // Unhandled stream error in pipe.
            ^
source string:51: error: invalid property name 

ウォッチを実行し続け、エラーの場所を特定する方法。

うなり声はエラーに対処でき、停止する必要はありません。

styleSheet.scss:41: error: invalid property name

そうしないと、エラーが発生したときにコマンドラインで「gulp」と入力し続ける必要があります。

40
olo

この回答は、Gulpへの最近の変更を反映するために追加されました。 OPの質問に関連するため、元の回答を保持しました。 Gulp 2.xを使用している場合は、2番目のセクションにスキップします


元の応答、Gulp 1.x

_errLogToConsole: true_をオプションとしてsass()メソッドに渡すことにより、このデフォルトの動作を変更できます。

あなたのタスクは今、このように見えるかもしれません:

_gulp.task('sass', function () {
  gulp.src('./*.scss')
    .pipe(sass())
    .pipe(gulp.dest('./'));
});
_

.pipe(sass())行を変更して、_errLogToConsole: true_オプションを含めます。

_.pipe(sass({errLogToConsole: true}))
_

これは、エラーロギングを使用したタスクの外観です。

_gulp.task('sass', function () {
  gulp.src('./*.scss')
    .pipe(sass({errLogToConsole: true}))
    .pipe(gulp.dest('./'));
});
_

エラー出力は、次のようにインラインになります。

_[gulp] [gulp-sass] source string:1: error: invalid top-level expression
_

Nmpjs.orgで _gulp-sass_オプションと設定 の詳細を読むことができます。


Gulp 2.x

Gulp 2.xでは、errLogToConsoleは使用できなくなりました。幸いなことに、_gulp-sass_にはエラーを処理するメソッドがあります。 on('error', sass.logError)を使用します。

_gulp.task('sass', function () {
  gulp.src('./sass/**/*.scss')
    .pipe(sass().on('error', sass.logError))
    .pipe(gulp.dest('./css'));
});
_

よりきめ細かな制御が必要な場合は、コールバック関数を自由に提供してください。

_gulp.task('sass', function () {
  gulp.src('./sass/**/*.scss')
    .pipe(sass()
      .on('error', function (err) {
        sass.logError(err);
        this.emit('end');
      })
    )
    .pipe(gulp.dest('./css'));
});
_

これは、プロセス制御に関する詳細情報が必要な場合に読むのに適したスレッドです。 https://github.com/gulpjs/gulp/issues/259#issuecomment-55098512

83
chantastic

実際、上記のanwsersは機能しません(gulp-sass 3.XXを使用しています)。実際に機能したもの:

 gulp.task('sass', function () {
    return gulp.src(config.scssPath + '/styles.scss')
        .pipe(sourcemaps.init())
        .pipe(sass({ outputStyle: 'compressed' })
            .on('error', sass.logError)
        )
        .pipe(sourcemaps.write('./'))
        .pipe(gulp.dest(config.cssPath))
});

Gulp-sass 3.x.xで「sass.logError(err);」を使用していたとき「this.emit( 'end');は関数ではない」というエラーを常に受け​​取ります。今私が使用しているとき:

.pipe(sass({ outputStyle: 'compressed' })
    .on('error', sass.logError)
 )

すべてが魅力のように機能している

11
born2fr4g

Gulp "^ 2.0.0"では、オプションerrLogToConsoleは機能しなくなります。代わりに、_gulp-sass_には、内部で_gulp-util_を使用する組み込みのエラーログコールバックがあります。また、gulpにはエラー時にプロセスを強制終了する問題があるため、watchを使用している場合はthis.emit('end')を呼び出す必要があります https://github.com/gulpjs/gulp/issues/259#issuecomment-55098512

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

//dev
sass(config.sassDev)
  .on('error', function(err) {
     sass.logError(err);
       this.emit('end'); //continue the process in dev
     })
)

//prod
sass(config.sassProd).on('error', sass.logError)
_
6
dtothefp

A Gulp 3ユーザーの場合:

Gulp 2.xに関しては、上記の@dtotheftpソリューションが気に入りました。興味深いことに、少なくとも@ 3.9.1の下では、Gulp3以降では機能しません。

_.on('error', function(err){
    sass.logError(err);
    this.emit('end'); //continue the process in dev
})
_

私を取得します

_TypeError: this.emit is not a function
    at Function.logError (/depot/myproject/node_modules/gulp-sass/index.js:181:8)
_

苦情はgulpfileのthis.emit()からではなく、sass node-moduleから、つまり前の行から来ていることに注意してください。

これは私のために働く:

_.on('error', function(err){
    gutil.log(err);
    this.emit('end');
})
_

私はすべてのエラーを取得します²、時計は決して終わりません;)(plumber()の直後にgulp.src()も使用しています。

(はい、sass.logErrorは gutil ...に基づいていると言われているため、修正は非常に非論理的かもしれません。)

²何らかの理由でセットアップ前にサイレントになった未定義のマクロでも。

2
Frank Nocke