Nodejs 怎样让express自动重新加载修改过的js文件?
Nodejs 怎样让express自动重新加载修改过的js文件?
如果能自动重加载js的话, 开发会快捷很多. 我现在每次都要先ctrl+c停止, 然后再启动node, 很不方便.
当然可以。在开发过程中,能够让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 应用。
- 打开你的
package.json
文件。 - 在
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, 挺不错的! 多谢拉!
supervisor就很好啊,windows下也能用
node-dev
这个有没有可以在程序中调用的?
假如仍然使用 node 命令来启动程序,仍然可以自动重启?
要在开发过程中实现Express应用自动重新加载修改过的JS文件,可以使用nodemon
工具。nodemon
会在检测到项目中的任何文件发生变化时自动重启Node.js进程。这将极大地简化开发流程,无需手动停止并重启服务器。
示例步骤
-
安装nodemon
首先需要全局安装
nodemon
(或仅在你的项目中作为开发依赖安装):npm install nodemon --save-dev
-
配置package.json
在你的项目中编辑
package.json
文件,添加或修改scripts
字段,使其包含一个用于启动应用程序的新脚本:"scripts": { "start": "nodemon ./bin/www" }
这里的
./bin/www
是默认的入口点,如果你的应用程序从其他文件启动,请相应地调整路径。 -
运行应用
现在你可以通过运行以下命令来启动你的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
来自动重启应用。
通过这些简单的步骤,你可以显著提高开发效率,使修改代码和查看效果的过程更加流畅。