vite项目保存代码后不刷新页面 vite热更新

vite项目保存代码后不刷新页面 vite热更新

问题场景

接手了一个新项目,发现修改代码后,控制台显示hmr更新了文件,但本地运行的项目不会自动刷新页面,每次都要手动刷新。

scss 复制代码
 [vite] (client) hmr update /src/views/Home.vue, /src/views/Home.vue?vue&type=style&index=0&scoped=2dc54a20&lang.scss  

解决办法

我尝试了很多办法,也试过更新vite版本,均未解决。过程中发现在修改vite.config.ts文件时,页面能自动刷新,然后就想到写一个脚本,监听项目文件的改动, 如果文件有改动,就自动更新下vite.config.ts文件,从而达到刷新页面的效果。

这是我的脚本文件,使用前,需要下载一个插件

复制代码
npm install chokidar -D

监听脚本

  1. 在你的项目跟目录下创建一个scripts/force-refresh.js文件,粘贴以下代码
javascript 复制代码
import fs from 'fs';
import path from 'path';
import chokidar from 'chokidar';

const root = process.cwd();
const viteConfigPath = path.resolve(root, 'vite.config.ts');
console.log(
  `开始监听 ${path.join(root, 'src')}目录下文件是否有改动,改动时将更新 vite.config.ts 以达到刷新页面的效果`,
);

// --- watcher 配置 ---
const watcher = chokidar.watch([path.join(root, 'src')], {
  usePolling: true,
  ignoreInitial: true,
});

let isWriting = false;
let lastUpdated = 0;
const MIN_INTERVAL_MS = 1000;

watcher.on('all', (event, filePath) => {
  console.log(`改动文件: ${event} ${filePath}`);
  if (filePath.includes('vite.config.ts')) return;
  const now = Date.now();
  if (isWriting || now - lastUpdated < MIN_INTERVAL_MS) return;
  triggerUpdate();
});

function triggerUpdate() {
  try {
    const timestamp = new Date().toISOString();
    const text = fs.readFileSync(viteConfigPath, 'utf8');
    const updated = text.replace(
      /\/\/\s*AUTO_REFRESH_MARKER:.*/i,
      `// AUTO_REFRESH_MARKER: ${timestamp}`,
    );
    fs.writeFileSync(viteConfigPath, updated, 'utf8');
    lastUpdated = Date.now();
  } catch (e) {
    console.error(`[force-refresh] ❌ Error updating vite.config.ts`, e);
  }
}
  1. 修改package.json,添加一个启动命令
json 复制代码
"dev": "vite",
 "dev-watch": "start /B vite && node scripts/force-refresh.js",

dev是原本有的命令, dev-watch是我们添加的命令, 注意你的force-refresh.js是否放在scripts文件夹下。

拓展

针对这个脚本,你可以自定义要监听的文件目录,文件类型,做到精准监听,具体的自由实现。 邪修办法!!! 有遇到同样问题,查到了原因,真正通过vite知识来解决的,欢迎在评论区留言,给看到这篇文章的同行一个解决思路

相关推荐
临江仙4553 天前
Vite 性能优化实战:从 0 到 1 打造极速开发体验(附完整配置)
vue.js·vite
jason_renyu3 天前
Vite 与 Webpack:核心区别、优缺点、面试题及选型趋势
webpack·vite·模块联邦·webpack和vite区别
涔溪4 天前
Vite 和 Webpack 这两款主流前端构建工具的核心区别,包括它们的设计理念、工作机制和实际使用体验上的差异。
前端·webpack·vite
涔溪4 天前
Vite 是什么?
vite·前端构建工具
涔溪4 天前
深入了解 Vite 的核心特性 —— 开发服务器(Dev Server)和热更新(HMR)的底层工作机制
前端·vite
用户47949283569157 天前
Vite 中 SVG 404 的幕后黑手:你真的懂静态资源处理吗?
前端·vite
草木红8 天前
vite 安装 vue3 和 tailwindcss
vue3·vite·tailwindcss
weixin79893765432...8 天前
Electron + React + Vite 实践
react.js·electron·vite
weixin79893765432...11 天前
Electron + Vue 3 + Vite 实践
vue.js·electron·vite
AAA阿giao13 天前
使用 Vite + Vue 3 搭建项目并配置路由的全流程(含国内镜像加速)
vue.js·node.js·vite