我一直在尝试将我们的node.js应用程序转换并部署到lambda函数中,并且遇到了node_modules依赖项的一些问题 - 说它无法找到某些模块。我首先创建了一个package.json,然后在本地安装依赖项,然后将节点模块文件夹复制到lambda。
例如,我有一个需要续集和定罪的项目,并且一直在收到错误,说它无法找到当前模块作为子依赖项。我看到那个时刻包含在我的node_modules的根目录中,但它没有包含在sequelize模块下的子文件夹中。
但是,这个项目在本地运行良好。 lambda的区别是什么,以及用它来部署一长串节点模块的最佳实践 - 只是node_modules文件夹的一个副本?在我所拥有的一些其他更简单的项目中,可以毫无问题地复制少量的node_modules。
{ "errorMessage": "Cannot find module 'moment'", "errorType": "Error", "stackTrace": [ "Function.Module._resolveFilename (module.js:338:15)", "Function.Module._load (module.js:280:25)", "Module.require (module.js:364:17)", "require (module.js:380:17)", "VERSION (/var/task/node_modules/sequelize/node_modules/moment-timezone/moment-timezone.js:14:28)", "Object. (/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)" ] }
答案 0 :(得分:1)
我通过从包含lambda函数所需的所有数据的zip文件上传所有内容来解决这个问题。
您可以在本地计算机上创建项目并进行所需的所有更改,然后您要压缩的文件应具有相同的结构,并且还可以看到有一个选项可以从zip文件加载代码
答案 1 :(得分:0)
这听起来像是由npm
的不同版本引起的问题。您是否在本地运行与Lambda使用的相同版本的nodejs(即v0.10.36
)?
根据您在本地安装模块所使用的npm
版本,node_modules
目录的内容布局略有不同(主要是为了重复删除)事情),这可能就是为什么你的依赖关系无法在Lambda中找到它们的依赖。
经过一番挖掘,听起来像一个干净的安装(即。rm
您的node_modules
目录并运行npm install
)可能会为您清理干净。原因是npm
似乎没有安装子依赖项,如果它们已经存在于顶层(即您在moment
之前安装了sequelize
等等。)