将 vite 更新到 v6.0.7 后,发现代码做出的修改,浏览器不会快速刷新。
vite
v6.0.7
提示了错误
hmr invalidate /app/routes/device/device.tsx Could not Fast Refresh. Learn more at https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#consistent-components-exports
为了使 React 刷新正常工作,您的文件应该只导出 React 组件。
我们可以使用 eslint 发现错误并获得更详细的警告。
ESLint 是一种用于识别和报告 ECMAScript/JavaScript 代码问题的工具,其目标是使代码更加一致并避免错误。
ESLint 是完全可插入的。每个规则都是一个插件,可以在运行时添加更多规则。还可以添加社区插件、配置和解析器来扩展 ESLint 的功能。
在 vscode 扩展中搜索 eslint,选择第一个安装。 macbook 打开扩展的快捷键是 shift+command+x。
shift+command+x
快捷键 f1 打开命令,输入 eslint,选择 create eslint configuration
f1
eslint
create eslint configuration
按照引导一步步设置即可,注意别全一路回车了。
最终会在项目根目录,生成 eslint.config.js 文件。
eslint.config.js
默认生成的文件打开查看,会提示类型错误,可以无视错误,也可以指定类型为 tseslint.config,就不会报错了。
tseslint.config
接下来安装 react-refresh,通过此 eslint 能够让我们发现 hmr invalidate 更多错误信息。
hmr invalidate
npm i -D eslint-plugin-react-refresh
在 eslint.config.js 文件增加
import reactRefresh from "eslint-plugin-react-refresh"; export default [ /* Main config */ reactRefresh.configs.vite, ];
最终的文件内容大概长这样:
import globals from "globals"; import pluginJs from "@eslint/js"; import tseslint from "typescript-eslint"; import pluginReact from "eslint-plugin-react"; import reactRefresh from "eslint-plugin-react-refresh"; export default tseslint.config( { files: ["**/*.{jsx,tsx}"] }, { languageOptions: { globals: globals.browser } }, pluginJs.configs.recommended, ...tseslint.configs.recommended, pluginReact.configs.flat.recommended, reactRefresh.configs.vite );
打开 device.tsx ,eslint 提示出了问题,快速刷新仅在文件仅导出组件时有效。
device.tsx
这里的对象确实也不需要导出,删除 export,此时对文件修改,浏览器页面就实时更新啦。
可以查看官方文档了解更多配置相关的说明,建议新手使用默认配置,先了解存在这些问题,再使用高级高能,自动格式化修复等等。
总结
"千淘万漉虽辛苦,吹尽狂沙始到金" ,解决问题要不急不躁,抽丝剥茧。
[eslint 官方文档](https://eslint.org/docs/latest/use/getting-started)
[vscode eslint 扩展](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)
[eslint 配置说明 官方文档](https://eslint.org/docs/latest/use/configure/configuration-files)
Deleting the wiki page "GB T28181 开源日记[4]:使用 ESlint 辅助开发" cannot be undone. Continue?