gulp sass.logError 在 visual studio 任务运行器中不工作

gulp sass.logError not working in visual studio task runner

考虑以下代码:

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

module.exports = function (sourcedir, targetDir, directTarget)
{
    return function ()
    {
        var source = directTarget != null ? directTarget : sourcedir + '/**/*.scss';

        return gulp.src(source, { base: sourcedir })
            .pipe(sass({ includePaths: [`${sourcedir}/**/`] }).on('error', sass.logError))
            .pipe(gulp.dest(targetDir))
            .pipe(gdebug());
    }
}

当 运行 在 visual studio 任务运行器中执行此操作时,sass 编译中的所有错误都被完全隐藏。如果我用简单的 function(e){console.log(e)} 替换 sass.logError,错误事件将按预期记录。

我很确定这能像以前一样工作,我最近才注意到我有一些 scss 文件静默无法编译。可能发生了什么?

亚历克斯,

我们今天遇到了完全相同的问题,正在寻找替代方案。事实证明 sass.logError 函数不会将错误传递回 gulp 系统,而是传递给 'process.stderr.write(message + '\n');'

这个是在路径下的index.js文件中找到的

\Project\nodule_modules\gulp-saas\index.js\

该函数在第 170 行 (apx) 中定义为。

//////////////////////////////
// Log errors nicely
//////////////////////////////
gulpSass.logError = function logError(error) {
  var message = new gutil.PluginError('sass', error.messageFormatted).toString();
  process.stderr.write(message + '\n');
  this.emit('end');
};

作为解决方法,我修改了文件以打印到 gutil.log 方法,该方法又传递到 visual studio 中的控制台。

首先,您需要在文件顶部输入一个要求条目(其余部分)作为(这只会产生漂亮的颜色)

var chalk = require('chalk');

然后修改logError如下。

//////////////////////////////
// Log errors nicely
//////////////////////////////
gulpSass.logError = function logError(error) {
  gutil.log('Error', chalk.red('Uncaught error while processing task ') + '\'' +  chalk.cyan('saas') + chalk.red('\'.'));
  gutil.log('Message', error.formatted);
  this.emit('end');
};

您会看到控制台打印了两行,第一行是一条通用消息(以红色显示以引起您的注意),然后是消息。 error 中传递的对象是具有以下属性的标准 Javascript 对象。

{
    "formatted":
    "message":,
    "column":,
    "line":,
    "file":,
    "status":,
    "messageFormatted":,
    "stack":,
    "showProperties":,
    "plugin":
}

这是一个示例结果。

这似乎是由于 Microsoft ASP.NET and Web Tools 中的错误所致。现在有新版本发布,Preview 2,这个问题好像解决了。

因此不需要解决方法。