【问题标题】:Reload Express.js routes changes without manually restarting server重新加载 Express.js 路由更改而无需手动重新启动服务器
【发布时间】:2014-09-05 04:30:22
【问题描述】:

我试过express-livereload,但它只是重新加载了视图文件。

我应该使用其他工具,还是可以将这个工具配置为监视我的运行服务器的index.js 文件?

我读到选项与node-livereload 相同,监视文件的默认值包括.js 文件。

你知道任何简单配置的 URL 吗?

我的主要问题是如何为 Express.js 设置良好的开发环境,并且我想在发出请求时检查变量,每次更改路由时重新启动都很痛苦。

PS 我尝试node-inspector 在服务器处理请求时检查变量,但似乎node-inspector 不是为此而设计的,对吧?

【问题讨论】:

  • 你试过使用Grunt/Gulp吗?我找到了this question。你可以用 grunt 做同样的事情,但我更喜欢 gulp,因为它的配置更容易理解。
  • 我更喜欢使用默认配置的可配置的东西。
  • 这能回答你的问题吗? Node.js - Auto Refresh In Dev

标签: javascript node.js express


【解决方案1】:

我认为Nodemon 有你想要的。

Nodemon 是一个实用程序,它将监视源中的任何更改并自动重新启动服务器。非常适合开发。

示例调用:

nodemon index.js

【讨论】:

  • 简单 npm install --save-dev nodemon 将其添加到您的 package.json 中。然后你可以像这样添加一个脚本:"dev": "nodemon index.js"
  • 但这会重新启动服务器。
  • 我喜欢并将 nodemon 用于我开发的许多静态站点,但正如 Filipe 所说,您的整个服务器进程会在更改时停止并重新启动。这与问题所要求的完全相反。
  • 我认为问题的本质是 OP 简化开发工作流程的一种方式,即不必手动重新启动服务器(如倒数第二段所示)。 OP 似乎也对 Nodemon 很满意(请参阅第一个评论来回答)。但是,是的,@zero298 和 Filipe:你们在技术上都是正确的,因为 Nodemon 会重新启动服务器 :)
【解决方案2】:

我用的是express.js,正常启动服务器是

npm start

安装了 Nodemon,我使用

nodemon --exec npm start

注意:nodemon app.js 在这里不起作用,

因为 express.js 使用 start 脚本

安装nodemon

npm install -g nodemon

【讨论】:

  • Nodemon 默认使用 package.json 中的启动脚本,所以你可以简单地说 nodemon --exec npm start 而不是 nodemon
  • 但是整个服务器正在重启。它会让我的 CPU 永远工作吗?
【解决方案3】:

您可以使用“livereload”、“connect-livereload”和“nodemon”将前端和后端更改实时加载到浏览器。此外,这样你就不需要 Gulp 或 Grunt。以下是它们如何协同工作:

  • livereload打开一个高端口并通知浏览器任何更改的文件
  • connect-livereload monkey 使用连接到这个高端口的 JavaScript sn-p 修补每个提供的 HTML 页面
  • nodemon 在任何更改的后端文件上重新启动服务器

在 Express 中设置 livereload

设置 Express 以在 nodemon 引起的重新启动期间启动 livereload 服务器并监视公共目录并 ping 浏览器:

const livereload = require("livereload");
const connectLivereload = require("connect-livereload");

// open livereload high port and start to watch public directory for changes
const liveReloadServer = livereload.createServer();
liveReloadServer.watch(path.join(__dirname, 'public'));

// ping browser on Express boot, once browser has reconnected and handshaken
liveReloadServer.server.once("connection", () => {
  setTimeout(() => {
    liveReloadServer.refresh("/");
  }, 100);
});

const app = express();

// monkey patch every served HTML so they know of changes
app.use(connectLivereload());

用 Nodemon 启动 Express

使用 nodemon 启动服务器,例如,通过运行 npm run watch 使用专用监视脚本。

这里的关键点是忽略已经被 livereload 监视的公共目录。您还可以配置具有非默认扩展名的文件,例如 pug 和 mustache。

"scripts": {
  "start": "node ./bin/www",
  "watch": "nodemon --ext js,pug --ignore public"
},

您可以在"Refresh front and backend changes to browser with Express, LiveReload and Nodemon."阅读更长的解释

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 2014-03-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    相关资源
    最近更新 更多