我正在开发一个
aws-nodejs
Serverless.js 项目。当我部署 lambda 时,我开始收到 Runtime.ImportModuleError
错误,表明缺少一些依赖项。经过检查,我发现这是我的项目的传递依赖。在我的项目中,我使用一个名为 graphql-tag
的 npm 包,它有一个名为 graphql
的依赖项,而后者又有一个名为 iterall
的依赖项。
由于这种
Module.ImportError
依赖性而发生
iterall
。我在本地查的时候,我本地就有这个包了node_modules
。然而,当我检查Lambda中部署的代码时,它根本没有这个包。不仅如此,当将我的本地 node_modules 与部署的代码进行比较时,我注意到部署的代码中只包含很少的依赖项。
所以,我有点困惑,因为我没有在
serverless.yml
中指定要包含或排除的任何内容。为什么它只选择几个依赖项?为什么从sls package
生成的node_modules包含的包比本地node_modules少?此外,iterall
不是 graphql
包的开发依赖。
我检查了 GitHub 问题和 StackOverflow 问题,但没有找到与我的问题相关的太多内容。谁能解释这种行为?预先感谢。
造成这种情况的可能原因有几个。
第一个是自定义的 Serverless Package 配置明确排除该依赖项。
另一种可能的情况是
iterall
是某个其他模块的依赖项,该模块被列为 devDependency
(我们需要查看您的 package.json
文件来确认)。
最后,这些问题可能会因 typescript 和 esbuild/webpack 变得更加复杂,因此如果您正在使用这些配置文件,您可以检查这些配置文件。
其中任何一个都可能导致
iterall
包不包含在最终的 zip 文件中。共享 package.json
文件以及 serverless.yml
文件的相关片段可以帮助澄清这一点。
如果完全删除节点模块并重新运行
npm install --omit=dev
,该包还会出现吗?