请考虑以下代码:
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文件无法编译。可能发生了什么?
答案 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":
}
以下是一个示例结果。
答案 1 :(得分:1)
这似乎是由于Microsoft ASP.NET and Web Tools中的错误造成的。现在发布了一个新版本,预览2,这个问题似乎已经解决了。
因此无需解决方法。