首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部署到AWS lambda时无法找到模块./dist/server

部署到AWS lambda时无法找到模块./dist/server
EN

Stack Overflow用户
提问于 2019-10-21 00:24:40
回答 2查看 2.6K关注 0票数 4

我使用节点serverless deploy在AWS中运行一个简单的serverless网站,然后向站点添加更多内容并更新为最新版本的无服务器服务器,现在当我部署站点并访问我获得的URL时:

代码语言:javascript
复制
{"message": "Internal server error"}

当我访问lambda控制台时,我得到:

代码语言:javascript
复制
{
  "errorType": "Runtime.ImportModuleError",
  "errorMessage": "Error: Cannot find module './dist/server'",
  "trace": [
    "Runtime.ImportModuleError: Error: Cannot find module './dist/server'",
    "    at _loadUserApp (/var/runtime/UserFunction.js:100:13)",
    "    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
    "    at Object.<anonymous> (/var/runtime/index.js:45:30)",
    "    at Module._compile (internal/modules/cjs/loader.js:778:30)",
    "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)",
    "    at Module.load (internal/modules/cjs/loader.js:653:32)",
    "    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)",
    "    at Function.Module._load (internal/modules/cjs/loader.js:585:3)",
    "    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)",
    "    at startup (internal/bootstrap/node.js:283:19)"
  ]
}

知道怎么解决这个问题吗?

更多信息

基于@Amit Barane的评论,下面引用了这是如此的帖子,这里是一个角度的站点。我不太明白我需要更改处理程序名来匹配我的站点结构。我不是自己将文件打包到.zip中,而是通过节点运行serverless deploy命令:

这是serverless.yml网站

代码语言:javascript
复制
# generated by @ng-toolkit/serverless
service: serverless-site

plugins:
  - serverless-apigw-binary

provider:
  name: aws
  runtime: nodejs10.x
  memorySize: 192
  timeout: 10
  stage: production
  region: us-east-1

package:
  exclude:
   - src/**
   - node_modules/**
   - firebug-lite/**
   - e2e/**
   - coverage/**
   - '!node_modules/aws-serverless-express/**'
   - '!node_modules/binary-case/**'
   - '!node_modules/type-is/**'
   - '!node_modules/media-typer/**'
   - '!node_modules/mime-types/**'
   - '!node_modules/mime-db/**'

custom:
  apigwBinary:
    types:
      - '*/*'

functions:
  api:
    handler: lambda.universal
    events:
      - http: ANY {proxy+}
      - http: ANY /

下面是我的项目文件结构(从src目录中开始)。

以下是部署时的网站lambda功能:

因为这个函数没有server.js。我试图通过修改server.ts并将其放入文件夹中创建,但没有结果:

代码语言:javascript
复制
// generated by Paul
//import 'zone.js/dist/zone-node';
//import 'reflect-metadata';

var express =require('express');
var cors= require('cors');
var compression =require('compression');

var join=require('path').join;

export const app = express();

app.use(compression());
app.use(cors());

const DIST_FOLDER = join(process.cwd(), 'dist/serverless-site');

app.get('*.*', express.static(join(DIST_FOLDER), {
    maxAge: '1y'
}));

app.get('/*', (req, res) => {
    res.sendFile(join(DIST_FOLDER + '/index.html'));
});
EN

回答 2

Stack Overflow用户

发布于 2021-05-31 14:28:45

因此,server.js似乎不是在dist文件夹中创建的。

我是通过在npm run build:server:prod之前运行serverless deploy来工作的

我的package.json中的相关行如下:

"build:server:serverless": "webpack --config webpack.server.config.js"

这可能不是正确的方法,但它解决了找不到./dist/server的问题,并将我带到下一个错误:

代码语言:javascript
复制
{
    "errorType": "TypeError",
    "errorMessage": "express is not a function",
    "stack": [
        "TypeError: express is not a function",
        "    at Object.<anonymous> (/var/task/dist/server.js:9231:15)",
        "    at __webpack_require__ (/var/task/dist/server.js:21:30)",
        "    at /var/task/dist/server.js:85:18",
        "    at Object.<anonymous> (/var/task/dist/server.js:88:10)",
        "    at Module._compile (internal/modules/cjs/loader.js:778:30)",
        "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)",
        "    at Module.load (internal/modules/cjs/loader.js:653:32)",
        "    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)",
        "    at Function.Module._load (internal/modules/cjs/loader.js:585:3)",
        "    at Module.require (internal/modules/cjs/loader.js:692:17)"
    ]
}

我通过在tsconfig文件中设置esModuleInterop = false来修复快速错误,这要感谢AWS无服务器Lambda +角- TypeError: express不是函数

票数 0
EN

Stack Overflow用户

发布于 2019-11-20 16:26:43

我确实看到您正在使用ng-toolkit包,以便为您的角度应用程序提供通用+无服务器功能。

基于此,我认为您收到了这样的错误,原因是软件包的最新版本配置错误,其中包括服务器文件中的一些错误以及与Angular/Universal包的不匹配。

在此期间,我确实建议查看我的样本回购,示例角ng-工具箱已经修复了这个问题。

要指出的是:这是由webpack.config选项externals引起的,它是在最新的角通用封装的express-engine原理图上引入的。评论这一行,会解决你的问题。

对我来说,原因目前还不清楚,但希望我能把我的发现带到这个话题上来。

干杯!

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58478403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档