Nodejs 怎样让express自动重新加载修改过的js文件?

Nodejs 怎样让express自动重新加载修改过的js文件?

如果能自动重加载js的话, 开发会快捷很多. 我现在每次都要先ctrl+c停止, 然后再启动node, 很不方便.

7 回复

当然可以。在开发过程中,能够让Express应用在修改了JavaScript文件后自动重新加载是一个非常方便的功能。这可以通过使用nodemon工具来实现。

使用 nodemon

nodemon 是一个用于 Node.js 项目的工具,它可以监视你的文件变化,并在检测到文件改动时自动重启你的应用程序。这对于开发过程中的快速迭代非常有用。

安装 nodemon

首先,你需要安装 nodemon。你可以通过npm(Node.js 包管理器)全局安装它:

npm install -g nodemon

或者将其作为项目依赖项安装:

npm install --save-dev nodemon

修改启动脚本

接下来,你需要修改你的 package.json 文件,以便使用 nodemon 来启动你的 Express 应用。

  1. 打开你的 package.json 文件。
  2. scripts 部分添加或修改 start 命令,使其使用 nodemon 启动应用:
{
  "name": "your-app",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "nodemon ./bin/www"
  },
  "dependencies": {
    "express": "^4.17.1"
  },
  "devDependencies": {
    "nodemon": "^2.0.15"
  }
}

在这个例子中,假设你的 Express 应用入口文件是 ./bin/www

运行应用

现在,你可以通过以下命令来启动你的应用:

npm start

每当你在项目中修改了 JavaScript 文件时,nodemon 会自动检测到这些更改,并重新启动你的应用。

示例代码

假设你有一个简单的 Express 应用,位于 ./bin/www 文件中:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello World!');
});

const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});

当你运行 npm start 并修改上述代码时,nodemon 会自动重新加载应用,而无需手动停止和重启。

通过这种方式,你可以极大地提高开发效率,避免频繁的手动重启操作。


你需要的是:

  • node-dev
  • nodemon
  • forever

具体参见:https://github.com/joyent/node/wiki/modules#wiki-restarting

我用了node-dev, 挺不错的! 多谢拉!

supervisor就很好啊,windows下也能用

这个有没有可以在程序中调用的?

假如仍然使用 node 命令来启动程序,仍然可以自动重启?

要在开发过程中实现Express应用自动重新加载修改过的JS文件,可以使用nodemon工具。nodemon会在检测到项目中的任何文件发生变化时自动重启Node.js进程。这将极大地简化开发流程,无需手动停止并重启服务器。

示例步骤

  1. 安装nodemon

    首先需要全局安装nodemon(或仅在你的项目中作为开发依赖安装):

    npm install nodemon --save-dev
    
  2. 配置package.json

    在你的项目中编辑package.json文件,添加或修改scripts字段,使其包含一个用于启动应用程序的新脚本:

    "scripts": {
      "start": "nodemon ./bin/www"
    }
    

    这里的./bin/www是默认的入口点,如果你的应用程序从其他文件启动,请相应地调整路径。

  3. 运行应用

    现在你可以通过运行以下命令来启动你的Express应用:

    npm start
    

    每当修改并保存了任何文件后,应用会自动重启。

示例代码

假设你的bin/www文件是这样的:

#!/usr/bin/env node

/**
 * Module dependencies.
 */
var app = require('../app');
var debug = require('debug')('my-application');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}

只需确保该文件位于bin/www路径下,并根据上面提到的步骤设置package.json,即可使用nodemon来自动重启应用。

通过这些简单的步骤,你可以显著提高开发效率,使修改代码和查看效果的过程更加流畅。

回到顶部