【发布时间】:2016-08-27 23:51:57
【问题描述】:
我正在 Vagrant 机器上运行 Node.js 应用程序,并希望在主机上发生任何变化时重新启动 Node.js 应用程序。
但我不能使用nodemon。它不会及时发现变化。当我使用 -L 标志时,它会在客户机上消耗过多的 CPU。这些目前是well-known issues。
我也尝试过 Vagrant 的 rsync-auto,但由于某种原因响应不够。
有解决方法吗?也许我可以在主机上应用一些东西?
【问题讨论】:
我正在 Vagrant 机器上运行 Node.js 应用程序,并希望在主机上发生任何变化时重新启动 Node.js 应用程序。
但我不能使用nodemon。它不会及时发现变化。当我使用 -L 标志时,它会在客户机上消耗过多的 CPU。这些目前是well-known issues。
我也尝试过 Vagrant 的 rsync-auto,但由于某种原因响应不够。
有解决方法吗?也许我可以在主机上应用一些东西?
【问题讨论】:
您似乎可以在客户机上尝试其他工具作为 nodemon 的替代品,但在主机上监视文件更改将是最快的。
这是一个对我有用的解决方法:
此要点:在主机上使用观察程序并向来宾计算机发出 SSH 命令以重新启动应用程序。
这是食谱(您可以使用任何其他您喜欢的工具):
首先,抢pm2:
npm install -g pm2
然后通过 pm2 启动您的 Node.js 应用程序:
pm2 app/server.js
然后抢Gulp:
npm install -g gulp-cli
npm install --save-dev gulp
还有gulp-shell:
npm install --save-dev gulp-shell
然后创建一个gulpfile.js:
var gulp = require('gulp');
var shell = require('gulp-shell');
gulp.task('server:watch', function () {
gulp.watch('app/**/*.js', [ 'server:restart' ]);
});
gulp.task('server:restart', shell.task([ 'vagrant ssh -- pm2 restart server' ]));
你已经完成了。要开始查看文件并在文件更改时自动启动服务器:
gulp server:watch
【讨论】:
pm2。可以使用另一个节点运行器,例如 forever,并且只需要更改 shell.task 中运行的命令。
在我看来,Ates 的回答有点臃肿(pm2、Gulp、gulp-shell 和过多的 gulpfile?!)。 nodemon 的一个很好的替代方案是一个类似的库,称为 node-dev。在 nodemon 的 Vagrant 问题下也提到了这一点(我想你已经浏览过了)。
基本用法:
node-dev --no-deps app.js
一切顺利:)
【讨论】: