【发布时间】:2016-03-12 19:16:51
【问题描述】:
似乎以“heroku local web”启动的本地服务器不会监视文件更改并自行重启。我怎样才能做到这一点?
【问题讨论】:
标签: node.js heroku watch nodemon
似乎以“heroku local web”启动的本地服务器不会监视文件更改并自行重启。我怎样才能做到这一点?
【问题讨论】:
标签: node.js heroku watch nodemon
最简单的方法是使用heroku local 作为可执行文件运行nodemon - 即nodemon --exec "heroku local"。
但是,heroku local 以非零退出代码退出默认 nodemon 关闭信号 (SIGUSR2),因此您需要向 nodemon 添加一个附加标志以将中断信号设置为 SIGTERM。
nodemon --exec "heroku local" --signal SIGTERM
(使用 heroku-cli@6.14.31-33a2d0a、nodemon@1.12.1、node@8.5.0 测试)
【讨论】:
heroku local 并进行任何更改。
heroku local 只使用了node-foreman (https://www.npmjs.com/package/heroku-local),所以直接使用观看更方便。
首先,安装foreman和nodemon:
npm i --save-dev foreman nodemon
现在,您需要在 package.json 中设置两个脚本:
{
...
"scripts": {
"start": "nf start",
"watch": "nodemon --watch directory-to-watch"
},
...
}
您现在可以在监视该目录并重新加载更改时运行应用程序
npm run watch
【讨论】:
我认为heroku local 将watch 用于更改静态资源(客户端代码)。但是,每次更改 Web 服务器的源代码(服务器端代码)时手动重新启动服务器显然并不理想。
如果您正在创建 NodeJS 应用程序,我的建议是尝试 Gulp 提供的 watch 命令。但是,这也需要您 (a) 安装 Gulp,以及 (b) 编写 Gulp 脚本。同样,此解决方案仅适用于 NodeJS,如果 heroku local 为您查看文件,则不需要这些步骤。
安装Gulp
npm install gulp --save-dev
添加 Gulp 脚本(Procfile 所在的位置)
注意:无法使以下watch 代码成功运行,但它可能会为其他人提供一个模板来创建有效的解决方案。
var gulp = require('gulp');
var exec = require('child_process').exec;
gulp.task('heroku-local', function () {
exec("heroku local");
});
gulp.task('heroku-local:watch', function () {
gulp.watch([
'file-to-watch',
'folder-to-watch/**/*'
], ['heroku-local']);
});
运行 Gulp 脚本(从 Procfile 所在的目录)
gulp heroku-local:watch
【讨论】:
spawn的方法吗? nodejs.org/api/… 这可能行得通...
/killme 来终止节点进程,然后再次启动它。当然这个网址不应该存在于现场网站上,但在本地很有用。在 gulpfile 中:exec("curl http://localhost:5000/killme ; heroku local"); 在我的 node.js/express 应用程序中:router.get('/killme', function(req,res) { process.exit(1); });
对于任何遇到此帖子以寻找解决方案的人...如果您可以在计算机上全局安装 nodemon,您可以更新 heroku Procfile (https://devcenter.heroku.com/articles/procfile) 以使用 nodemon 而不是 node:
web: nodemon index.js
同样,必须全局安装 nodemon 才能正常工作:
npm i -g nodemon
然后你应该可以正常在本地运行 heroku 并使用 nodemon 监视更改:
heroku local web
【讨论】:
(创建答案,因为我还不能回复)
补充https://stackoverflow.com/users/12663699/nick-ruiz答案,
你不需要全局安装 nodemon。
您可以将其作为开发依赖项
npm i nodemon --save-dev
然后,在您的项目根目录中创建一个 Procfile,其中包含 node_modules 中的 nodemon 路径。
web: node index.js
dev: ./node_modules/nodemon/bin/nodemon.js index.js
这样您就可以运行heroku local 并让它在更改时重新启动。
(这适用于希望在容器上运行 node index.js 并在本地计算机上运行 nodemon index.js 的用户)
【讨论】: