一月時,我更新部落格,把 Astro 升級到 4.0.8,然後 Yarn 出現了類似下面的警告:
其實有很多行,我只列出第一行。
然後執行 local 測試環境時,如果開到有圖片的頁面,會出現下面的錯誤:
雖然之後再更新後解決了,但是二月更新時又出現了類似的問題。在做 astro build
的時候,出現了下面的錯誤:
這兩個錯誤看起來很明顯跟 sharp 有關。
實際上原因是 sharp 從 0.33.0 版本起對安裝的改變導致的。
sharp 本身及所依賴的 libvips 在不同電腦平台的二進制檔是不同的。舊版的 sharp 是在安裝的時候下載適合這個平台的二進制檔,而從 0.33.0 版本起的 sharp 則把這些預編譯過的二進制檔獨立出來成為 npm package(這些 package),由 package manager 判斷要安裝哪一個包含二進制檔的 package。
判斷的方式是將所有上述的 package 納入 sharp 的 optionalDependencies
,然後藉由各個 package package.json
的 cpu
、os
及 libc
決定要裝哪一個版本的 package。
package.json
上的這些東西是比較新的,所以舊版的 package manager 不會支援。這些 package 也有列出支援的 package manager 有:
- npm:
>=9.6.5
- yarn:
>=3.2.0
- pnpm:
>=7.1.0
Yarn v1 當然不在裡面。如果要解決這個問題,需要參考上面錯誤訊息,自己另外安裝 sharp,並加上 ignore-engines
flag:
或者如 sharp 作者 lovell 所說:
如果你還在用 Yarn v1 的話,現在是升級的最佳時機。
升級 Yarn,或者改用其他 package manager 吧。