Node
此儲存庫中的 Node 範圍狹窄但至關重要:markdownlint git hook 會執行
npx --no-install markdownlint-cli2,解析 package.json / package-lock.json 中鎖定的 markdownlint-cli2 開發依賴。如果錯誤的 node
在 PATH 上,該 hook 就會中斷並阻止提交。
WSL 非互動式 shell 陷阱(最麻煩的那個)
登入 shell 會載入你的設定檔,從而載入版本管理器 (nvm) 並將儲存庫的 node
放入 PATH。一個非互動式 shell —— 腳本、背景工作、由無頭代理啟動的 git hook —— 並不會載入該設定檔,因此 npx/node 可能會解析到透過
WSL 互操作到達的 Windows Node 安裝,而非 Linux 版本。markdownlint(以及任何基於 Node 的 hook)隨後會在錯誤的 node 下執行,或完全失敗,而且僅在腳本和背景工作中發生——當你在終端機中手動提交時永遠不會遇到。
修復:在從腳本或背景工作提交或推送之前,將儲存庫的 node 放入 PATH。確切的做法在
references/wsl-node-path.md 中。
npm 衛生
npm ci(不是npm install)用於從package-lock.json進行可重現的安裝;將 lockfile 與任何依賴變更一起提交。npx --no-install <tool>運行鎖定的本地開發依賴,並拒絕從網路靜默獲取不同版本——請保留--no-install。- 保持 Node 足跡最小:此儲存庫故意只提供一個開發依賴。添加依賴是一項需要確認的變更,而不是反射動作。