在NodeJs spawn中绑定shell命令

我希望运行NODE_ENV=production node serverNODE_ENV=production node server cd ~/app/cms; npm test cd ~/app/cms; npm test使用NodeJs产生的 cd ~/app/cms; npm test

首先可以实现

 process.env.NODE_ENV = 'production' start = spawn 'node', ['server'], process.env 

但是我怎么能达到第二个?

更新 :如果有人有类似的问题,这里是我的例子在coffeescript:

 testCode = -> testCore = spawn 'npm', ['test'] testCore.stderr.on 'data', (data) -> console.log() process.stderr.write data.toString() testCore.stdout.on 'data', (data) -> print data.toString() testCore.on 'exit', -> path = require 'path' process.chdir path.join(__dirname, "app", "linkParser") testModule = spawn 'npm', ['test'] testModule.stderr.on 'data', (data) -> process.stderr.write data.toString() testModule.stdout.on 'data', (data) -> print data.toString() 

 path = require "path" process.chdir path.join(process.env.HOME, "app", "cms") spawn "npm", "test" 

http://nodejs.org/docs/latest/api/all.html#all_process_chdir_directory

我试图从subprocess调用cd时收到ENOENT错误。

@彼得里昂的答案是有帮助的。 在阅读更多的产卵文档之后,我决定继续下面的内容来保持父进程工作目录的清洁:

CoffeeScript的:

 spawn "npm", "test", cwd: path.join(process.env.HOME, "app", "cms") 

JavaScript的:

 spawn("npm", "test", { cwd: path.join(process.env.HOME, "app", "cms") }); 

根据经验我发现你也可以传递string:

CoffeeScript的:

 spawn "npm", "test", path.join(process.env.HOME, "app", "cms") 

JavaScript的:

 spawn("npm", "test", path.join(process.env.HOME, "app", "cms")); 

查看更多的信息生成文档 。