nodemon 热更新

本文介绍如何使用nodemon工具自动重启Node.js应用程序,提高开发效率。通过简单的命令行操作,nodemon能够监听文件变化并自动重启应用,特别适合在开发阶段使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sudo npm i -g nodemon

nodemon app.js

转载于:https://www.cnblogs.com/knuzy/p/10471678.html

<think>在ThinkPHP5.1中实现热更新(Hot Reload)通常指的是在开发过程中,修改代码后无需手动重启服务,系统自动重新加载最新代码。这在前端开发中常见(如Webpack的热更新),但PHP作为解释型语言,传统上每次请求都会重新加载脚本。不过,结合一些工具可以实现类似效果。 ### 一、使用PHP内置OPCache(生产环境优化) OPCache通过缓存编译后的脚本字节码减少加载时间,但修改文件后需要清除缓存才能生效。可通过配置实现自动检测文件更新: 1. **修改php.ini** ```ini opcache.validate_timestamps=1 ; 检查文件时间戳(开发环境开启) opcache.revalidate_freq=0 ; 每次请求都检查(开发环境推荐) ``` 2. **生产环境建议关闭**(避免性能损耗): ```ini opcache.validate_timestamps=0 ``` > 此方案仅优化脚本加载,不解决所有热更新需求[^1]。 ### 二、开发环境实时重载(推荐方案) 结合第三方工具监控文件变化并自动重启服务: 1. **安装Node.js** 下载地址:https://nodejs.org 2. **全局安装nodemon** ```bash npm install -g nodemon ``` 3. **创建nodemon.json配置文件** ```json { "watch": ["application", "config", "route"], "ext": "php,html,js,css", "ignore": ["runtime/*", "public/*"], "exec": "php think run" } ``` 4. **启动ThinkPHP服务** ```bash nodemon ``` > 当`application`、`config`等目录下的文件修改时,nodemon会自动重启`php think run`命令[^2]。 ### 三、集成BrowserSync(前端热更新) 若需同时更新前端资源(CSS/JS): 1. **安装BrowserSync** ```bash npm install -g browser-sync ``` 2. **创建bs-config.js** ```javascript module.exports = { proxy: "localhost:8000", // ThinkPHP服务端口 files: ["public/**/*.css", "public/**/*.js", "application/**/*.html"], reloadDelay: 1000 }; ``` 3. **同时启动两个工具** 修改`package.json`: ```json "scripts": { "dev": "concurrently \"nodemon\" \"browser-sync start --config bs-config.js\"" } ``` 运行: ```bash npm run dev ``` ### 四、Docker开发环境热更新 若项目使用Docker,可通过卷挂载实现: ```dockerfile VOLUME /var/www/html # 将本地代码挂载到容器 CMD ["php", "think", "run", "--host=0.0.0.0"] ``` 启动容器时添加`-v`参数: ```bash docker run -v $(pwd):/var/www/html -p 8000:8000 myapp ``` ### 五、注意事项 1. **性能影响** 文件监控工具会占用额外资源,仅推荐开发环境使用。 2. **避免循环重启** 忽略日志等动态生成文件: ```json "ignore": ["runtime/*.log"] ``` 3. **Xdebug兼容性** 自动重启可能导致Xdebug连接断开,需配置: ```ini xdebug.start_with_request=yes ``` > 完整示例代码:https://github.com/thinkphp-hot-reload-demo §§相关问题§§ 1. 如何优化ThinkPHP生产环境的性能? 2. 使用Docker时如何调试ThinkPHP应用? 3. 前端资源修改后如何实现无刷新更新?</think>在ThinkPHP 5.1框架中实现热更新(Hot Reload)可以通过以下方案实现,无需手动重启服务即可实时加载代码修改: --- ### 一、核心实现方案(基于OPcache) 1. **启用PHP OPcache扩展** 修改`php.ini`启用字节码缓存: ```ini [opcache] opcache.enable=1 opcache.enable_cli=1 ; 命令行模式下生效 opcache.validate_timestamps=1 ; 检查文件时间戳 opcache.revalidate_freq=0 ; 每次请求都检查更新 ``` 2. **配置ThinkPHP自动检测** 在`config/app.php`中添加: ```php return [ // 关闭模板缓存 'tpl_cache' => false, // 开发模式下关闭类库缓存 'app_debug' => true, 'app_trace' => false, ]; ``` --- ### 二、开发环境热更新方案 #### 方案1:使用`think-watcher`扩展(推荐) 1. 安装扩展: ```bash composer require topthink/think-watcher ``` 2. 启动监控服务: ```bash php think watcher --watch . # 监控整个项目目录 ``` #### 方案2:手动实现文件监控 ```php // 在public/index.php入口文件添加 if (APP_DEBUG) { $lastUpdate = filemtime(__FILE__); $files = glob('application/*.php'); foreach ($files as $file) { $lastUpdate = max($lastUpdate, filemtime($file)); } // 检测到文件修改时清除OPcache if ($_SESSION['last_update'] != $lastUpdate) { opcache_reset(); $_SESSION['last_update'] = $lastUpdate; } } ``` --- ### 三、前端资源热更新(Vite集成) 1. 安装Vite: ```bash npm create vite@latest ``` 2. 配置`vite.config.js`: ```js export default { server: { proxy: { '/api': 'http://localhost:8000' // 代理到ThinkPHP服务 } } } ``` 3. ThinkPHP视图引入资源: ```html <!-- 开发环境 --> @if(app_debug) <script type="module" src="http://localhost:5173/@vite/client"></script> <script type="module" src="http://localhost:5173/main.js"></script> @else <link rel="stylesheet" href="/static/css/main.css"> @endif ``` --- ### 四、Docker开发环境热更新 ```dockerfile FROM php:7.4-apache # 安装OPcache扩展 RUN docker-php-ext-install opcache # 挂载代码目录 VOLUME /var/www/html # 配置OPcache COPY opcache.ini /usr/local/etc/php/conf.d/ ``` `opcache.ini`配置: ```ini opcache.validate_timestamps=1 opcache.revalidate_freq=0 ``` 启动容器时挂载代码: ```bash docker run -v $(pwd):/var/www/html -p 8000:80 myapp ``` --- ### 五、注意事项 1. **生产环境配置** 上线后需关闭热更新: ```php // .env文件 APP_DEBUG = false ``` 2. **性能优化建议** - 开发环境开启`opcache`可提升30%性能 - 避免监控`runtime`和`vendor`目录 - 使用`.gitignore`排除日志文件 3. **常见问题解决** **问题:** 修改后未生效 **解决:** 手动清除缓存文件: ```bash rm -rf runtime/temp/* ``` **问题:** 类找不到错误 **解决:** 重建类映射: ```bash php think optimize:autoload ``` --- ### 六、完整工作流示例 ```mermaid graph LR A[修改代码] --> B{文件监控} B -- 检测到变化 --> C[清除OPcache缓存] C --> D[重新加载PHP文件] D --> E[浏览器自动刷新] ``` > 通过此方案,在开发过程中保存文件后,页面会自动刷新加载最新代码[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值