2017-08-01 11 views
0

我有一個吞噬任務。如果缺少一個文件(foobar.json),我希望它引發一個自定義錯誤消息。如果變量未定義,我如何在Gulp中拋出自定義錯誤消息

例子:

var gulp = require('gulp'); 
var plumber = require('gulp-plumber'); 
var notify = require("gulp-notify"); 
var foobar = './foobar.json'; 

gulp.task('my-task'), function() { 
    if (typeof foobar === 'undefined') { 
    console.log('foobar.json file is required to run my-task. Blau Blau Blau.'); 
    } 
    else { 
    something.init(); 
    } 
}); 

當然的console.log不起作用。我該怎麼做呢?

請不要標記爲重複。毫無疑問,它專門處理檢查文件這個簡單問題,並拋出一個簡單的消息。所有我能找到的問題都要比這個簡單的問題複雜得多。

+0

我,當我用Google搜索 「咕嘟咕嘟自定義錯誤消息」 是的第一件事是:HTTPS:/ /stackoverflow.com/questions/29734769/nicely-throwing-an-error-in-gulp-task – DevNebulae

+0

是的,我看到了一個。但它需要gulpUtil。文章說:「這篇文章很舊,可能已經過時了」。 –

+0

我建議你這麼做,因爲gulp-util包實際上會處理很多錯誤消息utils,比如堆棧跟蹤等。此外,我會說@Hitmands解決方案是正確的,並且您需要fs模塊來讀取磁盤。 – DevNebulae

回答

-1

這個工作,而不需要額外的模塊:

var gulp = require('gulp'); 
var foobar = './foobar.json'; 

gulp.task('my-task'), function() { 
    if (foobar.length) { 
    console.log('A foobar.json file is required to run my-task. Blau Blau Blau.'); 
    } 
    else { 
    something.init(); 
    } 
}); 
+0

我不知道它是否僅僅是一個例子,但是,你的代碼段中的if語句是一個常量表達式,並且總是「真」。 – Hitmands

+0

IF正在檢查是否不檢查變量是否存在。它正在檢查它是否有長度。如果文件不存在,它會返回false。如果文件在那裏,它有長度,並確實返回true。 –

+0

請仔細閱讀您的腳本。另請閱讀[常量表達式]是什麼(https://stackoverflow.com/questions/3755524/example-of-something-which-is-and-is-not-a-constant-expression-in-c) – Hitmands

1

使用Gutil

var fs = require('fs'); 
var gulp = require('gulp'); 
var foobar = './foobar.json'; 

const gutil = require("gulp-util"); 

gulp.task('my-task'), function() { 
    if (!fs.existsSync(foobar)) { 
    throw new gutil.PluginError({ 
     plugin: 'my-task', 
     message: `cannot read "${foobar}"` 
    }); 
    } 
}); 
+0

我沒有低估這一點,但我不認爲我會用這個,因爲我想避免增加兩個模塊來添加錯誤消息。是否有可能使用Plummer來做到這一點? –

+0

'fs'是一個內置的模塊,它會在您安裝節點後提供。 'Gutil'(又名gulp utils)的設計與吞噬配對,增強您的流量(彩色日誌,vynil文件,適當的吞嚥錯誤管理等)。不要害怕,他們是有用的東西。 – Hitmands