Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save quchao/21468658c1a13ad47462c1778722e580 to your computer and use it in GitHub Desktop.
Save quchao/21468658c1a13ad47462c1778722e580 to your computer and use it in GitHub Desktop.
在微信小程序云函数中使用 gRPC 二进制模块。

在微信小程序云函数中使用 gRPC 二进制模块。

[TOC]

截止 10 Apr, 2020 , 微信小程序的云函数仅支持 Node.js 语言,函数在生产环境执行于 CentOS 7.2 的 Node.js 8.9,因此若有二进制模块使用需求请注意相关配置。

现以 gRPC 为例说明。

本地调试

建议使用 NVM 安装 8.9 的最新版:

nvm install v8.9.4 --latest-npm

为了之后随微信环境要求变化,建立一个 alias :

nvm alias weapp v8.9.4

为了减少与其它项目依赖的冲突概率, 可将版本写入 .nvmrc 并用该脚本来做环境自动切换。

前往小程序项目的云函数目录,建立 .nvmrc 文件:

echo weapp > ~/mini-program-proj/cloud/.nvmrc

此时当切换至云函数目录将自动切换至所需的 Node 版本。 我们可根据指引进入对应函数的本地调试器,并修改本地 Node.js 执行文件路径为 ~/.nvm/versions/node/v8.9.4/bin/node 。(请根据实际路径调整)

此时我们 npm i 可正常安装对应版本和平台的 gRPC 二进制模块。 如在 macOS 下模块位于 node_modules/grpc/src/node/extension_binary/node-v57-darwin-x64-unknown

生产环境

当我们对云函数执行上传并部署(云端安装依赖)到生产环境后, 程序可能会抛出 Failed to load gRPC binary module... 错误, 原因是 gRPC 二进制模块在云端安装失败。

解决方法是本地安装对应的二进制模块后, 再将 node_modules 全量上传。 (听起来很唬烂,但似乎是目前唯一的办法)

从错误日志中我们得知所需的二进制模块是 node-v57-linux-x64-glibc , 我们可以在 CentOS 7.2 环境下(如借用 Docker 容器)编译取得, 或更简单地做交叉编译。 进入对应的云函数目录执行:

npm rebuild --target=8.9.4 --target_platform=linux --target_arch=x64 --target_libc=glibc --update-binary

然后在本地安装其它所有模块依赖之后对函数执行上传并部署(所有文件)

至此我们已解决 gRPC 的二进制模块依赖问题, 其它模块的大同小异。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment