2017-09-11 1 views
1

J'ai récemment utilisé GULP pour la construction. Mais j'ai couru dans un mur, tout en essayant d'exécuter mes "scripts" de nettoyage.GULP tap.js - impossible de lire la propriété

l'erreur

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> 

Le Gulp "Command" J'utilise est Je crois que l'erreur est ".pipe (tap (fonction (fichier, t) {" - Mais Je ne sais pas comment « pas » utiliser ce

// 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()); 
}); 

Répondre

2

Le problème est dans cette ligne de code.

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(); 
} 

Il n'y a pas de propriété _readableState dans obj donc quand nous essayons de lire ended nous obtenons une erreur. Avec un peu de googling, nous sommes en mesure d'atterrir un issue discussed on github similaire, ce qui confirme que, en effet, _readableState n'est pas un must dans les flux.

Les flux n'ont pas besoin d'avoir une propriété d'état _readableState. Ils obtiendront ceci si l'implémentation hérite de stream.Readable, mais sinon il n'y a pas de telle garantie.

Si nous nous dirigeons ensuite to the Node.js docs on découvre qu'il existe plusieurs types de flux:

Il existe quatre types de flux fondamentaux au sein Node.js:

  • - ruisseaux Readable à partir de laquelle les données peuvent être lues (par exemple fs.createReadStream()).
  • Lecture/écriture - Flux auxquels les données peuvent être écrites (par exemple, fs.createWriteStream()).
  • Duplex - flux lisibles et enregistrables (par exemple net.Socket).
  • Transformation - Flux duplex qui peuvent modifier ou transformer les données lors de leur écriture et de leur lecture (par exemple, zlib.createDeflate()).

Retour au code, obj est ce que vous revenez dans votre rappel:

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

A savoir:

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

Est-ce un flux, mais pas un flux lisible? Si c'est le cas, le code échouera. Gulp utilise des flux de vinyle et vous avez probablement besoin de le convertir en un flux "normal". Ce gulp plugin semble faire le travail.

P.S. Aussi, je suggère que vous jetez un oeil aux exemples tap fournit, êtes-vous sûr que vous devez retourner un flux dans votre cas?