使用express,如何在不重新启动服务器的情况下加载控制器代码更改



目前我可以对模板文件进行更改,并查看加载的最新更改。然而,当我在控制器中进行更改时,它们不会加载到代码库中。换句话说,当我更改控制器代码时,我必须重新启动开发服务器。有什么办法可以防止这种情况发生吗?

您必须重新启动应用程序才能加载代码更改。没有简单的方法可以绕过它。

然而,有一些工具可以在开发过程中自动化流程。我使用supervisor,如下所示:

  1. package.json中将supervisor添加到devDependencies并安装它。

    npm install --save-dev supervisor
    
  2. 在我项目的顶层,我创建了一个名为./dev的可执行shell脚本,其中包含以下内容:

    #!/bin/bash
    ./node_modules/.bin/supervisor -i node_modules --no-restart-on error -- ./app.js
    

此命令将告诉supervisor运行我的应用程序(app.js),并监视当前目录和任何子目录。如果任何.js文件发生更改,它将重新启动应用程序。(如果您想监视其他文件,如.json,请参阅文档。)

-i node_modules标志告诉supervisor忽略node_modules子目录中的任何文件。

有了--no-restart-on error标志,它将不会在出现错误时重新启动应用程序。那是因为我想看到错误;我不希望它不断地循环,重新启动并一次又一次地显示错误。

一句话:每次我保存一个.js文件或创建一个新文件时,应用程序都会重新启动。

您必须重新启动应用程序才能加载代码更改。没有办法绕过它。

这个实际上是错误的。

您可以再次清除require.cache和require模块,它将被重新加载。使用像热插拔这样的模块,它正是这样做的。

也就是说,热交换代码是内存泄漏的常见原因,所以你真的不应该在生产系统上这样做。

您必须为更改的代码强制使用新的require("..."),或者使用类似forever的包来监控更改并重新启动应用程序(但请注意,重新启动当然与实时重新加载不同)

最新更新