我已经安装并正在osx上运行一个node.js服务器。我已经释放了一个聊天模块,并且正在愉快地运行它。我更改了一些内容,需要重新启动服务器才能看到效果。
我只知道如何通过关闭终端窗口,然后重新对其进行操作,然后再次运行节点chatdemo.js来重新启动。
有什么方法可以重启而不关闭终端吗?
谢谢。
Answers:
如果它仅在运行(不是守护程序),则使用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
。
nohup node server.js &
在开发期间,重新启动服务器以查看所做更改的最佳方法是使用 nodemon
npm安装nodemon -g
nodemon [您的应用名称]
nodemon将监视启动nodemon的目录中的文件,如果它们发生更改,它将自动重新启动您的节点应用程序。
检查nodemon git repo:https : //github.com/remy/nodemon
在这种情况下,您经常会重启Node.js服务器,因为它处于开发中,并且一直在进行更改。有一个很棒的热重载脚本,它将通过查看所有.js文件并在这些文件中的任何一个已更改的情况下重新启动node.js服务器来为您解决此问题。只是快速开发和测试的门票。
有关脚本的用法和说明,请参见Draco Blue。
我遇到了同样的问题,然后编写了这个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)文件后,您可能需要按此处所述将其添加到PATH中。
(请注意,这将杀死名称中带有“ node”的所有进程,除了grep本身的进程,因此我猜在某些情况下它也可能会杀死其他具有类似名称的进程)
cut -c17-20
pkill node
吗?
说“ nodemon”会回答这个问题。
但是关于如何仅杀死(所有)节点恶魔,以下对我有用:
pkill -HUP node
我了解我的评论与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使用命令NPM安装nodemon --save-dev的这个命令将确保它保存为开发人员的依赖。如果您正在使用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文件中的“开始”值,在生产中我们将使用现有值,但在开发中将使用nodemon跟踪源文件中的更改而无需重新启动服务器。start的新值是 “ start”:“ [[[$ NODE_ENV =='production']];然后是节点./bin/www;否则是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
forever restart