- Published on
Yarn 安裝來自 GitHub repository 的套件時不要用網站上的 SSH URL
2022 年 11 月,我用 Yarn v1 更新我一個有用到 GitHub private repository 的專案時出了錯。經過調查發現是 Node.js v19.1.0 的改動造成了這個錯誤。
在 GitHub 要 clone repository 時複製的 SSH 地址是長這樣:[email protected]:vrabe/repo.git
。如果要在專案使用這個 repository 也是使用這個地址:yarn add ssh://[email protected]:vrabe/repo.git
。雖然 Git 支援這種類似 scp 指定路徑的方法,不過這個卻不符合 WHATWG 的 URL 標準。URL 字串的冒號後面應該是埠號,只能是數字。先前 Node.js 的 url.parse()
是允許這個的,不過為了安全考量所以在這個版本改掉了。yarn 在解析相依性解析到我用到的這個 private repository 地址的時候,有用到 url.parse()
這個函式,所以更新到 v19.1.0 之後就發生了這個錯誤。
後來雖然在 v19.2.0 回退了這個改動,不過在 v20 開始出現棄用的警告,可能在更之後的 Node.js 版本就不能這樣用了。新版 Yarn 已經不使用這個 url.parse()