在 Linux 环境下,Node.js 代码热更新其实是个挺常见的需求——开发时改完代码不用手动重启,效率能提升不少。实现方式有好几种,下面挑几个主流的方法聊一聊。

1. 使用 PM2
PM2 算是 Node.js 生态里最流行的进程管理器之一,热更新功能相当成熟。操作起来也非常简单:
安装 PM2
npm install pm2 -g
启动应用
pm2 start app.js --name my-app
当代码修改并保存后,执行下面这条命令就能实现热更新,而且 PM2 会优雅地重启应用,不会中断当前的会话和连接:
pm2 reload my-app
值得一提的是,reload 和 restart 有区别——reload 会先启动新进程,等新进程就绪后再关闭旧进程,真正做到零停机。
2. 使用 Nodemon
Nodemon 是另一种很常见的工具,专为开发场景设计。它的核心逻辑就是监视文件变化,一旦检测到改动就自动重启服务器。
安装 Nodemon
npm install nodemon -g
启动应用
nodemon app.js
Nodemon 默认会监视当前目录下的所有文件,不过你也可以通过配置文件指定只监视哪些路径或忽略哪些文件。简单直接,适合快速原型开发。
3. 使用 Webpack 和 Hot Module Replacement (HMR)
如果你在前端项目里用 Webpack,那 HMR 是个更高级的玩法——它不需要整个页面刷新,而是只替换发生变化的模块,体验简直丝滑。
安装 Webpack 和相关插件
npm install webpack webpack-dev-server --sa ve-dev
配置 Webpack
在 webpack.config.js 中开启 HMR 支持:
const path = require('path');
const webpack = require('webpack');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
},
devServer: {
contentBase: path.resolve(__dirname, 'dist'),
hot: true
},
plugins: [
new webpack.HotModuleReplacementPlugin()
]
};
启动 Webpack Dev Server
webpack-dev-server --mode development
HMR 特别适合前端开发,但如果你在 Node.js 后端也要做类似的热替换,那可能需要结合 webpack-node-externals 等工具,相对复杂一些。
4. 使用 Node.js 内置的 repl 模块
Node.js 自带的 repl 模块虽然简单,但也能实现手动热更新。适合调试场景,或者你不想装任何第三方工具的时候。
启动 REPL
node -i
在 REPL 中,你可以通过清除模块缓存来重新加载代码:
delete require.cache[require.resolve('./app.js')];
const app = require('./app.js');
这种方法比较原始,需要手动操作,而且如果模块之间存在循环依赖,可能会出问题。不过作为一种“应急方案”还是挺实用的。
总结
以上几种方法各有侧重,选择哪一款主要看你的项目类型和开发习惯。PM2 和 Nodemon 覆盖了大部分后端 Node.js 应用的需求,操作简单、社区活跃,值得优先考虑。而 Webpack + HMR 更适合前端或全栈项目,追求极致开发体验。至于内置的 repl 模块,更适合临时调试或轻量级场景。没有绝对的最好,只有最适合你的。