serverless 在打包 Runtime.ImportModuleError 时删除了一些 npm 包

问题描述 投票:0回答:1

我正在开发一个

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 问题,但没有找到与我的问题相关的太多内容。谁能解释这种行为?预先感谢。

amazon-web-services npm aws-lambda serverless serverless-framework
1个回答
0
投票

造成这种情况的可能原因有几个。

第一个是自定义的 Serverless Package 配置明确排除该依赖项。

另一种可能的情况是

iterall
是某个其他模块的依赖项,该模块被列为
devDependency
(我们需要查看您的
package.json
文件来确认)。

最后,这些问题可能会因 typescript 和 esbuild/webpack 变得更加复杂,因此如果您正在使用这些配置文件,您可以检查这些配置文件。

其中任何一个都可能导致

iterall
包不包含在最终的 zip 文件中。共享
package.json
文件以及
serverless.yml
文件的相关片段可以帮助澄清这一点。

如果完全删除节点模块并重新运行

npm install --omit=dev
,该包还会出现吗?

© www.soinside.com 2019 - 2024. All rights reserved.