在 Linux 下,使用 Node.js 进行代码热更新可以通过多种方法实现。以下是一些常用的方法:
PM2 是一个流行的 Node.js 进程管理器,支持热更新。
npm install pm2 -g
pm2 start app.js --name my-app
pm2 reload my-app
PM2 会自动重启应用并保持服务的连续性。
Nodemon 是一个用于开发环境的工具,可以监视文件变化并自动重启服务器。
npm install nodemon -g
nodemon app.js
Nodemon 会监视 app.js 及其依赖文件的变化,并在检测到变化时自动重启服务器。
Hot Module Replacement (HMR) 是一种更高级的热更新技术,可以在不刷新整个页面的情况下更新模块。
npm install webpack webpack-dev-server html-webpack-plugin --save-dev
创建 webpack.config.js 文件:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './app.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
},
devServer: {
contentBase: path.resolve(__dirname, 'dist'),
hot: true
},
plugins: [
new HtmlWebpackPlugin({
template: './index.html'
})
]
};
webpack-dev-server --mode development
cluster 模块Node.js 的 cluster 模块可以让你创建多个工作进程,其中一个主进程负责管理工作进程。当代码更新时,可以重启工作进程。
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// Workers can share any TCP connection
// In this case it is an HTTP server
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
console.log(`Worker ${process.pid} started`);
}
当代码更新时,可以重启主进程,主进程会自动重新启动所有工作进程。
以上方法各有优缺点,选择哪种方法取决于你的具体需求。对于生产环境,PM2 是一个不错的选择;对于开发环境,Nodemon 和 HMR 更加方便。使用 cluster 模块可以实现更复杂的热更新策略。