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

Posted

技术标签:

【中文标题】Claudia.js create 在 typescript 项目中找不到模块 lambda【英文标题】:Claudia.js create cannot find module lambda in typescript project 【发布时间】:2019-01-20 07:21:54 【问题描述】:

搜索了几个小时后,我无法弄清楚如何在我的项目中正确运行 claudia create

在this turoial 之后,我在 AWS 控制台中创建了一个组和一个用户,然后我将密钥添加到了我的 .aws/credentials 文件中。

然后我运行了正确生成 lambda.js 文件的命令:

克劳迪娅 --source dist generate-serverless-express-proxy --express-module 应用程序

我的 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 上部署 lambda 函数:

克劳迪娅创建 --source dist --profile myprofile --handler lambda.handler --deploy-proxy-api --region eu-west-1

但是我收到了这个错误:

验证包类型错误:“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) 在要求(内部/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) at 在全新安装后不能需要 ./lambda。检查你的依赖关系。

我在这里做错了什么?

我的package.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"
  

我的app.ts

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】:

discussion on Claudia's github 之后,这似乎是 es6 和 claudia/lambda 之间的兼容性问题。

我需要做的就是将 app.js 文件中的这一行从:

exports.default = new App().app;

收件人:

module.exports = new App().app;

【讨论】:

以上是关于Claudia.js create 在 typescript 项目中找不到模块 lambda的主要内容,如果未能解决你的问题,请参考以下文章

在 FORTRAN 90 中使用 MPI_Type_Create_Subarray

使用 MPI_Type_create_subarray 发送时可以转置数组吗?

如何使用 MPI_Type_create_subarray?

Oracle CREATE TYPE 和 PL/SQL

如何在 CREATE TYPE 中使用原始 Postgres 输入/输出函数?

无法理解 MPI_Type_create_struct