You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Twilio Functions中如何正确引入并使用自定义模块?

Twilio Functions 自定义公共模块引入方案

你遇到的Cannot find module报错核心原因是路径匹配错误:Twilio部署函数时,会把所有入口函数文件单独放到运行环境的/var/task/handlers/目录下,你写的./libs/utils.js是相对这个handlers目录寻址,但你本地创建的libs文件夹默认不会被打包到该路径下,自然无法找到对应模块。

可落地的实现方式

方式1:使用私有资产存放公共模块(控制台/CLI部署均适用)

这是官方推荐的跨函数复用代码的方案,步骤如下:

  • 调整文件存放路径:把需要复用的JS文件放到项目的assets目录下,如果要按libs目录分类,本地最终路径为assets/libs/utils.js
  • 加私有访问标记:把文件名改为utils.js.private,加了.private后缀的资产不会暴露公网访问入口,仅能在函数运行时被内部调用
  • 调整引入逻辑,不要直接写相对路径require,先通过Runtime API拿到文件的真实运行路径再加载:
const utilsPath = Runtime.getAssets()['/libs/utils.js'].path;
const utils = require(utilsPath);

exports.handler = async function(context, event, callback) {
    // 业务逻辑
    utils.do_this();
    callback(null, {success: true});
}

如果你直接在Twilio网页控制台操作、没有本地CLI环境,上传资产时直接在Assets板块上传文件,路径前缀填/libs/utils.js,权限选择「Private」即可,不需要手动修改文件名后缀。

方式2:CLI部署时使用共享目录(仅适合本地用Serverless Toolkit部署的场景)

如果你用Twilio CLI做本地开发、部署函数,可以直接在项目根目录(和functions、assets文件夹平级)新建shared目录存放公共模块,引入时写从函数文件出发的相对路径即可。比如函数文件在functions/xxx.js,公共文件在shared/libs/utils.js,引入写法为:

const utils = require('../shared/libs/utils.js');

CLI部署时会自动把shared目录打包到运行环境的正确路径下,不会出现模块找不到的问题。

原写法的问题

直接写require('./libs/utils.js')默认从当前函数文件所在目录查找libs文件夹,但Twilio不会把根目录下自建的libs文件夹同步到handlers目录,除非你把libs文件夹直接放到每个函数文件所在的functions子目录下——但这种写法需要在每个函数目录下存一份公共代码,维护成本极高,不推荐使用。

内容的提问来源于stack exchange,提问作者WilliamX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 05:39:14