关闭 Quartz v5 编译时提示的 direct-eval 警告
在 升级 Quartz v5 编译时会因为使用的插件 note-properties 用到的 gray-matter 库包含 eval 而产生一个 direct-eval 的 warning。
$ node ./quartz/bootstrap-cli.mjs "build"
Quartz v5.0.0
Cleaned output directory `public` in 851μs
Found 226 input files from `content` in 17ms
▲ [WARNING] Using direct eval with a bundler is not recommended and may cause problems [direct-eval]
.quartz/plugins/note-properties/dist/index.js:3117:17:
3117 │ return eval(str) || {};
╵ ~~~~
You can read more about direct eval and bundling here: https://esbuild.github.io/link/direct-eval
这里记录关闭它的方法,因为目前 v5 版本尝试关过但没关全。变动比较小,不打算提 PR
项目中有好几处调用 esbuild 的入口,大部分在 cli/handlers.js 中,那里本来就有 logOverride,我还纳闷为什么不生效。调试确定在其他地方还有,加上就好
async function transpileWorkerScript() {
// transpile worker script
const cacheFile = "./.quartz-cache/transpiled-worker.mjs"
const fp = "./quartz/worker.ts"
return esbuild.build({
entryPoints: [fp],
outfile: path.join(QUARTZ, cacheFile),
bundle: true,
keepNames: true,
platform: "node",
format: "esm",
packages: "external",
sourcemap: true,
sourcesContent: false,
logOverride: {
"direct-eval": "silent",
},Chrome DevTools 设备类型会影响 iframe 显示
今天调试 Quartz v5 升级评论模块的 giscus 输入框时,发现在 README | 涼果笔记 页面评论区开启了 DevTools 的 设备仿真,并且顶上的设备类型从 Desktop 切换到 Mobile 后,输入框下半部分会无法显示。
iframe 的 CSS 长宽属性在切换前后没有变化。倒是在真正的移动设备上,没有这个问题,怀疑是 DevTools 的问题。
改写 Subtree Merge 之前的提交 Message
在清理 升级 Quartz v5 分支的历史提交时,Claude 自动创建了提交,但 title 真是没有含义。打算修改 a099190c(“本地变更”)的 commit message。但这个提交的直接上级是一个通过 Git Subtree 合并进来的 Merge 节点(dba1f23c),后面还跟着其他的子树合并。
* 619a301d (HEAD -> pages) 找回对于 folder-page 的变更
* 4007053f Merge commit 'd2967f80' as 'quartz-custom/folder-page'
|\
| * d2967f80 Squashed 'quartz-custom/folder-page/' content from commit a538b8e5
* a099190c 本地变更
* dba1f23c Merge commit 'b2fcccf8' as 'quartz-custom/recent-notes'
|\
起初尝试以 dba1f23c 的父级 23ac8b18 为基准直接执行交互式变基:
git rebase -i --rebase-merges --empty=keep 23ac8b18
以提示无法合并失败,因为 subtree 中 new root 的内容会和 my root 的内容冲突,
最干净的手段是用 git replace。
先用 git commit-tree 基于旧提交的文件树和它的父提交,直接造一个 message 不同的全新独立提交:
git commit-tree 'a099190c^{tree}' -p dba1f23c -m "找回对于 recent-notes 的变更"执行后会拿到一串全新的哈希值(假设为 NEW_HASH)。接着在本地建立替换映射:
git replace a099190c NEW_HASH此时通过 git log --graph 查看,替换已经在本地生效,且分支拓扑图完好无损。为了把这个变化真正固化到历史中,重写从 dba1f23c 之后开始到当前 pages 分支为止的这一段局部历史:
git filter-branch -- dba1f23c..pagesGit 会顺着刚才的替换关系,把后续的 Subtree 合并节点重新织好。
最后清理掉本地的替换标记即可:
git replace -d a099190c清理完观察到之前 a099190c 的这个 hash 又变回了之前的 message,所以 filter-branch 这段是必须的,否则只是本地看起来正常。