【问题标题】:Serverless Framework with AWS Lambda error "Cannot find module"带有 AWS Lambda 错误“找不到模块”的无服务器框架
【发布时间】:2017-08-10 09:30:42
【问题描述】:

我正在尝试使用无服务器框架创建一个使用开放天气 NPM 模块的 Lambda 函数。但是,我收到以下异常,但我的 node_modules 包含特定的库。

我已成功运行示例 (https://github.com/serverless/examples/tree/master/aws-node-rest-api-with-dynamodb),现在正在添加节点模块以集成开放天气 API。

Endpoint response body before transformations: {"errorMessage":"Cannot find module 'Openweather-Node'","errorType":"Error","stackTrace":["Module.require (module.js:353:17)","require (internal/module.js:12:17)","Object.<anonymous> (/var/task/todos/weather.js:4:17)","Module._compile (module.js:409:26)","Object.Module._extensions..js

我的代码

'use strict';

  const AWS = require('aws-sdk'); // eslint-disable-line import/no-extraneous-dependencies
  var weather = require('Openweather-Node');

  const dynamoDb = new AWS.DynamoDB.DocumentClient();

  module.exports.weather = (event, context, callback) => {
    const params = {
      TableName: process.env.DYNAMODB_TABLE,
      Key: {
        id: event.pathParameters.id,
      },
    };

    weather.setAPPID("mykey");
    //set the culture
    weather.setCulture("fr");
    //set the forecast type
    weather.setForecastType("daily");

    const response = {
      statusCode: 200,
      body: "{test response}",
    };
    callback(null, response);          
  };

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda aws-sdk serverless-framework


    【解决方案1】:

    在执行serverless deploy 之前,您是否在工作目录中添加了npm installaws-sdk 节点模块可用于所有 lambda 函数,但对于所有其他节点依赖项,您必须安装它们,以便在部署时将它们与您的 lambda 打包。

    您可能会在无服务器存储库中发现此问题很有帮助 (https://github.com/serverless/serverless/issues/948)。

    【讨论】:

    • 优秀..除了这个..感谢您的及时回答!
    【解决方案2】:

    我在 package.json 中将所有内容从 devDependencies 移动到 dependencies 时修复了此错误。

    干杯

    【讨论】:

      【解决方案3】:

      如果它适用于这个答案,我不知道,但如果有人只需要大脑刷新,我忘记导出我的处理程序并且正在导出文件,正在寻找一个不存在的默认导出......

      从这里改变... handler: foldername/exports

      对此... handler: foldername/exports.handler

      【讨论】:

        【解决方案4】:

        如果您有外部依赖项,您需要进行包部署。 请看这个答案

        AWS Node JS with Request

        参考

        http://docs.aws.amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html

        【讨论】:

        • 更多详情请
        【解决方案5】:

        我在部署多个 lambda 函数时遇到了同样的问题。我通过以下步骤修复了

        1. 无论您在处理程序处保留什么路径,例如 handler: foldername/exports.handler
        2. 将文件夹内的文件命名为exports.js(无论您如何命名处理程序)
        3. 运行serverless deploy

        这应该可以解决您的问题

        【讨论】:

        • 如果您使用 sam local 开发 lambda,这个选项很好
        【解决方案6】:

        在某些情况下,不要忘记检查全局无服务器安装。 我通过重新安装解决了:

        npm install -g serverless
        

        【讨论】:

          【解决方案7】:

          就我而言,有效的是切换到节点 10(通过 nvm)。我使用的 node (v15.14.0) 版本可能比软件包支持的新版本。

          【讨论】:

            【解决方案8】:

            我的案例是配置参数以创建 AWS lambda 函数。处理程序的正确字符串是(最后一行):

            Resources:
              StringResourceName:
                Type: 'AWS::Serverless::Function'
                Properties:
                  Handler: myFileName.handler
            

            其中 myFileName 是我用作 zip 文件的文件的名称。

            【讨论】:

              【解决方案9】:

              对我来说,问题在于处理程序文件名包含一个点。

              main-handler.graphql.js引起serverless "Error: Cannot find module 'main'.

              当我将文件更改为 main-handler-graphql.js 时,一切正常。

              【讨论】:

                【解决方案10】:

                你应该按如下方式安装你的模块:

                npm install -D <your-module-name> 
                

                【讨论】:

                  猜你喜欢
                  • 2020-12-17
                  • 2018-09-17
                  • 2020-06-27
                  • 1970-01-01
                  • 2021-11-20
                  • 2019-07-15
                  • 2018-09-13
                  • 2019-03-24
                  • 2020-10-14
                  相关资源
                  最近更新 更多