能否用npm run watch获取Git仓库JSON文件最新变更无需重建React应用?
实现方案:监听远程Git仓库JSON文件变更并同步到React应用
完全可以用类似你之前监听build目录的思路来处理,核心是把远程Git仓库的JSON文件同步到本地可被React访问的目录,再通过watch脚本触发更新,同时让React动态读取最新文件内容,具体步骤如下:
1. 同步远程Git仓库的JSON文件到本地
首先需要把目标Git仓库的JSON文件拉取到React应用的可访问目录(比如public目录,避免被webpack打包),推荐两种方式:
- Git子模块:适合长期关联该仓库的场景,将其作为子模块添加到React项目:
后续可通过git submodule add <目标Git仓库地址> ./public/remote-jsongit submodule update --remote命令拉取分支的最新变更。 - 自定义拉取脚本:写一个简单的shell脚本(比如
fetch-json.sh),直接拉取指定分支的目标JSON文件到本地:#!/bin/bash # 拉取远程仓库指定分支的target.json到public目录 curl -o ./public/target.json https://raw.githubusercontent.com/<用户名>/<仓库名>/<分支名>/target.json
2. 配置watch脚本监听变更并触发同步
在package.json中添加watch命令,结合工具实现自动同步:
- 若用Git子模块,用
nodemon监听子模块目录的变化并触发更新:"scripts": { "watch:json": "nodemon --watch ./public/remote-json --exec 'git submodule update --remote'" } - 若用自定义拉取脚本,用
node-schedule实现定时拉取:
先安装依赖:
编写npm install node-schedule --save-devwatch-json.js脚本:
再在const schedule = require('node-schedule'); const { execSync } = require('child_process'); // 每分钟检查并拉取最新JSON schedule.scheduleJob('* * * * *', () => { try { execSync('./fetch-json.sh'); console.log('JSON文件已更新'); } catch (err) { console.error('拉取JSON失败:', err.message); } });package.json中添加命令:"scripts": { "watch:json": "node watch-json.js" }
3. React应用动态读取最新JSON内容
不要将JSON文件通过import引入组件(会被打包进bundle,更新后需重建应用),而是通过动态请求获取最新内容:
const fetchLatestJson = async () => { const res = await fetch('/target.json'); const data = await res.json(); // 更新组件状态 setJsonData(data); }; // 组件挂载后定时刷新 useEffect(() => { const interval = setInterval(fetchLatestJson, 5000); // 每5秒检查一次 return () => clearInterval(interval); }, []);
额外优化:触发React热更新(可选)
如果想让React在JSON更新时自动刷新组件,可以在watch脚本中添加触发热更新的逻辑:
# 在fetch-json.sh末尾添加 touch ./src/json-trigger.js
然后在React组件中引入这个空文件:
import './json-trigger.js';
这样每次JSON更新时,webpack-dev-server会检测到文件变化,触发组件热更新并重新获取最新JSON。
内容的提问来源于stack exchange,提问作者Tammy
相关产品推荐
相关产品推荐

