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

时间:2013-12-30 21:35:28

标签: node.js express

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

3 个答案:

答案 0 :(得分:7)

您必须重新启动应用才能加载代码更改。没有简单的方法。

但是,有一些工具可以在开发期间自动执行该过程。我使用supervisor,如下所示:

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

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

    #!/bin/bash
    ./node_modules/.bin/supervisor -i node_modules --no-restart-on error -- ./app.js
    
  3. 这告诉supervisor运行我的应用程序(app.js),并监视当前目录和所有子目录。如果更改了任何.js文件,它将重新启动应用程序。 (如果要监视其他文件,请参阅文档,例如.json。)

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

    使用--no-restart-on error标记时,会在出错时重新启动应用。那是因为我想看到错误;我不希望它一遍又一遍地循环,重新启动并显示错误。

    结论:每次保存.js文件或创建新文件时,应用程序都会自动重启。

答案 1 :(得分:2)

  

您必须重新启动应用才能加载代码更改。没有办法解决它。

这个实际上是错误的。

您可以再次清除require.cache和require模块,然后重新加载。使用像hotswap这样的模块,它就是这样做的。

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

答案 2 :(得分:1)

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