2017-07-07 7 views
0

Node.jsを書籍Node.js the Right Wayで学習しています。次の例を実行して、というファイルの変更を、.jsファイルと同じディレクトリに置くのを見ようとしています。監視されたファイルが変更されたときにENSOENTが発生する

"use strict"; 
const 
    fs = require('fs'), 
    spawn = require('child_process').spawn, 
    filename = process.argv[2]; 
if (!filename) { 
    throw Error("A file to watch must be specified!"); 
} 
fs.watch(filename, function() { 
    let ls = spawn('ls', ['-lh', filename]); 
    ls.stdout.pipe(process.stdout); 
}); 
console.log("Now watching " + filename + " for changes..."); 

私は、テキストファイルを変更し、それを保存するとき、私は次のエラーを取得する:

events.js:160 throw er; // Unhandled 'error' event ^

Error: spawn ls ENOENT at exports._errnoException (util.js:1018:11) at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32) at onErrorNT (internal/child_process.js:367:16) at _combinedTickCallback (internal/process/next_tick.js:80:11) at process._tickCallback (internal/process/next_tick.js:104:9)

Node.jsのバージョン:v6.11.0

IDE:Visual Studioのコード1.13.1

OS:Windows 10 64x

答えて

0

Windowsにはlsがありません。代わりにdirを使用してください。

しかし、これは実行可能ファイルではありません。あなたができる.bat.cmdファイルを実行するには、次の

  • スポーンcmd.exeをし、引数としてそれらのファイルを渡す:

    require('child_process').spawn('cmd', ['/c', 'dir']); 
    
  • 使用spawntrueに設定shellオプションで:

    require('child_process').spawn('dir', [], { shell: true }); 
    
  • execの代わりにexecを使用してくださいspawn:それの詳細について

    require('child_process').exec('dir', (err, stdout, stderr) => { ... }); 
    

this section in the official docsを見てみましょう。

EDIT:

私は私はあなたが正しくコメントに疑問を理解わからないんだけど、2番目のオプションのために行く場合、たとえば、あなたはコードは次のようになります。

... 

fs.watch(filename, function() { 
    let dir = spawn('dir', [filename], { shell: true }); 

    dir.stdout.pipe(process.stdout); 
}); 

... 

このコードを少し調整する必要があることにご注意ください。私は今、Windowsマシンにアクセスできないので、メモリからすべてこれを書いているので、自分でテストすることはできません。

+0

申し訳ありませんが、私は 'require'行を変更しました。 "watch"の部分を 'cmd'に置き換えることができますか?私はTypeErrorを "spawnは関数ではない"と言っています。ありがとう。 – Disasterkid

+0

@Disasterkid私はあなたの質問を理解しているか分からないが、回答を編集してみてください。 – Danziger

+0

これは 'let dir = spawn( 'dir'、[filename]、{shell:true})につながります。 ^ TypeError:spawnはFSWatcherの関数 ではありません。 FSWatcher.emit(events.js:191:) のemitTwo(events.js:106:13)(C:¥Users¥Pedram¥Documents¥Node¥hello¥watcher-spawn.js:10:15 ) 7) FSEvent.FSWatcher._handle.onchange(fs。js:1426:12) ' – Disasterkid

関連する問題