一种方法是,在构建系统中,首先终止正在运行的节点进程,如果不成功,则将当前文件传递到节点。所以你的node.sublime-build可能看起来像这样:
{
"cmd": [ "killall node || node \"$file\"" ],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.js",
"shell": true
}
Sublime 只允许一个命令传递多个参数,所以类似"cmd": [ "killall node ||", "node", "$file"]
不起作用,尽管我认为它以前在 Sublime 2 中起作用。因此需要换行$file
在转义引号中,因为否则如果路径为$file
里面有一个空格。还,||
这里至关重要,因为killall
如果没有要终止的进程,则以状态 1(错误)退出,因此第一次它将运行 Node,但第二次则不会。
请注意,由于我们在此处的 shell 中工作,因此这是特定于平台的。我不知道如何做相当于||
在 Windows 上,但你只需要这样的东西:
{
"cmd": [ "killall node || node \"$file\"" ],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.js",
"shell": true
"windows": {
"cmd": [ "insert whatever works here..." ]
}
}
一个很大的限制是这会杀死所有正在运行的节点进程;如果你想让某些东西在后台运行,那会很烦人。如果有人知道如何在单个命令中定位特定节点进程,请添加到我的答案中。
其次,您可以将 cmd 包装在 bash 脚本中,这样可以更轻松地执行多项操作,例如终止特定进程。那么 cmd 数组将是[ "bash", "name-of-script.sh" ]
. Using lsof
获取正在运行当前文件的特定节点进程将相当容易。你也可以使用bash -c
作为命令,然后将整个脚本粘贴到 cmd 数组的第二个元素中。
希望有帮助。我缺少您的一项要求:ESC
仍然需要关闭构建窗口。不知道如果不编写 Sublime 插件还能做什么。