Skip to content

M1 Mac install custom libvips, to use a globally-installed version of libvips. #16

Open
@jappp

Description

@jappp

前言

最近在做一个图片云处理项目,使用到的主要技术框架是sharp.js。遇到这样一个问题:sharp底层依赖的包是libvips图像处理库,但是官方预构建的二进制文件sharp-libvips是不支持输出gif,webp等动态格式的,查阅官方文档之后发现需要全局下载安装libvips库。原文是:Requires libvips compiled with support for ImageMagick or GraphicsMagick。To use a custom, globally-installed version of libvips instead of the provided binaries。具体安装详见libvips install
MacOS系统下,直接homebrew安装

brew install vips

安装完成之后,如图所示校验是否安装成功
image

然后再去项目里面运行npm install
image
从图上可以看出,npm直接从cache里面下载了预构建的libvips,并不是全局安装的libvips。一开始我以为是npm缓存问题,所以把缓存文件删除之后,再试一遍。
image
下载地址变了,但还是下载的预构建libvips文件,不能支持gif功能。这就奇怪了,我的步骤应该没有出问题,想到我是用的M1版本的mac,会不会和系统有关系呢?所以去sharp官方issue根据关键词查了一下,还真被我找到了。
Mismatched x64 and ARM64 architectures on M1 Mac #2588

根据lovell的说法:vips is arm64 but you're using x64 Node.js - the architectures must match.

全局下载的libvips库是arm64架构的,但是使用的node是x64架构,就会导致不兼容使用不了全局库。
image
查了下自己的node版本,还真是x64架构的。果断使用nvm下载arm64架构的node版本
然后再切换到正确的node版本运行npm install

image

很清晰的可以看见,这次使用了全局的libvips库,同样功能运行也很正常。

这个问题虽然比较小,但确实花费了很多时间去排查吧,所以整理一下相关步骤写篇blog,希望能给遇到相同问题的人一些帮助。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions