AWS Lambda Node.js函数缺失whereis命令的解决方案咨询
问题解答:AWS Lambda Node.js环境下的
whereis命令与字体列表获取方案 核心结论
AWS Lambda的Node.js运行时环境默认不包含whereis命令,也未预装fc-list这类字体查询工具,因此直接依赖font-list库的getFonts()方法会触发报错。以下是具体修复与替代方案:
方案一:通过自定义Lambda层补充所需工具
- 构建包含
whereis和fc-list的自定义Lambda层:- 在与Lambda兼容的Linux环境(如Amazon Linux 2)中,安装
findutils(提供whereis)和fontconfig(提供fc-list) - 将安装后的二进制文件按Lambda层要求的目录结构(如
bin/目录下存放二进制文件)打包为zip - 在AWS控制台创建Lambda层并上传该zip包
- 将该层附加到你的Node.js Lambda函数,之后函数即可调用
whereis和fc-list,font-list库也能正常运行
- 在与Lambda兼容的Linux环境(如Amazon Linux 2)中,安装
方案二:绕过第三方库,手动定义Lambda可用字体
Lambda默认环境预装的字体数量有限,可直接手动列出这些字体,无需调用外部命令:
- Lambda默认包含的常见字体:
Arial、Courier、Helvetica、Times New Roman、Verdana等 - 修改代码直接返回预定义字体列表:
static async get(body, res) { // 手动定义Lambda环境可用字体 const predefinedFonts = [ { family: 'Arial', path: '/usr/share/fonts/arial.ttf' }, { family: 'Courier', path: '/usr/share/fonts/courier.ttf' }, { family: 'Times New Roman', path: '/usr/share/fonts/times.ttf' } // 可根据实际环境补充更多字体信息 ]; res['body']['fonts'] = predefinedFonts; };
方案三:打包自定义字体到Lambda部署包
如果需要更多自定义字体:
- 将所需字体文件(如.ttf格式)添加到项目目录
- 部署Lambda时将字体文件一同打包进部署包
- 代码中直接读取本地字体文件的信息,无需依赖
fc-list工具
内容的提问来源于stack exchange,提问作者Jesse Finnegan
相关产品推荐
相关产品推荐

