You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用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-json
    
    后续可通过git 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-dev
    
    编写watch-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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:22:35