node.js - 将编译的 typescript 部署到 lambda 时导入模块错误

标签 node.js typescript aws-lambda

我正在将一些 JS 代码转换为 typescript ,当使用无服务器框架部署到 AWS 上的 lambda 并运行它时,我收到以下错误。起初我以为我的一个进口产品很糟糕,但看起来一切都符合预期。

{ "errorType": "Runtime.ImportModuleError", "errorMessage": "Error: Cannot find module 'tslib'\nRequire stack:\n- /var/task/handlers/Create.js\n- >/var/runtime/UserFunction.js\n- /var/runtime/index.js", "trace": [ "Runtime.ImportModuleError: Error: Cannot find module 'tslib'", "Require stack:", "- /var/task/handlers/Create.js", "- /var/runtime/UserFunction.js", "- /var/runtime/index.js", " at _loadUserApp (/var/runtime/UserFunction.js:100:13)", " at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)", " at Object. (/var/runtime/index.js:43:30)", " at Module._compile (internal/modules/cjs/loader.js:956:30)", " at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)", " at Module.load (internal/modules/cjs/loader.js:812:32)", " at Function.Module._load (internal/modules/cjs/loader.js:724:14)", " at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)", " at internal/main/run_main_module.js:17:11" ] }

无服务器:

functions:
  createFamily:
    name: ${self:custom.createFamilyName}
    handler: handlers/Create.createFamily
    description: Lambda for Creating a family in the family service
    timeout: 30
    events:
      - http:
          path: /family
          method: post
          private: true

处理程序:

import { APIGatewayEvent, Context, ProxyResult } from 'aws-lambda';
import { utilities } from '../handlers/utilities';
import { familyService } from '../services/FamilyService';
import { IFamily } from '../interfaces/IFamily';

let familyData: IFamily;
let serverReturn: IFamily;

export const createFamily = async (
    event: APIGatewayEvent,
    context: Context
): Promise<ProxyResult> => {
    try {
        if (!event.body) {
            return utilities.BuildResponse(400, JSON.stringify('Object to create was not provided'));
        }
        familyData = JSON.parse(event.body);
        serverReturn = await familyService.createFamily(familyData);

        if (!serverReturn) {
            return utilities.BuildResponse(404, JSON.stringify('Failed to create Family'));
        }

        return utilities.BuildResponse(201, JSON.stringify(serverReturn));
    } catch(err) {
        console.error('Family Service Create a family error: ', err);
        return utilities.BuildResponse(500, JSON.stringify('Family Service internal server error'));
    }
}

最佳答案

您需要将 typescript 编译为 JavaScript 并在模板中引用转换后的输出。

关于node.js - 将编译的 typescript 部署到 lambda 时导入模块错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59829533/

相关文章:

javascript - 我无法调用命名回调函数

javascript - Express 4 和 socket.io

javascript - typescript 对象解构被 ESLint no-unused-vars 规则捕获

typescript - 在 TypeScript 类中创建自定义事件

amazon-web-services - 具有 Cloudformation 的 AWS 无服务器 API 的阶段 "dev already exists"

c# - 如何从 lambda 函数访问 S3 存储桶中的文件

浏览器中的 javascript require

javascript - node.js/express 链接多个 get 命令

javascript - Angular 2 获取 header 响应

javascript - getSecretValue 回调在 AWS Lambda 中不起作用