1

我希望运行类似NODE_ENV=production node servercd ~/app/cms; npm test使用NodeJs spawn的命令

首先可以实现

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

但是我怎样才能达到第二个呢?

更新:如果有人有类似的问题,这是我在咖啡脚本中的示例:

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()
4

2 回答 2

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

于 2012-12-07T14:04:07.657 回答
1

ENOENT尝试cd从子进程调用时收到错误消息。

@Peter Lyons 的回答很有帮助。在阅读了更多关于 spawn 的文档后,我决定使用以下方法来保持父进程工作目录的清洁:

咖啡脚本:

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

JavaScript:

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

根据经验,我发现您也可以只传递字符串:

咖啡脚本:

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

JavaScript:

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

查看spawn 文档了解更多信息。

于 2013-06-23T16:29:30.810 回答