【问题标题】:node_module errors with AWS lambda, what's the best practice for dependencies?AWS lambda 的 node_module 错误,依赖项的最佳实践是什么?
【发布时间】:2015-10-14 08:58:16
【问题描述】:

我一直在尝试将我们的一个 node.js 应用程序转换并部署到 lambda 函数中,并且在 node_modules 依赖项方面遇到了一些问题 - 说它找不到某些模块。我首先创建了一个 package.json,npm 在本地安装依赖项,然后将节点模块文件夹复制到 lambda。

例如,我有一个需要 sequelize 和 convict 的项目,并且一直收到错误说它无法将 moment 模块作为子依赖项找到。我看到那个时刻包含在我的 node_modules 的根目录中,但它没有包含在 sequelize 模块下的子文件夹中。

但是,这个项目在本地运行良好。 lambda 有什么区别,使用它部署较长的节点模块列表的最佳实践是什么 - 只是 node_modules 文件夹的副本?在我拥有的其他一些更简单的项目中,可以毫无问题地复制少量的 node_modules。

{ "errorMessage": "找不到模块'moment'", "errorType": "错误", “堆栈跟踪”: [ "Function.Module._resolveFilename (module.js:338:15)", "Function.Module._load (module.js:280:25)", "Module.require (module.js:364:17)", “需要(module.js:380:17)”, “版本(/var/task/node_modules/sequelize/node_modules/moment-timezone/moment-timezone.js:14:28)”, “对象。(/var/task/node_modules/sequelize/node_modules/moment-timezone/moment-timezone.js:18:2)”, "Module._compile (module.js:456:26)", “Object.Module._extensions..js (module.js:474:10)”, "Module.load (module.js:356:32)", “Function.Module._load (module.js:312:12)” ] }

【问题讨论】:

    标签: aws-lambda


    【解决方案1】:

    我通过从包含我的 lambda 函数所需的所有数据的 zip 文件上传所有内容来解决此问题。

    您可以在本地计算机上创建项目并进行所需的所有更改,然后您要压缩的文件应该具有相同的结构,并且还可以看到有一个从 zip 文件加载代码的选项.

    【讨论】:

      【解决方案2】:

      这听起来像是npm 的不同版本引起的问题。您是否在本地运行与 Lambda 使用的相同版本的 nodejs(即v0.10.36)?

      根据您用于在本地安装模块的npm 的版本,node_modules 目录的内容布局略有不同(主要是为了消除重复内容),这可能就是您的依赖项的原因在 Lambda 中找不到它们的依赖项。

      经过一番挖掘,听起来像是全新安装(即rm 您的node_modules 目录并运行npm install)可能会为您清理干净。原因是npm 似乎不会安装子依赖项,如果它们已经存在于顶层(即您在sequelize 之前安装了moment 等)。

      【讨论】:

        猜你喜欢
        • 2018-10-04
        • 2011-10-15
        • 2019-08-24
        • 2011-08-16
        • 2022-08-09
        • 2021-10-10
        • 1970-01-01
        • 1970-01-01
        • 2018-03-03
        相关资源
        最近更新 更多