问题 在文件更改时重新启动Heroku本地?


似乎本地服务器以“heroku local web”开头,不会监视文件更改并重新启动。我该怎么做呢?


3046
2017-12-08 01:02


起源



答案:


最简单的方法是运行nodemon heroku local 作为可执行文件 - 即 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.5)


10
2017-10-04 09:11



这可以按需要运行 - 重新启动 heroku local 任何变化。 - Brett DeWoody
效果很好!谢谢! - ohjeeez
没有使用nodemon 1.11.0但升级到1.18.3并且工作正常 - Dave Pile


答案:


最简单的方法是运行nodemon heroku local 作为可执行文件 - 即 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.5)


10
2017-10-04 09:11



这可以按需要运行 - 重新启动 heroku local 任何变化。 - Brett DeWoody
效果很好!谢谢! - ohjeeez
没有使用nodemon 1.11.0但升级到1.18.3并且工作正常 - Dave Pile


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

4
2018-02-22 06:30





我觉得 heroku local 将 watch 用于更改静态资源(客户端代码)。但是,使用您对Web服务器(服务器端代码)所做的每个源代码更改手动重启服务器显然并不理想。

如果您正在创建NodeJS应用程序,我的建议是尝试使用 watch Gulp提供的命令。但是,这也要求您(a)安装Gulp,(b)编写Gulp脚本。同样,此解决方案仅适用于NodeJS,如果,则不需要这些步骤 heroku local 看着你的文件。

  1. 安装 的NodeJS
  2. 安装  

    npm install gulp --save-dev
    
  3. 添加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']);
    });
    
  4. 运行Gulp脚本(从Procfile所在的目录)

     gulp heroku-local:watch
    

0
2018-02-14 02:43



谢谢。但无法使其发挥作用...... - IsmailS
你试过吗? spawn 方法? nodejs.org/api/...  那可能有用...... - tfmontague
我正在使用gulp观察器通过访问我创建的特殊路由来终止节点进程, /killme,然后再次启动它。当然,这个网址不应该存在于网站上,但在本地很有用。在gulpfile中: exec("curl http://localhost:5000/killme ; heroku local");  在我的node.js / express app中: router.get('/killme', function(req,res) { process.exit(1); }); - Lucas