运行项目时 Node Canvas 抛出错误

Bla*_*cec 7 canvas node.js apple-m1

Node Canvas 在 m1 上不适用于我

当我尝试运行我的项目时,我收到此错误消息:

Error: dlopen(.../node_modules/canvas/build/Release/canvas.node, 0x0001): tried: '.../node_modules/canvas/build/Release/canvas.node' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/usr/local/lib/canvas.node' (no such file), '/usr/lib/canvas.node' (no such file)

已经做了:

brew install pkg-config cairo pango libpng jpeg giflib librsvg

xcode-select --install

npm i canvas

没有错误

不知道如何调试这个,因为有人使用 Node Canvas 在 m1 笔记本电脑上工作,请帮忙。

小智 12

最重要的是确保您的 Node 可执行文件已针对 Apple Silicon 进行编译,这意味着有一个预构建的二进制文件darwin-arm64。您可以在此处查看哪些版本具有哪些二进制文件(以下页面包含 Node 版本 16.13.1 的二进制文件):https ://nodejs.org/download/release/v16.13.1/ 。

Node v14 没有预构建的二进制文件darwin-arm64(请参阅https://github.com/nodejs/node/issues/36161),因为它无法本地编译到 Apple Silicon。

我使用volta( https://volta.sh/ ) 来管理我的 Node 版本,因此如果您安装 Node v16volta install node@16然后运行npm i canvas​​,您应该会得到一个正确编译的canvas.node文件。

如果失败,请转到node_modules/canvas并运行npm install --build-from-source,这将编译 C++ 插件并输出 corect canvas.node

您可以通过运行以下命令来检查:

file node_modules/canvas/build/Release/canvas.node
# outputs: node_modules/canvas/build/Release/canvas.node: Mach-O 64-bit bundle arm64
Run Code Online (Sandbox Code Playgroud)

如果arm64最后有这样的提示,那么你就可以开始了。如果仍然显示x86_64,则说明出现问题。