使用Twilio Serverless部署Node.js应用时遇模块找不到错误
Twilio Serverless部署Node.js应用时模块找不到错误
环境与代码结构
我的Node.js应用文件夹结构如下:
functions ├── chunk_text.js ├── gpt_handler.js ├── hello-world.js ├── make_call.js ├── pre-scraping.js ├── private-message.js ├── read_scraped.js ├── respond.js ├── sms │ └── reply.protected.js ├── transcribe.js └── vector_db.js
respond.js核心代码:
const axios = require('axios'); const { getRelevantContext } = require('./vector_db'); const { createGPT4Response } = require('./gpt_handler'); // Define the main function for handling requests //...
vector_db.js核心代码:
const { Pinecone } = require('@pinecone-database/pinecone'); const { embedText } = require('./gpt_handler'); // Initialize Pinecone //... module.exports = { getRelevantContext };
操作步骤
- 使用
twilio serverless:deploy部署应用 - 使用
node functions/make_call.js运行应用 - 通过curl发送POST请求:
curl -X POST http://localhost:3000/make_call \ // -H "Content-Type: application/json" \ // -d '{"myNumber": "+mynumber"}'
错误现象
请求成功调用/transcribe接口,但调用/respond接口时失败,错误日志:
{ "message": "Cannot find module './vector_db'\nRequire stack:\n- /var/task/handlers/ZN4b9ac101952f555dd0714e7598bece55.js\n- /var/task/node_modules/runtime-handler/index.js\n- /var/task/runtime-handler.js\n- /var/runtime/index.mjs", "name": "Error", "stack": "Error: Cannot find module './vector_db'\nRequire stack:\n- /var/task/handlers/ZN4b9ac101952f555dd0714e7598bece55.js\n- /var/task/node_modules/runtime-handler/index.js\n- /var/task/runtime-handler.js\n- /var/runtime/index.mjs\n at Module._resolveFilename (node:internal/modules/cjs/loader:1140:15)\n at Module._load (node:internal/modules/cjs/loader:981:27)\n at Module.require (node:internal/modules/cjs/loader:1231:19)\n at Module.twilioRequire [as require] (/var/task/node_modules/runtime-handler/src/dependency.js:28:21)\n at require (node:internal/modules/helpers:177:18)\n at Object.<anonymous> (/var/task/handlers/ZN4b9ac101952f555dd0714e7598bece55.js:2:32)\n at Module._compile (node:internal/modules/cjs/loader:1364:14)\n at Module._extensions..js (node:internal/modules/cjs/loader:1422:10)\n at Module.load (node:internal/modules/cjs/loader:1203:32)\n at Module._load (node:internal/modules/cjs/loader:1019:12)" }
已确认respond.js与vector_db.js在同一目录下,无拼写或大小写错误。
解决方案
- 配置Twilio打包包含依赖文件
Twilio Serverless默认单独打包每个函数,若存在间接引用或循环引用,可能遗漏依赖文件。在项目根目录创建.twilioserverlessrc文件,手动指定respond.js需要包含的文件:
{ "functions": { "respond.js": { "include": ["vector_db.js", "gpt_handler.js"] } } }
- 修正模块引用路径
将相对路径补充完整后缀,或改用基于项目根目录的绝对路径:
// respond.js中 const { getRelevantContext } = require('./vector_db.js'); // 或使用绝对路径 const { getRelevantContext } = require(`${process.cwd()}/functions/vector_db.js`);
- 排查部署环境路径差异
在respond.js中添加日志打印当前目录,确认部署后路径基准变化:
console.log('Current directory:', __dirname);
- 清理缓存重新部署
执行twilio serverless:deploy --clean清理旧打包缓存,再重新部署应用。
内容的提问来源于stack exchange,提问作者Rahul Poddar
相关产品推荐
相关产品推荐

