目前我可以对模板文件进行更改,并查看加载的最新更改。然而,当我在控制器中进行更改时,它们不会加载到代码库中。换句话说,当我更改控制器代码时,我必须重新启动开发服务器。有什么办法可以防止这种情况发生吗?
您必须重新启动应用程序才能加载代码更改。没有简单的方法可以绕过它。
然而,有一些工具可以在开发过程中自动化流程。我使用supervisor,如下所示:
-
在
package.json
中将supervisor
添加到devDependencies
并安装它。npm install --save-dev supervisor
-
在我项目的顶层,我创建了一个名为
./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
的包来监控更改并重新启动应用程序(但请注意,重新启动当然与实时重新加载不同)