找不到模块:'@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 中还是其中一层?我对层知之甚少,但我很好奇如果所有依赖项都捆绑到服务本身,您是否有同样的问题?

这已修复,问题是我拆分为层,并跳过了循环中的第一个索引。