Node.js生成和`*`用于选择多个文件

时间:2011-04-01 04:02:36

标签: bash node.js

如果我创建一个test目录并将foo.js放入其中,那么我可以运行

node test/*

很好地运行目录中的所有文件。但是如果在父目录中创建一个js文件并让它执行

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

然后它给了我stderr输出

  

错误:找不到模块'/ mypath / test / *'

我已经意识到这是因为*是shell提供的便利(对吧?)。所以,我的问题是:

  1. 有没有办法在不使用spawn读取fs目录的内容的情况下执行我想要的test
  2. shell如何翻译test/*,是否有可能从我的应用中获取这种强大功能?

2 个答案:

答案 0 :(得分:2)

*功能(以及?,{}等)由Glob提供。

幸运的是,有人为glob - node-glob创建了Node.JS绑定。

使用npm install glob安装它,然后像这样使用它(未经测试):

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

答案 1 :(得分:2)

简单的exec函数,在API文档中描述为仅仅是产生子进程的高级抽象, 会产生所需的结果:

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

工作正常。 spawn似乎逃避了它的论点而exec没有。{/ p>