繁体   English   中英

在 Mac M1 上使用节点 Canvas 部署 Firebase Cloud-Function 失败

[英]Deploy Firebase Cloud-Function with Node Canvas fails on Mac M1

我刚买了一台新的 Mac M1,我正在尝试部署一个 Firebase 云 Function。它工作正常,只要我不包括节点 canvas 模块。

当我尝试部署时,出现以下错误:

Error: Error occurred while parsing your function triggers.

Error: dlopen(/Library/WebServer/Documents/inklay_web_cf/functions/node_modules/canvas/build/Release/canvas.node, 0x0001): tried: '/Library/WebServer/Documents/inklay_web_cf/functions/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)
    at tryImporting (pkg/prelude/bootstrap.js:1736:37)
    at process.dlopen (pkg/prelude/bootstrap.js:1762:5)
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:1186:18)
    at Module.load (internal/modules/cjs/loader.js:984:32)
    at Function.Module._load (internal/modules/cjs/loader.js:877:14)
    at Module.require (internal/modules/cjs/loader.js:1024:19)
    at Module.require (pkg/prelude/bootstrap.js:1338:31)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/Library/WebServer/Documents/inklay_web_cf/functions/node_modules/canvas/lib/bindings.js:3:18)
    at Module._compile (internal/modules/cjs/loader.js:1136:30)
vonnielu@lukass-macbook-pro-1 functions % node-gyp rebuild
zsh: command not found: node-gyp

看来,Firebase Cloud Function 不喜欢这个架构。 但是我能做什么? 非常欢迎任何帮助。

节点:v16.14.0 Firebase 工具:10.2.0 Mac OS Monterey:12.2.1 Apple M1 Max

我通过以下方式解决了问题:

  • 将节点版本降级到 v12.22.10

  • 删除我的项目文件夹中的所有 node_modules

  • 在 vs 代码中运行 rosetta 终端

  • npm 安装

  • 删除我的云功能(部署所有功能取消注释)

  • 部署我的云功能(firebase 部署)

迟到的答案:面对与 Apple M1 芯片(arm64 架构)相同类型的问题,我发现了为什么涉及我的节点版本:

  • 即使是很小的节点版本更改也会出现我的问题,这取决于我使用的工具/编辑器(花了我几周的时间)
  • 安装的不同节点版本是为不同的处理器架构编译的:16.3.0 是 x86_64,16.15.0 是 arm64。 最终,在我将机器从基于 x86 的机器更改为基于 arm64 的机器之前安装了一个(我可能转移了我的备份,并且为我的新架构启动或编译了下一个版本
  • canvas 不知何故是系统的 x64_64,所以只与 x86_64 节点安装兼容

我现在正在寻找 2 个解决方案,要么我在 x64 中使用以前的节点,要么我在我的 package.json(干净的方式,恕我直言)中系统地找到如何为 arm64/本地 arch 获取 canvas。 (第三种方式:x64 上的新节点但也不干净)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM