Macos 如何重新启动node.js服务器

Macos 如何重新启动node.js服务器,macos,node.js,Macos,Node.js,我已经安装并正在osx上运行node.js服务器。我已经创建了一个聊天模块,并且正在愉快地运行它。我修改了一些内容,需要重新启动服务器才能看到效果 我只知道如何重新启动,关闭终端窗口,然后重新打开它,然后再次运行node chatdemo.js 有没有办法在不关闭终端的情况下重新启动 谢谢。如果它只是在运行(不是守护进程),那么只需使用Ctrl-C 如果它是守护的,那么您可以尝试: $ ps aux | grep node you PID 1.5 0.2 44172 8260 pts

我已经安装并正在osx上运行node.js服务器。我已经创建了一个聊天模块,并且正在愉快地运行它。我修改了一些内容,需要重新启动服务器才能看到效果

我只知道如何重新启动,关闭终端窗口,然后重新打开它,然后再次运行node chatdemo.js

有没有办法在不关闭终端的情况下重新启动

谢谢。

如果它只是在运行(不是守护进程),那么只需使用
Ctrl-C

如果它是守护的,那么您可以尝试:

$ ps aux | grep node
you   PID  1.5  0.2  44172  8260 pts/2    S    15:25   0:00 node app.js
$ kill -2 PID

其中,
PID
替换为
ps

输出中的数字。在这种情况下,您经常重新启动node.js服务器,因为它处于活动开发中,并且您一直在进行更改。有一个很棒的热重新加载脚本,可以通过查看所有的.js文件并在这些文件发生更改时重新启动node.js服务器来为您处理此问题。只是快速开发和测试的门票


脚本和如何使用它的说明在这里。

我遇到了同样的问题,然后编写了这个shell脚本,它杀死了所有现有的节点进程:

#!/bin/bash
echo "The following node processes were found:"
ps aux | grep " node " | grep -v grep
nodepids=$(ps aux | grep " node " | grep -v grep | cut -c10-15)

echo "OK, so we will stop these process/es now..."

for nodepid in ${nodepids[@]}
do
echo "Stopping PID :"$nodepid
kill -9 $nodepid
done
echo "Done"
将其保存为shell脚本(xxx.sh)文件后,您可能希望将其添加到所述的路径中


(请注意,除了grep自己的进程外,这将杀死其名称中带有“node”的所有进程,因此我猜在某些情况下,它还可能杀死其他具有类似名称的进程)

在开发过程中,重新启动服务器以查看所做更改的最佳方法是使用nodemon

npm安装nodemon-g

nodemon[你的应用程序名]

nodemon将监视启动nodemon的目录中的文件,如果文件发生更改,它将自动重新启动节点应用程序


检查nodemongit repo:

使用“kill-9[PID]”或“killall-9节点”对我有效,而“kill-2[PID]”不起作用。

如果我只是从控制台运行节点应用程序(而不是永远使用等),我使用control+C,不确定OSX是否有相同的按键组合要终止,但要比查找进程id并终止进程id快得多,您还可以将以下代码添加到您正在使用的聊天应用程序中,然后在控制台中键入“退出”以关闭该应用程序

process.stdin.resume();
process.stdin.setEncoding('utf8');

process.stdin.on('data', function(data) {
  if (data == 'exit\n') process.exit();
});

我知道我的评论与windows有关,但可能是有用的人。 为了胜利 在cmd中运行:

wmic process  where "commandline like '%my_app.js%' AND name='node.exe' " CALL Terminate
然后,您可以再次运行应用程序:

node my_app.js
您还可以在批处理文件中使用它,并使用转义引号:

wmic process  where "commandline like '%%my_app.js%%' AND name='node.exe' " CALL Terminate
node my_app.js
说“nodemon”就能回答这个问题

但是关于如何只杀死(所有)节点恶魔,以下内容对我很有用:

pkill -HUP node

首先打开终端/命令行,然后转到项目目录,现在使用命令npm install nodemon--save dev安装nodemon。此命令将确保它保存为开发人员依赖项。如果您使用的是expressjs,那么在您的包文件中

{
  "name": "expressjs-app",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "morgan": "~1.9.1",
    "pug": "^2.0.4"
  },
  "devDependencies": {
    "nodemon": "^2.0.3"
  }
}
现在修改package.json文件中的“start”值,对于生产,我们将使用现有值,但是对于开发,将使用nodemon跟踪源文件中的更改,而无需重新启动服务器。start的新值为“start”:“if[$NODE_ENV==='production']];then NODE./bin/www;else nodemon./bin/www;fi”

最终的package.json文件如下所示

{
  "name": "expressjs-app",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "if [[$NODE_ENV=='production']]; then node ./bin/www; else nodemon ./bin/www; fi"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "morgan": "~1.9.1",
    "pug": "^2.0.4"
  },
  "devDependencies": {
    "nodemon": "^2.0.3"
  }
}

要卸载nodemon jusy,只需运行命令npm uninstall nodemon

,您也可以使用“killall-2 node”,其效果相同。不希望/需要杀死所有节点进程。如果我打开了一些node repl,那么在这一行之后,我将是一个不开心的露营者:)旁注:通过
nohup node server.js启动一个节点守护程序&
FYI现在有几个节点模块专门用于此,看看。我在mac osx上,我不得不使用
cut-c17-20
这不正是
pkill节点的用途吗?我不知道这个模块,它非常有用,提醒我我的django应用程序。谢谢。这个建议太棒了。快速测试代码对于开发非常有效。好的,谢谢,我们如何配置eclipse使用nodemon而不是node…?永远使用。然后您只需键入
永久重新启动
非常方便!好主意。不,不要去杀掉-9。它不会让流程干净地完成,将留下孤立的描述符,并且通常不需要。一个普通的
kill
就足够了,否则,
kill-INT
就足够了。除非真的需要,否则不要去杀掉-9,大多数情况下,不是这样。