Featured image of post pnpm 找不到 Store 目錄?教你更改 store-dir 解決外接硬碟開發的坑

pnpm 找不到 Store 目錄?教你更改 store-dir 解決外接硬碟開發的坑

遇過 pnpm 噴錯說找不到 Store 目錄嗎?如果你把 pnpm store 設在外接硬碟,這篇文章教你如何快速校正 store-dir 路徑並重建專案連結。

你有沒有遇過這樣的狀況?為了節省電腦空間,把 pnpm 的 store 設定在外接硬碟,結果某天沒帶硬碟出門,或是想換個位置存,pnpm 就開始噴錯說找不到目錄?甚至把硬碟插回去也怪怪的?

這其實跟 pnpm 獨特的運作原理有關。今天我們就來聊聊 pnpm 的「倉庫」機制,以及當它「失聯」時該如何救回來!

pnpm 到底是怎麼省空間的?

在開始修復之前,我們先快速複習一下 pnpm 的省空間魔法。

不同於 npm 會在每個專案的 node_modules 裡都複製一份完整的套件,pnpm 使用的是 Content-addressable store (全域倉庫)Hard Links (硬連結)

pnpm 運作方式就是所有的套件檔案其實都只會存在你電腦裡的 某個「大倉庫」,你的專案目錄只是透過連結指向這個倉庫而已。這樣不僅節省硬碟空間,安裝速度也快得驚人。

項目 pnpm npm
儲存方式 全域倉庫 (Store) + 硬連結 每個專案獨立複製
空間佔用 極低 (同版本只存一份) 高 (重複複製)
安裝速度 快 (建立連結即可) 慢 (需要解壓縮與寫入)

為什麼外接硬碟會讓 pnpm 噴錯?

當你為了省本機 SSD 空間,把 pnpm store 設在外接硬碟時,潛在的坑就出現了:

狀況 說明
路徑失效 沒插硬碟時,pnpm 找不到原本設定的 store-dir,安裝時會直接報錯退出。
硬連結崩潰 因為硬連結(Hard Link)不能跨分割區(Partition),如果你的專案在 A 硬碟,倉庫在 B 硬碟,pnpm 會被迫改用複製的方式,這反而失去了原本的優勢,甚至可能因為快取路徑亂掉而導致執行錯誤。

遇到這種情況,我們需要手動來「校正回歸」一下。

解決方案一:校正回歸,重新設定 Store 路徑

如果你決定更換 store 的位置,最直接的方法就是告訴 pnpm 新的倉庫在哪裡。你可以使用以下指令:

pnpm config set store-dir <你的新目錄路徑>

例如將 pnpm store 設定使用者家目錄下的 ~/.pnpm-store

pnpm config set store-dir ~/.pnpm-store

如果你不確定目前的 store 設定在哪,可以先查詢:

pnpm store path

設定完成後,pnpm 就會知道以後要往哪裡去抓套件了。

解決方案二:砍掉重練,重新建立連結

有時候改完路徑,專案還是會有一些舊的殘留錯誤。這時候「砍掉重練」通常是最有效的藥方:

步驟 說明
1 刪除專案中的 node_modules 資料夾。
2 刪除 pnpm-lock.yaml(如果是因為路徑引起的奇怪錯誤,建議鎖檔也重產)。
3 執行 pnpm install 重新建立連結。

這會強迫 pnpm 根據你最新的配置,重新從 store 中拉出正確的連結到你的專案裡。

如何分配才最順?

如果你常在不同環境切換,或是擔心外接硬碟不穩定,最理想的配置是:將 pnpm store 放在本機 SSD,而專案代碼可以放外接硬碟。

為什麼?因為 store 通常不會變動得太頻繁,且體積雖然有,但分散在各專案的總和其實比 npm 小很多。保持倉庫在穩定的本機路徑(例如 macOS 預設的 ~/Library/pnpm/store),能讓你就算沒帶外接硬碟,也能在其他地方順利初始化新專案。

這種 Stateless(無狀態)的開發概念,能讓你的開發環境更具彈性!

結論:保持 Store 的穩定性就是省麻煩

管理 pnpm store 的重點在於「穩定」二字。如果你遇到了路徑問題,可以這樣做:

步驟 說明
1 先檢查並更換 store-dir 設定。
2 清理一下舊的套件:pnpm store prune(這可以幫你清除沒人在用的套件檔案,幫硬碟瘦身)
3 重新安裝套件 pnpm install

希望這篇文章能幫大家跳出 pnpm 路徑的坑,享受極速開發的樂趣!

Reference

All rights reserved,未經允許不得隨意轉載
使用 Hugo 建立
主題 StackJimmy 設計