Claudia.js create не может найти модуль лямбда в проекте машинописи

После долгих поисков я не могу понять, как правильно запустить claudia create в моем проекте.

Следуя этой инструкции, я создал группу и пользователя на консоли AWS, затем добавил ключи в мой файл.aws/credentials.

Затем я запустил эту команду, которая правильно создала файл lambda.js:

claudia --source dist generate-serverless-express-proxy --express-module app

Мой lambda.js

'use strict'
const awsServerlessExpress = require('aws-serverless-express')
const app = require('./app')
const binaryMimeTypes = [
    'application/octet-stream',
    'font/eot',
    'font/opentype',
    'font/otf',
    'image/jpeg',
    'image/png',
    'image/svg+xml'
]
const server = awsServerlessExpress.createServer(app, null, binaryMimeTypes);
exports.handler = (event, context) => awsServerlessExpress.proxy(server, event, context)

Затем я попытался развернуть лямбда-функцию на AWS:

Клаудия создать --source dist --profile myprofile --handler lambda.handler --deploy-proxy-api --region eu-west-1

Но я получил эту ошибку:

проверка пакета TypeError: аргумент "listener" должен быть функцией в _addListener (events.js:239:11) в Server.addListener (events.js:297:10) на новом сервере (_http_server.js:269:10) в Object.createServer (http.js:34:10) в Object.createServer (/tmp/IiRPif/my-project-1.0.0-1Yh6Wb/package/node_modules/aws-serverless-express/index.js:155:25) в Объект. (/tmp/IiRPif/my-project-1.0.0-1Yh6Wb/package/lambda.js:13:37) в Module._compile (module.js:652:30) в Object.Module._extensions..js (module.js:663:10) в Module.load (module.js:565:32) в tryModuleLoad (module.js:505:12) в Function.Module._load (module.js:497:3) в Module.require (module.js:596:17) по требованию (internal/module.js:11:18) по validatePackage (/usr/local/lib/node_modules/claudia/src/tasks/validate-package.js:16:15) в initEnvVarsFromOptions.then.then.then.then.then.then.then.dir (/usr/local/lib/node_modules/claudia/src/commands/create.js:342:10) в не может потребоваться./lambda после очистки монтаж. Проверьте свои зависимости.

Что я здесь не так делаю?

Мой пакет.json

{ 
  "name": "...",
  "version": "1.0.0",
  "scripts": {
    "build": "tsc -p tsconfig.json & cp \"package.json\" \"dist/package.json\"
  },
  "repository": {
    "type": "git",
    "url": "..."
  },
  "homepage": "...",
  "dependencies": {
    "body-parser": "^1.18.3",
    "express": "^4.16.3",
    "mongoose": "^5.2.7",
    "nodemon": "^1.18.3"
  },
  "devDependencies": {
    "typescript": "^3.0.1"
  }
}

Мои приложения

import * as express from "express";
import * as bodyParser from "body-parser";
import * as mongoose from "mongoose";
import { Routes } from "./routes/routes";

class App {

    public app: express.Application;
    public routes: Routes = new Routes();

    constructor() {
        this.app = express();

        // Parser setup
        this.app.use(bodyParser.json());
        this.app.use(bodyParser.urlencoded({ extended: true }));

        this.routes.routes(this.app);            
    }
}

exports.default = new App().app;

1 ответ

Решение

После обсуждения github Клаудии, похоже, это проблема совместимости между es6 и claudia/lambda.

Все, что мне нужно было сделать, это изменить эту строку в файле app.js из:

exports.default = new App().app;

Кому:

module.exports = new App().app;
Другие вопросы по тегам