【问题标题】:How to restart node server on file change如何在文件更改时重新启动节点服务器
【发布时间】:2015-08-22 12:08:29
【问题描述】:

我正在开发一个 node/express 应用程序

$> ./node_modules/babel/bin/babel-node.js index.js

现在,如果我对 index.js 或任何其他依赖项进行更改,我想重新加载应用程序。我怎样才能做到这一点。我想我必须为此使用gulp,但我仍然想就如何做到这一点(使用哪些模块等)获得一些建议

更新:我刚刚使用supervisor 进行了测试,但是当发生变化时,我收到以下错误:

$> /node_modules/.bin/supervisor --exec ./node_modules/babel/bin/babel-node.js index.js 

crashing child
Starting child process with './node_modules/babel/bin/babel-node.js     index.js'
events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: listen EADDRINUSE
    at exports._errnoException (util.js:746:11)
    at Server._listen2 (net.js:1146:14)
    at listen (net.js:1172:10)
    at Server.listen (net.js:1257:5)

更新:我刚刚尝试了nodemon,但我遇到了与supervisor 相同的错误:

$> nodemon  --exec ./node_modules/babel/bin/babel-node.js index.js  --watch libs

...
22 Aug 16:58:35 - [nodemon] restarting due to changes...
22 Aug 16:58:35 - [nodemon] starting `./node_modules/babel/bin/babel-   node.js index.js`
events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: listen EADDRINUSE
    at exports._errnoException (util.js:746:11)
    at Server._listen2 (net.js:1146:14)
    at listen (net.js:1172:10)

更新:我通过将以下内容添加到 index.js 解决了 EADDRINUSE 问题

process.on('exit', () => {
    server.close();
})

process.on('uncaughtException', () => {
    server.close();

})

process.on('SIGTERM', () => {
    server.close();
})

不过,现在好像重启了,但是没有加载新代码

【问题讨论】:

标签: javascript node.js gulp


【解决方案1】:

使用这个:

supervisor -- -r 'babel/register' index.js

并删除server.close 代码。

【讨论】:

  • 错误:找不到模块'/home/xavier/Documents/src/projects/sloppy/backend/babel/register'。还尝试了 babel-register,在这两个试验中我都安装了 babel-register。 ./node_modules/.bin/babel-node --version5.8.34
  • 更新:它对我有用。谢谢。每个和我有同样问题的人,注意新命令不再使用-x babel-node,而是node
  • 添加一些有用的主管选项:supervisor -n exit -e js,json -i node_modules,test -- -r 'babel/register' index.js
  • 使用node 版本5.5.0babel-register 版本6.5.2 我不得不要求它为babel-register 所以:supervisor -- -r 'babel-register' index.js
【解决方案2】:

我对在nodemon(或supervisor)内运行babel-node 的所有解决方案的性能感到非常失望。所以我建立了这个:

https://github.com/kmagiera/babel-watch

您可以按如下方式使用它(可能在您的package.json 脚本部分中):

babel-watch -w src src/main.js

不同之处在于,它不是在每次文件更改时重新启动整个 babel-node 进程(在我的 MBP 上大约需要 1.5 秒),而是在父进程中运行 babel 并使用所有转译的 JS 启动“纯”node 进程脚本启动时提供的文件。

【讨论】:

    【解决方案3】:

    使用nodemon:

    全局安装:

    npm install -g nodemon
    

    在您的项目中使用它:

    nodemon myscript.js
    

    它会监视你的项目目录中的变化,并在看到它们时重新启动脚本。

    【讨论】:

    • 我已经用我在使用nodemon 时遇到的错误更新了我的帖子。有什么建议可以解决吗?
    【解决方案4】:

    有很多工具可以做到这一点。看看这个帖子: Restart node upon changing a file

    也许最常见的是Supervisor: https://github.com/petruisfan/node-supervisor

    【讨论】:

    • 我已经用supervision 更新了我的帖子。你知道为什么我会收到这些EADDRINUSE 错误吗?
    【解决方案5】:

    为此目的最流行的工具是nodemonforeversupervisor。您可以通过 npm 安装它们。对于 css 预处理器、缩小、测试运行等其他任务。您可以使用任务管理器,如 GruntGulp

    【讨论】:

      【解决方案6】:

      使用这个supervisor -- -r 'babel-register' index.js 因为Error: Cannot find module 'babel/re‌​gister'. 在检查模块后,我认为它更改为babel-register,它对我有用

      【讨论】:

        猜你喜欢
        • 2016-03-20
        • 2012-06-25
        • 2019-02-13
        • 1970-01-01
        • 2013-07-05
        • 1970-01-01
        • 2016-05-16
        • 2014-03-22
        • 2013-09-22
        相关资源
        最近更新 更多