SSR 规则
本页集中列出所有相关规则的用途、配置、错误示例和正确示例,无需跳转页面查看对照。高亮行标示修改;复制代码时保留完整源代码。每条规则注明适用范围和当前支持限制;规范示例并不保证当前实现会产生诊断。
| 规则 | 示例 | 用途 |
|---|---|---|
ssr/no-browser-globals-in-ssr |
错误示例 · 正确示例 | 禁止 SSR 上下文中的浏览器专用全局变量 |
ssr/no-hydration-mismatch |
错误示例 · 正确示例 | 禁止导致水合不匹配的不确定值 |
全部规则 · 规则选项 · ESLint 迁移对应表 · 项目检查 · 组件间属性传递
ssr/no-browser-globals-in-ssr
禁止 SSR 上下文中的浏览器专用全局变量
默认严重程度: warning
预设: happy-path, nuxt, ecosystem, opinionated
自动修复: 无;请检查建议的修改
适用范围: Vue SFC 模板和代码块,包括规则所需的脚本上下文
选项: 没有规则专属选项。可以配置严重程度和预设。
配置(Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"ssr/no-browser-globals-in-ssr": "warn"
}
},
},
});
vp run lint
错误示例
setup 立即读取 window.innerWidth,但组件在服务器运行时不存在 window。
<script setup lang="ts">
const width = window.innerWidth;
</script>
正确示例
初始宽度是服务端安全的 ref 值,浏览器访问移到 onMounted,在客户端运行而不在 SSR setup 期间运行。
<script setup lang="ts">
const width = ref(0);
onMounted(() => {
width.value = window.innerWidth;
});
</script>
正确示例在上述配置下不会触发这条规则的诊断;其他规则仍可能报告诊断。
ssr/no-hydration-mismatch
禁止导致水合不匹配的不确定值
默认严重程度: warning
预设: happy-path, nuxt, ecosystem, opinionated
自动修复: 无;请检查建议的修改
适用范围: Vue SFC 模板和代码块,包括规则所需的脚本上下文
选项: 没有规则专属选项。可以配置严重程度和预设。
配置(Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"ssr/no-hydration-mismatch": "warn"
}
},
},
});
vp run lint
错误示例
模板渲染时执行 Math.random(),因此服务端和客户端可能为同一段落生成不同文本。
<template>
<p>{{ Math.random() }}</p>
</template>
正确示例
段落渲染稳定的 seed 状态,不再生成新随机结果。在此 Nuxt 风格示例中,useState 提供共享状态,初始值是常量 "stable"。
<script setup lang="ts">
const seed = useState("seed", () => "stable");
</script>
<template>
<p>{{ seed }}</p>
</template>
正确示例在上述配置下不会触发这条规则的诊断;其他规则仍可能报告诊断。