【问题标题】:lambda not finding my node_moduleslambda 找不到我的 node_modules
【发布时间】:2015-11-02 16:37:30
【问题描述】:

我正在尝试使用我的 lambda 上传 node_modules,但出现 "Cannot find module" 错误。

我已经用

建立了一个真正简单的 hello world js 文件
var async = require('async');

我已经手动将 node_modules/async 文件夹复制到分发包中 - 我复制了 node_modules 文件夹以及 hello world js 文件。

我用我的照片调整器 lambda 做了一个非常相似的事情,它也采用节点模块并且有效。我做错了什么有什么不同?

【问题讨论】:

标签: amazon-web-services aws-lambda


【解决方案1】:

zip 文件的结构很重要。假设我有一个 javascript 函数包含在一个名为 foo.js 的文件中,该文件依赖于其他节点模块。

在我的开发环境中,我会有这样的结构:

devdir/
    foo/
        foo.js
        node_modules/
            <the nodejs modules>

然后我创建一个名为 foo.zip 的 zip 文件,其结构如下:

$ unzip -vl foo.zip 
Archive:  foo.zip
 Length   Method    Size  Ratio   Date   Time   CRC-32    Name
 -------  ------  ------- -----   ----   ----   ------    ----
       0  Defl:N        0   0%  08-05-15 14:44  00000000  ./
    3047  Defl:N      981  68%  08-05-15 14:25  06e3e178 foo.js
       0  Defl:N        0   0%  08-03-15 13:37  00000000  node_modules/
       0  Defl:N        0   0%  08-03-15 13:37  00000000 node_modules/.bin/
     597  Defl:N      301  50%  03-05-15 14:29  9b0c2ba2  node_modules/.bin/uuid
       0  Defl:N        0   0%  07-16-15 08:32  00000000  node_modules/async/
    3454  Defl:N     1537  56%  06-28-15 18:37  967a5404  node_modules/async/CHANGELOG.md
<...>

确保你的 zip 文件是这样的结构,你应该没问题。

【讨论】:

  • 错误是我的问题 - 我的 zip gulp 任务遗漏了 package.json 文件
  • 感谢@garnaat 的回答。为了后代,我发现 Lambda 更喜欢依赖项位于根级别,而不是在传统的 node_modules 目录中。
  • 当你说prefer时,你到底是什么意思? node_modules 目录对您不起作用吗?
【解决方案2】:

我把它放在这里作为替代答案。我花了整个下午试图让我的模块在 Lambda 中运行。我的结构与其他答案中显示的相同,但不断收到“找不到模块”错误或 Object.fs.readFileSync 错误。事实证明,在压缩之前确保所有 js 文件都是可执行的,这是我错过的一个重要步骤。 chown 也可能对您自己的所有文件有所帮助。

sudo chmod +x *.js -R
sudo chown myself.myself * -R
zip -r lambda.zip .

然后上传lambda.zip包并测试。

【讨论】:

    猜你喜欢
    • 2020-01-05
    • 2021-03-30
    • 2018-05-23
    • 2019-05-16
    • 2017-06-23
    • 1970-01-01
    • 2018-07-07
    • 2016-10-05
    • 2014-09-18
    相关资源
    最近更新 更多