mac 外接磁盘,热更新失效

背景

外接磁盘剩余内存比较大,想空出一些内存给内置磁盘,于是,移动了项目。跑项目发现热更失效。

根本原因

Mac 前端工具(Vite或者Webpack)默认是依靠 FSEvents 系统原生事件监听文件的修改的。

外接的 移动硬盘 或者 固态U盘 属于外部挂载文件系统,存在下面两个问题:

  • FSEvents事件丢失、延迟:外置磁盘的文件写入事件无法完整、实时传递给 Node 的 chokidar监听器,保存代码后工具完全收不到变更通知,自然不触发热编译 HMR。

  • IDE安全写入冲突:VSCode、WebStorm 默认安全写入机制(临时文件替换)在外置盘会拆分文件事件,监听器识别不到有效修改。

当然还有额外干扰:移动硬盘闲置休眠、usb读写延迟、外置盘ntfs第三方挂载驱动不稳定,进一步加剧监听失效。

解决

如果并不想从外置又移动到内置内存当中,那么考虑一下试试下面方案。

方案1:

vite 项目(Vue、React,90%前端项目在用)

改 vite.config.js/ts, 强制轮询扫描文件,放弃 mac 衍生 FSEvents 监听:

js 复制代码
export default defineConfig({
  plugins: [vue()],
  server: {
      hmr: true, // 确保热更开启
      watch: {
        usePolling: true, // 外置磁盘必开,轮询替代系统事件
        interval: 150, // 扫描间隔(ms),数值越小越灵敏
        binaryInterval: 300,
        ignored: ['**/node_modules/**', '**/dist/**'] // 减少监听压力
      }
  }
})

修改后重启dev服务,保存代码即可正常热更。

方案2: Webpack项目(Vue2 / React)

webpack-dev-server配置开启轮询:

js 复制代码
devServer: {
  hot: true,
  watchOptions: {
    poll: 150, // 开启轮询
    ignored: /node_modules/
  }
}

另一种就是从外置内存转内置内存

转了就可以了。

相关推荐
爱勇宝7 小时前
《道德经》第 13 章:别让评价系统控制你的心
前端·后端·产品
掘金者阿豪7 小时前
集中式与分布式数据库怎么选?从架构原理到电科金仓的实践思考
前端·后端
墨林陌7 小时前
AI 热点日报(2026-11-06):乌镇峰会闭幕发布全球开源AI倡议,腾讯混元Hy4发布即开源
前端
张彦峰ZYF7 小时前
升级了不等于变好了:AI回归测试的固定评测集、版本对比、质量阈值与CI门禁
人工智能·后端·模型或提示词升级·语言模型没有编译器与确定性输出·总体、切片与回退清单·红线、护栏与目标·ci门禁把判定写进合并路径
程序员沉梦听雨7 小时前
【搜索引擎】Kibana使用指南
java·后端·学习笔记
亿元程序员8 小时前
8年游戏主程从公司毕业了,能干些啥?
前端
Cosolar8 小时前
极简智库(MiniDocs):docsify、VitePress、Notion 等知识库搭建服务的完美替代
前端·后端·架构
涛涛ing8 小时前
那些“每个决定都正确”的项目,最后是怎么烂掉的
前端
Goboy8 小时前
夯爆了,我被一个一句话接入的免费可观测平台策反了,那一刻我决定放弃用了3年的Prometheus
后端·docker·kubernetes
徐小夕9 小时前
万字长文!DeepSeek Super-agent × 企业知识库架构深度拆解与落地实践
前端·vue.js·github