2017-09-11 3 views
1

Ich habe vor kurzem mit GULP für den Bau erstellt. Aber ich bin in eine Wand gelaufen, während ich versucht habe, meine "Skripte" zu säubern.GULP tap.js - Eigenschaft kann nicht gelesen werden

der Fehler

D:\GitHub\ASGARD\baseThemeV2\src>gulp default 
[23:13:03] Using gulpfile D:\GitHub\ASGARD\baseThemeV2\src\gulpfile.js 
[23:13:03] Starting 'lint:js'... 
[23:13:03] Starting 'build:plugins'... 
[23:13:03] Starting 'build:js'... 
[23:13:03] Starting 'build:less'... 
[23:13:03] Starting 'build:images'... 
[23:13:03] Starting 'build:svgs'... 
[23:13:03] Starting 'build:fonts'... 
[23:13:03] Starting 'build:favicon'... 
[23:13:03] Finished 'build:favicon' after 2.19 ms 
[23:13:03] Finished 'build:plugins' after 78 ms 
D:\GitHub\ASGARD\baseThemeV2\src\node_modules\gulp-tap\lib\tap.js:60 
    if (obj instanceof baseStream && !obj._readableState.ended) { 
                 ^

TypeError: Cannot read property 'ended' of undefined 
    at DestroyableTransform.modifyFile (D:\GitHub\ASGARD\baseThemeV2\src\node_modules\gulp-tap\lib\tap.js:60:57) 
    at DestroyableTransform.Transform._read (D:\GitHub\ASGARD\baseThemeV2\src\node_modules\through2\node_modules\readable-stream\lib\_stream_transform.js:182:10) 
    at DestroyableTransform.Transform._write (D:\GitHub\ASGARD\baseThemeV2\src\node_modules\through2\node_modules\readable-stream\lib\_stream_transform.js:170:83) 
    at doWrite (D:\GitHub\ASGARD\baseThemeV2\src\node_modules\through2\node_modules\readable-stream\lib\_stream_writable.js:406:64) 
    at writeOrBuffer (D:\GitHub\ASGARD\baseThemeV2\src\node_modules\through2\node_modules\readable-stream\lib\_stream_writable.js:395:5) 
    at DestroyableTransform.Writable.write (D:\GitHub\ASGARD\baseThemeV2\src\node_modules\through2\node_modules\readable-stream\lib\_stream_writable.js:322:11) 
    at DestroyableTransform.ondata (D:\GitHub\ASGARD\baseThemeV2\src\node_modules\through2\node_modules\readable-stream\lib\_stream_readable.js:612:20) 
    at emitOne (events.js:96:13) 
    at DestroyableTransform.emit (events.js:188:7) 
    at addChunk (D:\GitHub\ASGARD\baseThemeV2\src\node_modules\through2\node_modules\readable-stream\lib\_stream_readable.js:284:12) 

D:\GitHub\ASGARD\baseThemeV2\src> 

Der Gulp "Command" Ich verwende ist Ich glaube, der Fehler ".pipe (Hahn (function (Datei, t) {" - Aber ich weiß nicht, wie „nicht“, diese zu verwenden

// Lint, minify, and concatenate scripts 
gulp.task('build:js', function() { 
    var jsTasks = lazypipe() 
     .pipe(header, banner.full, { package : package }) 
     .pipe(gulp.dest, paths.scripts.output) 
     .pipe(rename, { suffix: '.min' }) 
     .pipe(uglify) 
     .pipe(header, banner.min, { package : package }) 
     .pipe(gulp.dest, paths.scripts.output); 

    return gulp.src(paths.scripts.input) 
     .pipe(plumber()) 
     .pipe(tap(function (file, t) { 
      if (file.isDirectory()) { 
       var name = file.relative + '.js'; 
       return gulp.src(file.path + '/*.js') 
        .pipe(concat(name)) 
        .pipe(jsTasks()); 
      } 
     })) 
     .pipe(jsTasks()); 
}); 

Antwort

2

Das Problem in dieser Codezeile ist.

if (obj instanceof baseStream && !obj._readableState.ended) { 
    obj.on('end', next); 
    return obj.on('data', data = function() { 
    obj.removeListener('end', next); 
    obj.removeListener('data', data); 
    return next(); 
    }); 
} else { 
    return next(); 
} 

Es gibt keine Eigenschaft _readableState in obj daher, wenn wir versuchen, ended lesen wir erhalten einen Fehler. Mit ein wenig Googeln können wir eine ähnliche issue discussed on github landen, die bestätigt, dass _readableState in Streams tatsächlich kein Muss ist.

Streams müssen keine Statuseigenschaft _readableState haben. Sie erhalten dies, wenn die Implementierung von stream.Readable erbt, aber ansonsten gibt es keine solche Garantie.

Wenn wir dann auf to the Node.js docs fahren wir feststellen, dass es verschiedene Arten von Streams:

Es gibt vier grundlegende Stromtypen innerhalb Node.js sind:

  • Lesbare - Ströme aus denen Daten gelesen werden können (zum Beispiel fs.createReadStream()).
  • Beschreibbar - Datenströme, in die Daten geschrieben werden können (z. B. fs.createWriteStream()).
  • Duplex - Streams, die sowohl lesbar als auch beschreibbar sind (z. B. net.Socket).
  • Transformieren - Duplex-Streams, die die Daten beim Schreiben und Lesen modifizieren oder transformieren können (z. B. zlib.createDeflate()).

Zurück zum Code, obj ist, was Sie in Ihrem Rückruf zurück:

obj = lambda(inst.file, utils(this, inst.file), inst); 

Nämlich:

return gulp.src(file.path + '/*.js') 
    .pipe(concat(name)) 
    .pipe(jsTasks()); 

Ist es ein Strom, aber kein lesbaren Stream? Wenn dies der Fall ist, wird der Code fehlschlagen.

Gulp verwendet Vinyl-Streams und Sie müssen es wahrscheinlich in einen "normalen" Stream konvertieren. Diese gulp plugin scheint die Arbeit zu erledigen.

P.S. Auch ich schlage vor, Sie werfen einen Blick auf die Beispiele tap bietet, sind Sie sicher, dass Sie einen Stream in Ihrem Fall zurückgeben müssen?

Verwandte Themen