Lambda 因“找不到模块...”而失败

Posted

技术标签:

【中文标题】Lambda 因“找不到模块...”而失败【英文标题】:Lambda fails with "Cannot find module..." 【发布时间】:2020-05-31 06:08:04 【问题描述】:

我正在使用 Webpack 打包我的 lambda。我正在使用 CDK 部署它们。

但是,当通过 ApiGateway 测试它们时,我得到了这个:

由于客户功能,Lambda 执行失败,状态为 200 错误:错误:找不到模块“apollo-server-lambda”。

这是我的 Webpack 配置:


  mode: 'production',
  entry: 
    graphql: './src/lambdas/graphql.ts',
    cognito: './src/lambdas/cognito.ts',
    'smoke-detector': './src/lambdas/smoke-detector.ts',
  ,
  output: 
    libraryTarget: 'commonjs',
    path: path.resolve(__dirname, "dist"),
    filename: '[name]/[name].js'
  ,
  target: 'node',
  externals: [nodeExternals()],
  resolve: 
    extensions: ['.ts', '.js']
  ,
  module: 
    rules: [
      loader(
        test: /\.ts$/,
        use: 
          loader: 'ts-loader',
          options: 
            getCustomTransformers: () => (
              before: [graphqlTag.getTransformer()]
            )
          
        
      ),
      loader(
        test: /\.graphqls$/,
        use: 
          loader: 'graphql-tag/loader',
        
      )
    ]
  ,
  plugins: [
  ]

node graphql.js 这样执行输出文件不会失败。 我做错了什么?

【问题讨论】:

当我得到这个通常是由于某种包装问题。尝试通过 lambda 控制台执行它们,看看是否会出现相同的错误。如果是,请下载 zip 文件并检查其中的实际内容。 @matthelliwell 是的,这是同样的错误。你认为我应该在 lambda 模块中寻找什么? @matthelliwell here's the minimum content。你能发现什么吗? 我看不出任何明显的东西。当我得到这个时,我检查的事情是: 1. 控制台中 lambda 的路径。它应该类似于 dist/src/smoketest.lambda。确保路径上没有前导斜杠,目录和文件名大小写正确,函数名正确。 2. lambda 模块在正确的位置。我已经让它们出现在例如 dist/smoketest 而不是 dist/srcs/smoketest 中。 3. 压缩包中包含smoketest.js 文件,您并没有错误地得到smoketest.ts。 同时下载并解压 zip 文件到一个空白目录并尝试使用与控制台中显示的相同路径从那里运行它,例如 node -e "require('./dist/src/ Smoketest').lambda()" 【参考方案1】:

删除

externals: [nodeExternals()]

解决了问题。

它导致依赖包被排除在外。

【讨论】:

以上是关于Lambda 因“找不到模块...”而失败的主要内容,如果未能解决你的问题,请参考以下文章

aws-lambda 找不到模块

ImportModuleError aws lambda。找不到模块“./json.js”

Lambda:找不到模块 './drivers/node-mongodb-native/connection'”,虽然添加了 mongoose 层

带有 AWS Lambda 错误“找不到模块”的无服务器框架

部署到 AWS lambda 时找不到模块 ./dist/server

Claudia.js create 在 typescript 项目中找不到模块 lambda