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

时间:2015-12-08 01:02:55

标签: node.js heroku watch nodemon

本地服务器似乎是以" heroku本地网站开始的#34;不会监视文件更改并重新启动自身。我该怎么做呢?

3 个答案:

答案 0 :(得分:15)

最简单的方法是运行带有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测试)

答案 1 :(得分:6)

heroku local只使用node-foremanhttps://www.npmjs.com/package/heroku-local),因此直接使用它更容易观看。

首先,安装foremannodemon

npm i --save-dev foreman nodemon

现在,您需要在package.json中设置两个脚本:

{
  ...
  "scripts": {
    "start": "nf start",
    "watch": "nodemon --watch directory-to-watch"
  },
  ...
}

您现在可以在观看该目录时运行该应用程序,并使用

重新加载更改
npm run watch

答案 2 :(得分:0)

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

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

  1. 安装NodeJS
  2. 安装Gulp

    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