Node.js 通过Grunt运行节点应用程序
我正在尝试将节点应用程序作为Grunt任务运行。但是,我需要将其作为子进程生成,以允许我并行运行watch任务 这项工作:Node.js 通过Grunt运行节点应用程序,node.js,process,gruntjs,spawn,Node.js,Process,Gruntjs,Spawn,我正在尝试将节点应用程序作为Grunt任务运行。但是,我需要将其作为子进程生成,以允许我并行运行watch任务 这项工作: grunt.registerTask('start', function () { grunt.util.spawn( { cmd: 'node' , args: ['app.js'] }) grunt.task.run('watch:app') }) 但是,当监视任务检测到更改时,这将再次触发启动任务。在生成我的节点应用程序的另一个子进
grunt.registerTask('start', function () {
grunt.util.spawn(
{ cmd: 'node'
, args: ['app.js']
})
grunt.task.run('watch:app')
})
但是,当监视任务检测到更改时,这将再次触发启动任务。在生成我的节点应用程序的另一个子进程之前,我需要杀死前一个子进程
然而,我不知道如何终止这个过程。像这样的事情是行不通的:
var child
grunt.registerTask('start', function () {
if (child) child.kill()
child = grunt.util.spawn(
{ cmd: 'node'
, args: ['app.js']
})
grunt.task.run('watch:app')
})
看来:
child
没有kill
功能这是因为
grunt contrib watch
当前将所有任务运行作为子进程生成。因此变量child
不在同一流程上下文中。很快,grunt contrib-watch@0.3.0
将使用nospawn
选项释放。这将允许您配置监视以在同一上下文中生成任务运行,并使上述示例正常工作
有关更多信息,请查看此问题:
看看哪个处理了与生成子进程相关的许多头痛问题。我刚刚用分支替换了我的
grunt contrib watch
模块,并将nospawn
选项设置为true:<代码>子项仍然未在第二个函数调用中定义。另外,您知道如何终止子进程吗?Grunfile不是json文件,只是js文件。您也不需要使用grunt.task.run()调用watch任务。下面是一个使用watch共享上下文的示例:要杀死一个子进程do:child.kill('SIGINT')代码>它是JS,我刚刚提取了相关的位,很抱歉混淆了。我不明白为什么child
仍然是未定义的,即使我确信nospawn
设置为true并且我安装了正确的模块。让它工作吧!演示的代码是正确的,我只是在我的包.json中发生了一些事情。非常感谢。