You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何配置Vite项目监听public目录以实现热重载?

解决Vite不监听public目录下翻译文件的问题

嘿,这个问题我之前也踩过坑!Vite默认确实不会监听public目录下的文件变化来触发热重载,不过有几种实用的方法可以解决这个问题,让你修改翻译文件后不用手动刷新页面:

方法1:修改Vite配置,添加监听目录

Vite的server.watch选项可以自定义需要监听的文件路径,我们只需要把public目录加入监听列表就行。在你的vite.config.js(或.ts)里修改配置:

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  server: {
    watch: {
      include: ['src/**', 'public/**'], // 明确包含public下所有文件
    },
  },
});

保存配置后重启Vite服务,现在修改public下的translation.json文件,页面应该会自动刷新了。

方法2:使用vite-plugin-full-reload插件

如果第一种方法没生效,或者你只想精准监听翻译文件,可以用这个专门的插件来触发页面刷新。

首先安装插件:

npm install vite-plugin-full-reload --save-dev

然后修改Vite配置:

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import fullReload from 'vite-plugin-full-reload';

export default defineConfig({
  plugins: [
    react(),
    fullReload(['public/**/*.json']), // 只监听public下的JSON文件,更精准
  ],
});

这个插件会在指定文件变化时触发页面全量刷新,虽然不是热重载那种局部更新,但至少不用手动点刷新按钮了。

方法3:把翻译文件移到src目录下

如果愿意调整项目结构,把翻译文件放到src目录(比如src/locales/en/translation.json)是更彻底的解决方案——因为Vite默认会监听src下所有文件的变化,修改后会自动触发热重载。

你需要调整i18n的初始化代码,直接导入翻译文件而不是从public加载:

import i18next from 'i18next';
import { initReactI18next } from 'react-i18next';
import enTranslation from './locales/en/translation.json';
import ruTranslation from './locales/ru/translation.json';

i18next
  .use(initReactI18next)
  .init({
    resources: {
      en: { translation: enTranslation },
      ru: { translation: ruTranslation },
    },
    lng: 'en', // 默认语言
    interpolation: {
      escapeValue: false, // React已经处理了XSS,这里不需要
    },
  });

这种方式不仅能触发热重载,还能让Vite对翻译文件进行打包优化,一举两得。


内容的提问来源于stack exchange,提问作者Two Horses

火山引擎 最新活动