diff --git a/astro.config.mjs b/astro.config.mjs index 7aec4a2..d26e285 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -137,4 +137,18 @@ export default defineConfig({ ], ], }, + vite: { + server: { + watch: { + /* + * 项目根目录下的 .pnpm-store 是 pnpm 的内容寻址仓库:5.4 万个文件、672 MB, + * 而且已经被 .gitignore 忽略。Vite 默认会把项目根整个 watch,加上它以后 + * inotify 直接到顶(max_user_watches = 65536),dev server 一启动就刷屏: + * ENOSPC: System limit for number of file watchers reached + * 排除掉即可。node_modules / .git 是 Vite 默认就排除的,不用管。 + */ + ignored: ["**/.pnpm-store/**"], + }, + }, + }, }) diff --git a/docs/操作指南.md b/docs/操作指南.md index 7723a3f..29b7a31 100644 --- a/docs/操作指南.md +++ b/docs/操作指南.md @@ -294,6 +294,24 @@ sudo sysctl fs.inotify.max_user_watches=524288 如果连空态提示都看不到,检查 `src/data/reading.json` 是否存在(这个文件要提交进 git)。 +**`pnpm dev` 启动时满屏刷红** + +历史上踩过两个独立的原因,都已修好,这里记下来免得再犯: + +1. **源码里出现字面量的 script 开标签**(`Sketch.astro` 的 frontmatter 里曾经有)。 + Astro 编译器靠**扫描源码文本**收集内联脚本,它分不清「这是真的标签」还是 + 「在字符串/注释里」。一旦扫到,就会把后面的内容当成组件脚本交给 Vite 解析, + 报 `Expected "}" but found "{"` 或 `Unexpected "。"`,整个 `/src` 刷红。 + → 用 `"\x3Cscript>"` 拼出来。**注释里也不能写**,第一版就是栽在注释上。 + +2. **`.pnpm-store` 被 Vite 的 watcher 一起监听**。它是 pnpm 的内容寻址仓库, + 5.4 万个文件 / 672MB,直接把 inotify 撑爆(`max_user_watches = 65536`), + 报 `ENOSPC: System limit for number of file watchers reached`。 + → 已在 `astro.config.mjs` 里排除:`vite.server.watch.ignored: ["**/.pnpm-store/**"]`。 + +看到 `[WARN] [glob-loader] No files found ... src/content/studies` 是**正常的** —— +`studies` 集合目前是空的,专题页会显示空态。 + **想回退到之前的状态** ```bash git log --oneline # 看提交 diff --git a/package.json b/package.json index 5469c41..b3b121b 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "tianxuetao-blog", "version": "0.1.0", "private": true, + "type": "module", "scripts": { "dev": "astro dev", "start": "astro dev", diff --git a/src/components/Sketch.astro b/src/components/Sketch.astro index 73e4e3d..237e02a 100644 --- a/src/components/Sketch.astro +++ b/src/components/Sketch.astro @@ -17,8 +17,22 @@ const { const sketchId = `sketch-${Math.random().toString(36).slice(2, 10)}` +/* + * 下面两个常量用来拼出 script 开/闭标签,尖括号必须写成 \x3C。 + * + * 原因:Astro 编译器靠**扫描源码文本**里的 script 标签来收集内联脚本, + * 它不认识"这只是在字符串或注释里"。一旦源码中出现字面量的开标签, + * 它就会把后面的内容当成真的组件脚本抽出来交给 Vite,dev 启动时依赖 + * 扫描直接报错、整个 /src 刷红。所以: + * - 模板字符串里不能写字面量开标签 + * - 上面这段注释里也不能写(第一版就是栽在这里) + * 字符串的值不变,仍然是正常的 script 开闭标签。 + */ +const SCRIPT_OPEN = "\x3Cscript>" +const SCRIPT_CLOSE = "\x3C/script>" + const resizeScript = autoSize - ? `