2011-04-01 38 views
1

如果我創建一個test目錄和它把foo.js,然後我可以運行Node.js的產卵和`*`選擇多個文件

node test/* 

就好運行目錄中的所有文件。但是,如果在創建父目錄JS文件,並把它做

spawn('node', ['test/*']); 

然後它給了我stderr輸出

Error: Cannot find module '/mypath/test/*'

我已經認識到,這是因爲*是通過提供便利外殼(對吧?)。所以,我的問題是:

  1. 有沒有辦法做我想要的spawn不使用fstest目錄的內容看?
  2. shell如何翻譯test/*,是否有可能從我的應用程序中獲取這種超棒的力量?

回答

2

不起眼exec功能,在API文檔作爲產卵子進程僅僅更高級別的抽象描述,確實給出預期的結果:

require('child_process').exec('node test/*'); 

工作正常。看起來spawn轉義了它的論據而exec沒有。

+0

現在接受這個答案爲「答案」,但真正尋找一個更徹底的解釋如何'spawn'和'exec'對待globes的不同。 – 2011-04-08 17:43:29

2

*功能(與?,{}等一起)由Glob提供。

幸運的是,有人爲glob創建了Node.JS綁定 - node-glob

npm install glob安裝它,然後用它像這樣(未測試):

var glob = require('glob'); 
glob('test/*', null, function (err, matches) { 
    matches.forEach(function (match) { 
     spawn('node', match); 
    }); 
}) 
+2

對於「某人」,你指的是npm的創造者Isaac Schlueter。 :)感謝指針! – 2011-04-01 04:14:38