GB/T28181 全栈开发日记[4]:使用 ESlint 辅助开发

94 阅读2分钟

GB/T28181 全栈开发日记[4]:使用 ESlint 辅助开发

介绍

GoWVP (Golang Web Video Platfrom) 是一个 Go 语言实现的,基于 GB28181-2022 标准实现的网络视频平台,负责实现核心信令与设备管理后台部分,支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联,支持rtsp/rtmp等视频流转发到国标平台,支持rtsp/rtmp等推流转发到国标平台。

技术栈

Golang v1.23, Goweb v1.x, Gin v1.10, Gorm v1.25 ...

React 19, Vite 6.x, Typescript, React-Router v7, React-Query v5, shadcn/ui ...

ESLint

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

ESLint 是一种用于识别和报告 ECMAScript/JavaScript 代码问题的工具,其目标是使代码更加一致并避免错误。

ESLint 是完全可插入的。每个规则都是一个插件,可以在运行时添加更多规则。还可以添加社区插件、配置和解析器来扩展 ESLint 的功能。

在 vscode 扩展中搜索 eslint,选择第一个安装。 macbook 打开扩展的快捷键是 shift+command+x

image-20250119143211666

快捷键 f1 打开命令,输入 eslint,选择 create eslint configuration

image-20250119151205552

按照引导一步步设置即可,注意别全一路回车了。

image-20250119151357729

最终会在项目根目录,生成 eslint.config.js 文件。

默认生成的文件打开查看,会提示类型错误,可以无视错误,也可以指定类型为 tseslint.config,就不会报错了。

image-20250119161151394

image-20250119161438961

安装 eslint 插件: react-refresh

接下来安装 react-refresh,通过此 eslint 能够让我们发现 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
);
​

解决 hmr invalidate 问题

打开 device.tsx ,eslint 提示出了问题,快速刷新仅在文件仅导出组件时有效。

这里的对象确实也不需要导出,删除 export,此时对文件修改,浏览器页面就实时更新啦。

image-20250119144121713

可以查看官方文档了解更多配置相关的说明,建议新手使用默认配置,先了解存在这些问题,再使用高级高能,自动格式化修复等等。

总结

"千淘万漉虽辛苦,吹尽狂沙始到金" ,解决问题要不急不躁,抽丝剥茧。

参考

eslint 官方文档

vscode eslint 扩展

eslint 配置说明 官方文档