[Yarn] 為何yarn add會出現EACCES: permission denied?原來只是檔案被上鎖

在react專案資料夾下安裝axios

$ yarn add axios

結果跳出以下錯誤,並且axios安裝失敗。

yarn add v1.22.10

warning package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in order to avoid resolution inconsistencies caused by unsynchronized lock files. To clear this warning, remove package-lock.json.

中間省略...

error An unexpected error occurred: "EACCES: permission denied, open '/home/kabuto/react-learn-hook/frontend/yarn.lock'".

info If you think this is a bug, please open a bug report with the information provided in "/home/kabuto/react-learn-hook/frontend/yarn-error.log".

info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.

只看後面錯誤訊息,查了Statck Overflow以為是 yarn.lock有執行權限的Bug,
雖然照字面看permission denied也確實如此,於是就用以下指令修改yarn.lock的權限

 $ sudo chown -R $USER:$GROUP yarn.lock 

當然這次yarn add 就成功了,總覺得強行修改權限不是個好辦法,事實上在Statckoverflow也有人提議乾脆sudo yarn add。

2022/01/15更新:
第二種解法:最保險的情況應該是刪除node_modules、package-lock.json、yarn.lock但保留package.json的情況下,接著使用yarn add 把另外需要的函式庫一個個安裝好。


事後檢討:
如果直接使用yarn install 會同步產生yarn.lock將導致目前安裝的函式庫上鎖,
這也是我為什麼會遇到這個問題的根本原因,因為我此次專案使用docker管理開發環境,
容器中啟動時執行Bash指令yarn install && yarn run dev

但因為原始碼的部份我是直接讓docker的容器讀取共用,所以啟動時也間接在我的環境上新增了yarn.lock並上鎖(提高讀寫權限)我的node_modules,當然上鎖依賴函式庫這件事也沒錯,因為在分享給其他人應用程式原始碼若能攜帶yarn.lock也能確保安裝版本與開發環境相同。

所以目前最佳作法應該是第二種解法,下課!




參考資料:

留言

這個網誌中的熱門文章

Kotlin玩Android第03篇 Listview(01 ArrayAdapter)

使用Intent在Activity間傳遞資料(bundle)

golang本地測試如何繞過防火牆詢問允許