問題
claude-mem 插件的所有 hook(SessionEnd、SessionStart、PostToolUse 等)在 session 結束時報錯:
SyntaxError: Unexpected token '.'
at Loader.moduleStrategy (internal/modules/esm/translators.js:133:18)
錯誤發生在 bun-runner.js:97:
return settings?.enabledPlugins?.['claude-mem@thedotmack'] === false;根本原因
系統安裝的 Node.js 是 v12.22.9(Ubuntu 22.04 apt 套件),不支援 optional chaining(?.)語法,該語法在 Node.js v14 才加入。
Claude-mem 的 hooks 包含一段 PATH 修正邏輯,設計上應自動切換到 NVM 的新版 node:
export PATH="$HOME/.nvm/versions/node/v$(ls \"$HOME/.nvm/versions/node\" ...)/bin:..."但這段邏輯有 bug:ls \"$HOME/.nvm/versions/node\" 在 fresh bash subprocess 裡,反斜線逃脫會讓 ls 失敗,導致 PATH 沒有更新,node 仍然指向系統 v12。
修復步驟
- 安裝 NVM + Node.js v24.14.1
- 建立
/usr/local/bin/nodesymlink → NVM v24,讓所有 bash 子行程預設拿到新版 node(不依賴 NVM PATH 修正邏輯) - 建立
~/.claude/.mcp.json,用絕對路徑啟動mcp-searchMCP server - 在
settings.json加入enabledMcpjsonServers: ["mcp-search"]及相關 allow rules - 修正
TaskCompletedhook 的路徑(Mac 路徑/Users/lookoutking/→/root/.claude/)
關鍵教訓
- Plugin hook 命令在 fresh bash subprocess 執行,不繼承 interactive shell 的環境
ls \"path\"在$()內用\"逃脫,在某些 bash 呼叫方式下會靜默失敗- 解法不是修 plugin 邏輯,而是讓預設 PATH 本身就有正確的 node(symlink)