gulp sass.logError在visual studio task runner中不起作用

时间:2016-06-08 13:28:46

标签: visual-studio-2015 gulp gulp-sass

请考虑以下代码:

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文件无法编译。可能发生了什么?

2 个答案:

答案 0 :(得分:6)

亚历,

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

这可以在路径下的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中的控制台。

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

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":
}

以下是一个示例结果。

example of gulp-error message in Visual Studio

答案 1 :(得分:1)

这似乎是由于Microsoft ASP.NET and Web Tools中的错误造成的。现在发布了一个新版本,预览2,这个问题似乎已经解决了。

因此无需解决方法。