在NodeJs spawn中绑定shell命令
我希望运行NODE_ENV=production node server
或NODE_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"));
查看更多的信息生成文档 。