允许用户提供的执行字符串with child_process.spawn()

时间:2016-10-07 20:48:08

标签: node.js child-process

使用node.js child_process#spawn,它可能如下所示:

const child = cp.spawn('npm', ['install','-D','suman'], {});

或者像这样:

const child = cp.spawn('foo', ['bar','baz'], {});

我的lib用户将提供一个命令字符串,类似于NPM脚本。

在package.json

中,NPM脚本可能如此
scripts : {
  'test': 'npm test'
}

在我的lib中,用户可能会提供任何内容,例如:

'watchProcess': {
  'a' :{
     script: 'foo bar baz',
     include: [],
     exclude: []
   },
 'b' :{
     script: 'node rolo cholo',
     include: [],
     exclude: []
   },

 'c' :{
     script: 'java biz bang',
     include: [],
     exclude: []
   }

}

我是否需要执行任何特殊操作来解析watchProcess.a.script / watchProcess.b.script / watchProcess.c.script字符串? 或者我只是通过空格分割来标记它,然后只是放入child_process.spawn?

2 个答案:

答案 0 :(得分:1)

你可以把你的字符串放在关键脚本上并对它们进行标记(如你所说),你无能为力!

也许你想要从字符串中挑选出某些字符,但这大部分时间都不需要。

答案 1 :(得分:0)

是的,鉴于我对此进行了简短的测试,以下似乎就是所需要的:

const cp = require('child_process');

const execString = 'npm install --save suman';

const execStringArray = String(execString).split(/\s+/);  <<< key part
const executable = execStringArray.shift();

const child = cp.spawn(executable, execStringArray, {});

最终用纯文本看起来像:

const child = cp.spawn('npm', ['install','--save-dev','suman'], {});