• # Stack traces...

    Posté par (site web personnel) . En réponse à la dépêche Node.js passe la sixième vitesse. Évalué à 5. Dernière modification le 13 mai 2016 à 11:40.

    Bon, par contre, pour les stack traces, il y a encore des progrès à faire. J'ai rencontré un bug sur cozy-desktop, le futur logiciel de synchronisation entre son ordinateur personnel et son cloud personnel. Et je peux vous dire qu'avoir une stack trace qui ne fait référence à aucun fichier du projet, ça n'aide pas à débugger.

    Pour reproduire, il suffit de prendre ce bout de code simplifié :

    // err.js
    const async = require('async')
    const fs = require('fs')
    const stream = require('stream')
    let source
    async.waterfall([
     (next) => {
     const stream = fs.createReadStream('.npmignore')
     next(null, stream)
     },
     (stream, next) => {
     source = stream
     source.on('error', (err) => {
     console.log('Error on source', err)
     })
     const target = fs.createWriteStream('.npmignore.old')
     next(null, target)
     },
     (target, next) => {
     target.on('error', (err) => {
     console.log('Error on target', err)
     })
     source.pipe(target)
     target.on('finish', next)
     }
    ], (err) => {
     console.log('Done', err)
    })

    et de le lancer :

    $ node -v
    v6.1.0
    $ npm init
    $ npm install async
    $ node err.js
    Error on source { Error: ENOENT: no such file or directory, open '.npmignore'
     at Error (native) errno: -2, code: 'ENOENT', syscall: 'open', path: '.npmignore' }

    Alors, ici, le code paraît bizarre parce que j'ai essayé de reproduire l'exemple de cozy-desktop en le simplifiant beaucoup. Dans cozy-desktop, quand on ajoute un fichier en local qui vient du serveur cozy, on fait d'autres étapes comme s'assurer que le répertoire dans lequel on va écrire le fichier existe. La création du stream source est également plus compliqué : si on a déjà une copie du fichier en local, on va utiliser cette copie, sinon on va passer par le réseau pour récupérer le fichier depuis le serveur. Etc.