2016-05-26 13 views
1

私はノードv4.4.0とWindows 10です。私はbunyanを使用してノードアプリケーションをログしています。エラー:WindowsでENOENTを生成する

try { 
    var fs = require('fs'); 
    var path = require('path'); 
    var spawn = require('child_process').spawn; 
    var through = require('through'); 
} catch (err) { 
    throw err; 
} 

var prettyStream = function() { 
    // get the binary directory of bunyan 
    var bin = path.resolve(path.dirname(require.resolve('bunyan')), '..', 'bin', 'bunyan'); 
    console.log(bin); // this outputs C:\www\nodeapp\src\node_modules\bunyan\bin\bunyan, the file does exist 

    var stream = through(function write(data) { 
     this.queue(data); 
    }, function end() { 
     this.queue(null); 
    }); 

    // check if bin var is not empty and that the directory exists 
    if (bin && fs.existsSync(bin)) { 
     var formatter = spawn(bin, ['-o', 'short'], { 
      stdio: [null, process.stdout, process.stderr] 
     }); 
     // stream.pipe(formatter.stdin); // <- did this to debug 
    } 

    stream.pipe(process.stdout); // <- did this to debug 

    return stream; 
} 

伐採が原因私は、関数の残りの部分をデバッグするにはこれをした、stream.pipe(process.stdout);を使用し、実際にコンソールに出してくれる。

しかし私は、エラーメッセージが表示されます。

Error: spawn C:\www\nodeapp\src\node_modules\bunyan\bin\bunyan ENOENT 
    at exports._errnoException (util.js:870:11) 
    at Process.ChildProcess._handle.onexit (internal/child_process.js:178:32) 
    at onErrorNT (internal/child_process.js:344:16) 
    at nextTickCallbackWith2Args (node.js:442:9) 
    at process._tickCallback (node.js:356:17) 
    at Function.Module.runMain (module.js:443:11) 
    at startup (node.js:139:18) 
    at node.js:968:3 

私はこれを推測しているが、Windowsのエラーです。誰にでもアイデアはありますか?

答えて

8

私はそれを手に入れました。 Windowsでは、bunyanはコンソールとしてプログラムとして認識されず、コマンドとして認識されます。だからそれを呼び出すにはcmdの使用が必要でした。また、コンソールがアクセスできるように、グローバルにbunyanをインストールする必要がありました。

if (!/^win/.test(process.platform)) { // linux 
    var sp = spawn('bunyan', ['-o', 'short'], { 
     stdio: [null, process.stdout, process.stderr] 
    }); 
} else { // windows 
    var sp = spawn('cmd', ['/s', '/c', 'bunyan', '-o', 'short'], { 
     stdio: [null, process.stdout, process.stderr] 
    }); 
} 
-1

私は、binまたは何かのパスが間違っていると思います。 ENOENT = [E] rror [NO] [ENT] ry

+0

アイデア?ファイルbunyanは存在します:/ –

1

cross-spawnを使用して同じ問題を解決しました。それは私が共通のコマンドの1つとしてウィンドウとMac OSの両方でコマンドを生成することができます。

+0

最後に!これは私のために働いた:)ありがとう! –

関連する問題