找不到模块:'@algolia/cache-common'”
Cannot find module:'@algolia/cache-common'"
注意 (tl:dr):一切都在本地工作,但在 lambda 中不行。
我在 AWS 中有一个 lambda 函数,当我 运行 服务器在本地时一切正常,algolia 的使用是在服务内部进行的,该服务位于我服务器内的端点中。
我尝试安装@algolia/cache-common 也没有帮助。
由于此错误,对 lambda 的每次调用都会使整个应用程序崩溃。
有什么办法可以解决吗?
错误如下:
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module '@algolia/cache-common'
Require stack:
/opt/nodejs/node_modules/algoliasearch/dist/algoliasearch.cjs.js
/opt/nodejs/node_modules/algoliasearch/index.js
/var/task/dist/api/v1/services/algolia.service.js
/var/task/dist/api/v1/handlers/jobs.handler.js
/var/task/dist/api/v1/controllers/jobs.controller.js
/var/task/dist/api/v1/v1.routes.js
/var/task/dist/api/routes.js
/var/task/dist/serverless.js
/var/runtime/UserFunction.js
/var/runtime/index.js",
"stack": [
"Runtime.ImportModuleError: Error: Cannot find module '@algolia/cache-common'",
"Require stack:",
"- /opt/nodejs/node_modules/algoliasearch/dist/algoliasearch.cjs.js",
"- /opt/nodejs/node_modules/algoliasearch/index.js",
"- /var/task/dist/api/v1/services/algolia.service.js",
"- /var/task/dist/api/v1/handlers/jobs.handler.js",
"- /var/task/dist/api/v1/controllers/jobs.controller.js",
"- /var/task/dist/api/v1/v1.routes.js",
"- /var/task/dist/api/routes.js",
"- /var/task/dist/serverless.js",
"- /var/runtime/UserFunction.js",
"- /var/runtime/index.js",
" at _loadUserApp (/var/runtime/UserFunction.js:202:13)",
" at Object.module.exports.load (/var/runtime/UserFunction.js:242:17)",
" at Object.<anonymous> (/var/runtime/index.js:43:30)",
" at Module._compile (internal/modules/cjs/loader.js:1085:14)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)",
" at Module.load (internal/modules/cjs/loader.js:950:32)",
" at Function.Module._load (internal/modules/cjs/loader.js:790:12)",
" at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)",
" at internal/main/run_main_module.js:17:47"
]
我使用algolia的方式如下:
const applicationId: any = config.get("ALGOLIA.APPLICATION_ID");
const apiKey: any = config.get("ALGOLIA.ADMIN_API_KEY");
const client = algoliasearch(applicationId, apiKey);
const index = client.initIndex("my-actual-index");
我的 lambda 结构是一个 lambda 和 3 个模块层,它适用于我使用的每个库,但尤其不适用于 algolia。当我看 lambda 的包时,我可以看到与 algolia 相关的包
我试过安装正确的包(@algolia/cache-common)但它没有做任何事情,
也试过安装 @types/algolia 但效果不佳。
有什么我遗漏的吗?
当您“安装”像 @algolia/cache-common
这样的依赖项时,您是在本地安装它们。
您安装的依赖项不会自动在 AWS Lambda 上可用。与您的应用程序代码一样,您的依赖项也需要部署。
这就是为什么它可以在您的本地计算机上运行,但不能在 Lambda 上运行的原因。
您没有写任何关于如何部署代码的内容。 AWS SAM or the serverless framework 之类的工具通常不仅会部署您的应用程序代码,还会部署它的依赖项。
所以我想你是手动部署的。这意味着您很可能还必须将 node_modules
文件夹部署到 AWS Lambda。
您的部署 ZIP 存档应如下所示:
node_modules/
index.js
node_modules
文件夹会有很多子文件夹等,显然,您可以有多个 .js
文件。但就此 post 而言,我们就此打住。
了解您如何构建服务肯定会有所帮助。 Algolia 模块是在您的核心服务 lambda 中还是其中一层?我对层知之甚少,但我很好奇如果所有依赖项都捆绑到服务本身,您是否有同样的问题?
这已修复,问题是我拆分为层,并跳过了循环中的第一个索引。
注意 (tl:dr):一切都在本地工作,但在 lambda 中不行。
我在 AWS 中有一个 lambda 函数,当我 运行 服务器在本地时一切正常,algolia 的使用是在服务内部进行的,该服务位于我服务器内的端点中。 我尝试安装@algolia/cache-common 也没有帮助。 由于此错误,对 lambda 的每次调用都会使整个应用程序崩溃。 有什么办法可以解决吗? 错误如下:
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module '@algolia/cache-common'
Require stack:
/opt/nodejs/node_modules/algoliasearch/dist/algoliasearch.cjs.js
/opt/nodejs/node_modules/algoliasearch/index.js
/var/task/dist/api/v1/services/algolia.service.js
/var/task/dist/api/v1/handlers/jobs.handler.js
/var/task/dist/api/v1/controllers/jobs.controller.js
/var/task/dist/api/v1/v1.routes.js
/var/task/dist/api/routes.js
/var/task/dist/serverless.js
/var/runtime/UserFunction.js
/var/runtime/index.js",
"stack": [
"Runtime.ImportModuleError: Error: Cannot find module '@algolia/cache-common'",
"Require stack:",
"- /opt/nodejs/node_modules/algoliasearch/dist/algoliasearch.cjs.js",
"- /opt/nodejs/node_modules/algoliasearch/index.js",
"- /var/task/dist/api/v1/services/algolia.service.js",
"- /var/task/dist/api/v1/handlers/jobs.handler.js",
"- /var/task/dist/api/v1/controllers/jobs.controller.js",
"- /var/task/dist/api/v1/v1.routes.js",
"- /var/task/dist/api/routes.js",
"- /var/task/dist/serverless.js",
"- /var/runtime/UserFunction.js",
"- /var/runtime/index.js",
" at _loadUserApp (/var/runtime/UserFunction.js:202:13)",
" at Object.module.exports.load (/var/runtime/UserFunction.js:242:17)",
" at Object.<anonymous> (/var/runtime/index.js:43:30)",
" at Module._compile (internal/modules/cjs/loader.js:1085:14)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)",
" at Module.load (internal/modules/cjs/loader.js:950:32)",
" at Function.Module._load (internal/modules/cjs/loader.js:790:12)",
" at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)",
" at internal/main/run_main_module.js:17:47"
]
我使用algolia的方式如下:
const applicationId: any = config.get("ALGOLIA.APPLICATION_ID");
const apiKey: any = config.get("ALGOLIA.ADMIN_API_KEY");
const client = algoliasearch(applicationId, apiKey);
const index = client.initIndex("my-actual-index");
我的 lambda 结构是一个 lambda 和 3 个模块层,它适用于我使用的每个库,但尤其不适用于 algolia。当我看 lambda 的包时,我可以看到与 algolia 相关的包
我试过安装正确的包(@algolia/cache-common)但它没有做任何事情, 也试过安装 @types/algolia 但效果不佳。
有什么我遗漏的吗?
当您“安装”像 @algolia/cache-common
这样的依赖项时,您是在本地安装它们。
您安装的依赖项不会自动在 AWS Lambda 上可用。与您的应用程序代码一样,您的依赖项也需要部署。
这就是为什么它可以在您的本地计算机上运行,但不能在 Lambda 上运行的原因。
您没有写任何关于如何部署代码的内容。 AWS SAM or the serverless framework 之类的工具通常不仅会部署您的应用程序代码,还会部署它的依赖项。
所以我想你是手动部署的。这意味着您很可能还必须将 node_modules
文件夹部署到 AWS Lambda。
您的部署 ZIP 存档应如下所示:
node_modules/
index.js
node_modules
文件夹会有很多子文件夹等,显然,您可以有多个 .js
文件。但就此 post 而言,我们就此打住。
了解您如何构建服务肯定会有所帮助。 Algolia 模块是在您的核心服务 lambda 中还是其中一层?我对层知之甚少,但我很好奇如果所有依赖项都捆绑到服务本身,您是否有同样的问题?
这已修复,问题是我拆分为层,并跳过了循环中的第一个索引。