我希望使用NodeJs spawn
运行NODE_ENV=production node server
或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()
答案 0 :(得分:1)
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
答案 1 :(得分:1)
我在尝试从子进程中调用ENOENT
时收到cd
错误。
@Peter Lyons的回答很有帮助。在阅读了关于spawn的更多文档后,我决定使用以下内容来保持父进程工作目录的清洁:
<强> CoffeeScript的:强>
spawn "npm", "test",
cwd: path.join(process.env.HOME, "app", "cms")
<强> JavaScript的:强>
spawn("npm", "test", { cwd: path.join(process.env.HOME, "app", "cms") });
根据经验,我发现你也可以只传递字符串:
<强> CoffeeScript的:强>
spawn "npm", "test", path.join(process.env.HOME, "app", "cms")
<强> JavaScript的:强>
spawn("npm", "test", path.join(process.env.HOME, "app", "cms"));
查看spawn docs了解详情。